This repository has been archived by the owner on Dec 16, 2018. It is now read-only.
/
games.go
123 lines (103 loc) · 2.66 KB
/
games.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package main
import (
"fmt"
"github.com/TrevorSStone/goriot"
"github.com/coopernurse/gorp"
)
type GameInfo struct {
SummonerID int64
Game goriot.Game
}
// use list of summoners to download game data
func updateGames(summoners <-chan SummonerInfo, dbmap *gorp.DbMap) (gameCount int) {
var out int = 0
gameChan1 := make(chan GameInfo)
// dump game info into channel
globalWg.Add(1)
go func() {
for s := range summoners {
summonerGames, riotErr := goriot.RecentGameBySummoner(goriot.NA, s.ID)
checkErr(
riotErr,
fmt.Sprintf(
"Unable to get summoner's (%d) recent games",
s.ID))
for _, game := range summonerGames {
gameChan1 <- GameInfo{s.ID, game}
}
}
close(gameChan1)
globalWg.Done()
}()
gameChan2 := updateGameInfo(gameChan1, dbmap)
updateSummonerGames(gameChan2, dbmap)
return out
}
// Updates the common game information
func updateGameInfo(games <-chan GameInfo, db *gorp.DbMap) <-chan GameInfo {
// TODO: Use insert/update query instead
var gameInfoQuery string = `
INSERT IGNORE INTO game_info
(id, mode, type, subType, mapId, date)
VALUES
(?, ?, ?, ?, ?, FROM_UNIXTIME(?))`
out := make(chan GameInfo)
globalWg.Add(1)
go func() {
for gi := range games {
_, infoErr := db.Exec(
gameInfoQuery,
gi.Game.GameID,
gi.Game.GameMode,
gi.Game.GameType,
gi.Game.SubType,
gi.Game.MapID,
gi.Game.CreateDate/1000)
checkErr(infoErr, "Unable to insert new game info")
out <- gi
}
close(out)
globalWg.Done()
}()
return out
}
// Updates a summoners specific game information
func updateSummonerGames(
gameStats <-chan GameInfo,
db *gorp.DbMap) {
// save summoner_game
// TODO: Use insert/update query instead
var summonerGameQuery string = `
INSERT IGNORE INTO summoner_games
(summonerId,
gameId,
championId,
spellOne,
spellTwo,
minionsKilled,
numDeaths,
assists,
championsKilled,
won)
VALUES
(?,?,?,?,?,?,?,?,?,?)`
globalWg.Add(1)
go func() {
for gs := range gameStats {
_, sgErr := db.Exec(
summonerGameQuery,
gs.SummonerID,
gs.Game.GameID,
gs.Game.ChampionID,
gs.Game.Spell1,
gs.Game.Spell2,
gs.Game.Statistics.MinionsKilled,
gs.Game.Statistics.NumDeaths,
gs.Game.Statistics.Assists,
gs.Game.Statistics.ChampionsKilled,
gs.Game.Statistics.Win)
checkErr(sgErr, "Could not save summoner game info")
}
globalWg.Done()
}()
}