|
@@ -7,12 +7,17 @@ import (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
type GameServer struct {
|
|
type GameServer struct {
|
|
|
- addGameChan chan *Game
|
|
|
|
|
- listGamesChan chan Chan
|
|
|
|
|
|
|
+ addGameChan chan addGameChan
|
|
|
|
|
+ listGamesChan chan gamesChan
|
|
|
getGameChan chan getGame
|
|
getGameChan chan getGame
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-type Chan chan []*Game
|
|
|
|
|
|
|
+type addGameChan struct {
|
|
|
|
|
+ game *Game
|
|
|
|
|
+ id chan int64
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+type gamesChan chan []*Game
|
|
|
|
|
|
|
|
type getGame struct {
|
|
type getGame struct {
|
|
|
id int64
|
|
id int64
|
|
@@ -22,8 +27,8 @@ type getGame struct {
|
|
|
func New() GameServer {
|
|
func New() GameServer {
|
|
|
|
|
|
|
|
gameServer := GameServer{
|
|
gameServer := GameServer{
|
|
|
- addGameChan: make(chan *Game),
|
|
|
|
|
- listGamesChan: make(chan Chan),
|
|
|
|
|
|
|
+ addGameChan: make(chan addGameChan),
|
|
|
|
|
+ listGamesChan: make(chan gamesChan),
|
|
|
getGameChan: make(chan getGame),
|
|
getGameChan: make(chan getGame),
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -37,10 +42,11 @@ func serveGames(gameServer GameServer) {
|
|
|
|
|
|
|
|
for {
|
|
for {
|
|
|
select {
|
|
select {
|
|
|
- case game := <-gameServer.addGameChan:
|
|
|
|
|
- game.Id = gameCounter
|
|
|
|
|
|
|
+ case addGameChan := <-gameServer.addGameChan:
|
|
|
|
|
+ addGameChan.game.Id = gameCounter
|
|
|
gameCounter++
|
|
gameCounter++
|
|
|
- gamesMap[game.Id] = game
|
|
|
|
|
|
|
+ gamesMap[addGameChan.game.Id] = addGameChan.game
|
|
|
|
|
+ addGameChan.id <- addGameChan.game.Id
|
|
|
case r := <-gameServer.listGamesChan:
|
|
case r := <-gameServer.listGamesChan:
|
|
|
v := make([]*Game, 0, len(gamesMap))
|
|
v := make([]*Game, 0, len(gamesMap))
|
|
|
for _, value := range gamesMap {
|
|
for _, value := range gamesMap {
|
|
@@ -59,15 +65,22 @@ type stompGameStart struct {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (games GameServer) AddGame(x, y int, stompConnection *extStomp.Conn) *Game {
|
|
func (games GameServer) AddGame(x, y int, stompConnection *extStomp.Conn) *Game {
|
|
|
- game := NewGame(x, y)
|
|
|
|
|
- games.addGameChan <- game
|
|
|
|
|
|
|
+ game2 := NewGame(x, y)
|
|
|
|
|
+ addGame := addGameChan{
|
|
|
|
|
+ game: game2,
|
|
|
|
|
+ id: make(chan int64),
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ games.addGameChan <- addGame
|
|
|
|
|
+ gameId := <- addGame.id
|
|
|
|
|
+
|
|
|
stompGameStart := stompGameStart{
|
|
stompGameStart := stompGameStart{
|
|
|
Type: "GAME_START",
|
|
Type: "GAME_START",
|
|
|
- GameId: game.Id,
|
|
|
|
|
|
|
+ GameId: gameId,
|
|
|
}
|
|
}
|
|
|
b, _ := json.Marshal(stompGameStart)
|
|
b, _ := json.Marshal(stompGameStart)
|
|
|
stompConnection.Send("/topic/go-battlecamp.game", "application/json;charset=utf-8", b, extStomp.SendOpt.NoContentLength)
|
|
stompConnection.Send("/topic/go-battlecamp.game", "application/json;charset=utf-8", b, extStomp.SendOpt.NoContentLength)
|
|
|
- return game
|
|
|
|
|
|
|
+ return game2
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (games GameServer) ListGames() []*Game {
|
|
func (games GameServer) ListGames() []*Game {
|