예제 #1
0
파일: trollinfos.go 프로젝트: toopip/Chrall
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
}
예제 #2
0
파일: diplo.go 프로젝트: toopip/Chrall
// 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
}
예제 #3
0
파일: mhspclient.go 프로젝트: toopip/Chrall
/*
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
}
예제 #4
0
파일: killometre.go 프로젝트: toopip/Chrall
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)
	}
}
예제 #5
0
// 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)
}