func (m *TksManager) ReadGuildCsvFileIfNew() error { mutexLectures.Lock() defer mutexLectures.Unlock() filename := filepath.Join(m.cheminDonnées, "Public_Guildes.txt") if m.lastGuildFileRead > 0 { fi, err := os.Stat(filename) if err != nil { return err } if !!fi.IsDir() { return errors.New("TksManager : Fichier " + filename + " introuvable ou anormal") } if fi.ModTime().Unix() < m.lastGuildFileRead { return nil } } f, err := os.Open(filename) if err != nil { return err } defer f.Close() r := bufio.NewReader(f) line, err := r.ReadString('\n') for err == nil { tokens := strings.SplitN(line, ";", 4) if len(tokens) < 2 { fmt.Println("Ligne invalide") } else { gi := new(GuildInfos) id, _ := strconv.Atoi(tokens[0]) gi.Nom = chrall.Iso88591ToUtf8(tokens[1]) if id >= len(m.Guildes) { if id >= cap(m.Guildes) { newSlice := make([]*GuildInfos, ((id+1)*5/4)+100) copy(newSlice, m.Guildes) m.Guildes = newSlice } m.Guildes = m.Guildes[0 : id+1] } m.Guildes[id] = gi } line, err = r.ReadString('\n') } if err != io.EOF { fmt.Println("Erreur au parsage :") fmt.Println(err) return err } m.lastTrollFileRead = time.Now().Unix() fmt.Println("TksManager : Fichier des guildes lu") return nil }
// charge un fichier de diplo (il vaut mieux partir d'un graphe vide avant de charger un jeu de fichiers) func (g *DiploGraph) ReadDiploGraph(r *bufio.Reader, ascii bool, subjectIsTroll bool) error { line, err := r.ReadString('\n') // TODO : utiliser r.ReadLine() plutôt que r.ReadString('\n') for err == nil { tokens := strings.SplitN(line, ";", 6) if len(tokens) < 5 { fmt.Println("Ligne invalide") continue } sid := chrall.AtoId(tokens[0]) eIsTroll := false if tokens[1] == "T" { eIsTroll = true } eid := chrall.AtoId(tokens[2]) v := new(DiploVertice) sn := getOrCreateNode(g.Guilds, sid) sn.IsTroll = subjectIsTroll var en *DiploNode if eIsTroll { en = getOrCreateNode(g.Trolls, eid) en.IsTroll = true } else { en = getOrCreateNode(g.Guilds, eid) } v.Start = sn v.End = en sn.Starts = AddVertice(sn.Starts, v) en.Ends = AddVertice(en.Ends, v) v.Text = strings.Trim(tokens[3], " ") if ascii { v.Text = chrall.Iso88591ToUtf8(v.Text) } if tokens[4] == "ENNEMI" { v.Foe = true } g.Vertices[v.Key()] = v line, err = r.ReadString('\n') //~ if subjectIsTroll { // DEBUG de la diplo troll //~ fmt.Println(v.ColoredText()) //~ } } if err != io.EOF { fmt.Println("Erreur au parsage de la diplo :") fmt.Println(err) return err } return nil }
/* récupère la vue d'un troll. Renvoie des SoapItem pour la compatibilité avec la fonction FetchVueSoap. Utilise le TksManager pour renseigner le nom du troll qui n'est pas renvoyé par le sp. Paramètres avecTresors, avecLieux : 0 ou 1 */ func FetchVueSp(numero int, mdp_restreint string, avecTresors int, avecLieux int, tksManager *TksManager) (items []*SoapItem, errorDetails string) { httpClient := new(http.Client) request := fmt.Sprintf("http://sp.mountyhall.com/SP_Vue2.php?Numero=%d&Motdepasse=%s&Tresors=%d&Lieux=%d", numero, mdp_restreint, avecTresors, avecLieux) resp, err := httpClient.Get(request) if err != nil { errorDetails = err.Error() return } defer resp.Body.Close() r := bufio.NewReader(resp.Body) bline, _, _ := r.ReadLine() line := string(bline) currentType := "" for line != "" { if line[0] == '#' { tokens := strings.SplitN(line, " ", 2) if tokens[0] == "#DEBUT" && len(tokens) > 1 { currentType = (tokens[1])[0 : len(tokens[1])-1] } } else { tokens := strings.SplitN(line, ";", 5) //fmt.Printf(" %s %+v\n", currentType, tokens) item := new(SoapItem) item.Numero, _ = strconv.Atoi(tokens[0]) if item.Numero > 0 { if currentType == "TROLL" && len(tokens) > 3 { item.Nom, _, _ = tksManager.GetNomRaceNiveauTroll(item.Numero) item.PositionX, _ = strconv.Atoi(tokens[1]) item.PositionY, _ = strconv.Atoi(tokens[2]) item.PositionN, _ = strconv.Atoi(tokens[3]) } else if len(tokens) > 4 { item.Nom = chrall.Iso88591ToUtf8(tokens[1]) item.PositionX, _ = strconv.Atoi(tokens[2]) item.PositionY, _ = strconv.Atoi(tokens[3]) item.PositionN, _ = strconv.Atoi(tokens[4]) } if item.Nom != "" && currentType != "" { item.Type = currentType items = append(items, item) } } } bline, _, _ = r.ReadLine() line = string(bline) } return }
func (km *Killomètre) parseLigneTroll(line string) { tokens := strings.SplitN(line, ";", 9) if len(tokens) < 7 { log.Printf("Ligne non comprise : %s\n", line) return } trollId, _ := strconv.Atoi(tokens[0]) troll := km.initTroll(trollId) troll.Nom = chrall.Iso88591ToUtf8(tokens[1]) troll.Race = race(tokens[2]) n64, _ := strconv.ParseUint(tokens[3], 10, 0) troll.Niveau = int(n64) var err error troll.IdGuilde, err = strconv.Atoi(tokens[6]) if err != nil { log.Println("Error in parsing :") log.Println(err) } }
// ne doit être appelée qu'une fois, lors de l'import de données encodées en ISO 88591 func (a *Action) Sanitize() { if a.Degats > 0 && a.PV == 0 { a.PV = a.Degats } a.Type = chrall.Iso88591ToUtf8(a.Type) }