Esempio n. 1
0
func parseEventsInto(c *census.Census, events *census.EventStream, pop *census.PopulationSet) {
loop:
	for {
		select {
		case err := <-events.Err:
			if strings.Contains(err.Error(), census.ErrCharDoesNotExist.Error()) {
				fmt.Printf("Events: error: %v\n", err.Error())
			}
		case <-events.Closed:
			fmt.Printf("Events: websocket closed\n")
			break loop
		case event := <-events.Events:
			switch event.Payload.EventName {
			case "PlayerLogin":
				ch, err := c.GetCharacterByIDRes(event.Payload.CharacterID, "faction")
				if err != nil {
					if err == census.ErrCharDoesNotExist {
						continue
					}
					fmt.Printf("Events: ERROR: Failed to get character from ID: '%v' [%v]\n",
						event.Payload.CharacterID, err.Error())
					continue
				}
				server := c.GetServerByID(event.Payload.WorldID)
				pop.PlayerLogin(server.Name.En, ch.FactionID)
			case "PlayerLogout":
				ch, err := c.GetCharacterByIDRes(event.Payload.CharacterID, "faction")
				if err != nil {
					fmt.Printf("ERROR: Failed to get character from ID: '%v' [%v]\n",
						event.Payload.CharacterID, err.Error())
					continue
				}
				server := c.GetServerByID(event.Payload.WorldID)
				pop.PlayerLogin(server.Name.En, ch.FactionID)
			}
		}
	}
	events.Close()
}