コード例 #1
0
ファイル: pop.go プロジェクト: THUNDERGROOVE/stats-bot
func DoUSPop() {
	USPop = Census.NewPopulationSet()
	for {
		USEvents = Census.NewEventStream()

		sub := census.NewEventSubscription()
		sub.Worlds = []string{"all"}
		sub.Characters = []string{"all"}
		sub.EventNames = []string{"PlayerLogin", "PlayerLogout"}

		if err := USEvents.Subscribe(sub); err != nil {
			fmt.Printf("FAIL: Couldn't subscribe to events: [%v]\n", err.Error())
		}

		parseEventsInto(Census, USEvents, USPop)
	}
}
コード例 #2
0
ファイル: main.go プロジェクト: THUNDERGROOVE/census
func main() {
	fmt.Printf("Starting to gather server population info\nPress Ctrl-C to quit\n")
	c := census.NewCensus("s:maximumtwang", "ps2ps4us:v2")

	events := c.NewEventStream()
	sub := census.NewEventSubscription()
	sub.Worlds = []string{"all"}
	sub.Characters = []string{"all"}
	sub.EventNames = []string{"PlayerLogin", "PlayerLogout"}
	if err := events.Subscribe(sub); err != nil {
		fmt.Printf("FAIL: Couldn't subscribe to events: [%v]\n", err.Error())
		return
	}
	pop := c.NewPopulationSet()

	infoChan := make(chan struct{}, 0)
	go func() {
		fmt.Printf("Press Enter to print stats!\n")
		for {
			pause()
			infoChan <- struct{}{}
		}
	}()

	for {
		select {
		case <-infoChan:
			fmt.Printf("Printing server population info: \n")
			for name, server := range pop.Servers {
				fmt.Printf("%v:\n", name)
				fmt.Printf("VS: %v:%%%v\n", server.VS, server.VSPercent())
				fmt.Printf("TR: %v:%%%v\n", server.TR, server.TRPercent())
				fmt.Printf("NC: %v:%%%v\n", server.NC, server.NCPercent())
			}
		case err := <-events.Err:
			fmt.Printf("error: %v\n", err.Error())
		case <-events.Closed:
			fmt.Printf("Websocket closed\n")
			break
		case event := <-events.Events:
			switch event.Payload.EventName {
			case "PlayerLogin":
				ch, err := c.GetCharacterByID(event.Payload.CharacterID)
				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)
			case "PlayerLogout":
				ch, err := c.GetCharacterByID(event.Payload.CharacterID)
				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)
			}
		}
	}
}