/
UpdateGame.go
97 lines (83 loc) · 2.31 KB
/
UpdateGame.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
package theater
import (
"github.com/OSHeroes/bfheroesFesl/inter/network"
"github.com/sirupsen/logrus"
"strings"
)
type reqUGAM struct {
// TID=14
TID int `fesl:"TID"`
// LID=1
LobbyID int `fesl:"LID"`
// GID=12
GameID int `fesl:"GID"`
// JOIN=O
JoinMode string `fesl:"JOIN"`
// MAX-PLAYERS=16
MaxPlayers int `fesl:"MAX-PLAYERS"`
// B-maxObservers=0
MaxObservers int `fesl:"B-maxObservers"`
// B-numObservers=0
NumObservers int `fesl:"B-numObservers"`
// reqUGAMKeys
}
type reqUGAMKeys struct {
// B-U-army_balance=Axis
// B-U-army_balance=Balanced
// B-U-army_distribution="0,0,0,0,0,0,0,0,0,0,0"
// B-U-army_distribution="1,0,0,1,1,0,0,0,0,0,0"
// B-U-avail_vips_national=4
// B-U-avail_vips_royal=4
// B-U-avg_ally_rank=1000
// B-U-avg_axis_rank=1000
// B-U-easyzone=no
// B-U-elo_rank=1000
// B-U-lvl_avg=0.000000
// B-U-lvl_sdv=0.000000
// B-U-map_name=Village
// B-U-map_name=seaside_skirmish
// B-U-percent_full=0
// B-U-percent_full=6
// B-U-punkb=0
// B-U-ranked=yes
// B-U-server_state=empty
// B-U-server_state=has_players
// B-U-servertype=public
// B-maxObservers=0
// B-numObservers=0
// NAME="[iad]A Battlefield Heroes Server(172.28.128.1:18567)"
}
func (tM *Theater) UGAM(event network.EvProcess) {
logrus.Println("==============UPDATE GAME==============")
gameID := event.Process.Msg["GID"] // TODO gameID := mm.FindGids()
gdata := tM.level.NewObject("gdata", gameID)
logrus.Println("Updating GameServer " + gameID)
var args []interface{}
keys := 0
for index, value := range event.Process.Msg {
if index == "TID" {
continue
}
keys++
// Strip quotes
value = strings.Trim(value, `"`)
gdata.Set(index, value)
args = append(args, gameID)
args = append(args, index)
args = append(args, value)
}
_, err := tM.db.stmtUpdateGame.Exec(gameID)
if err != nil {
logrus.Println("======UGAM Error==== ", err)
}
_, err = tM.db.setServerStatsStatement(keys).Exec(args...)
if err != nil {
logrus.Println("Failed to update stats for game server "+gameID, err.Error())
if err.Error() == "Error 1213: Deadlock found when trying to get lock; try restarting transaction" {
_, err = tM.db.setServerStatsStatement(keys).Exec(args...)
if err != nil {
logrus.Println("Failed to update stats for game server "+gameID+" on the second try", err.Error())
}
}
}
}