소스 검색

Added game id counter

Ronald Peterson 10 년 전
부모
커밋
1e69bdae10
5개의 변경된 파일89개의 추가작업 그리고 86개의 파일을 삭제
  1. 0 1
      games/game.go
  2. 0 81
      games/games.go
  3. 86 0
      games/gameserver.go
  4. 1 1
      main.go
  5. 2 3
      urlrouter.go

+ 0 - 1
games/game.go

@@ -18,7 +18,6 @@ func NewGame(cols, rows int) *Game {
 	createTime := time.Now().UnixNano()/1000
 
 	game := &Game{
-		Id:        createTime,
 		StartTime: createTime,
 		Board:     board.New(cols, rows),
 	}

+ 0 - 81
games/games.go

@@ -1,81 +0,0 @@
-package games
-
-import (
-	"encoding/json"
-
-	extStomp "github.com/go-stomp/stomp"
-)
-
-type Games struct {
-	addChan  chan *Game
-	listChan chan listChan
-	getChan  chan getGame
-}
-
-type listChan chan []*Game
-
-type getGame struct {
-	id         int64
-	returnChan chan *Game
-}
-
-func New() Games {
-
-	games := Games{
-		addChan:  make(chan *Game),
-		listChan: make(chan listChan),
-		getChan:  make(chan getGame),
-	}
-
-	go serveGames(games)
-	return games
-}
-
-func serveGames(games Games) {
-	gamesMap := make(map[int64]*Game)
-
-	for {
-		select {
-		case game := <-games.addChan:
-			gamesMap[game.Id] = game
-		case r := <-games.listChan:
-			v := make([]*Game, 0, len(gamesMap))
-			for _, value := range gamesMap {
-				v = append(v, value)
-			}
-			r <- v
-		case r := <-games.getChan:
-			r.returnChan <- gamesMap[r.id]
-		}
-	}
-}
-
-type stompGameStart struct {
-	Type   string `json:"type"`
-	GameId int64  `json:"gameid"`
-}
-
-func (games Games) AddGame(game *Game, stompConnection *extStomp.Conn) {
-	games.addChan <- game
-	stompGameStart := stompGameStart{
-		Type:   "GAME_START",
-		GameId: game.Id,
-	}
-	b, _ := json.Marshal(stompGameStart)
-	stompConnection.Send("/topic/go-battlecamp.game", "", b)
-}
-
-func (games Games) ListGames() []*Game {
-	r := make(chan []*Game)
-	games.listChan <- r
-	return <-r
-}
-
-func (games Games) GetGame(id int64) *Game {
-	getGame := getGame{
-		id:         id,
-		returnChan: make(chan *Game),
-	}
-	games.getChan <- getGame
-	return <-getGame.returnChan
-}

+ 86 - 0
games/gameserver.go

@@ -0,0 +1,86 @@
+package games
+
+import (
+	"encoding/json"
+
+	extStomp "github.com/go-stomp/stomp"
+)
+
+type GameServer struct {
+	addGameChan   chan *Game
+	listGamesChan chan Chan
+	getGameChan   chan getGame
+}
+
+type Chan chan []*Game
+
+type getGame struct {
+	id         int64
+	returnChan chan *Game
+}
+
+func New() GameServer {
+
+	gameServer := GameServer{
+		addGameChan:   make(chan *Game),
+		listGamesChan: make(chan Chan),
+		getGameChan:   make(chan getGame),
+	}
+
+	go serveGames(gameServer)
+	return gameServer
+}
+
+func serveGames(gameServer GameServer) {
+	gamesMap := make(map[int64]*Game)
+	gameCounter := int64(0)
+
+	for {
+		select {
+		case game := <-gameServer.addGameChan:
+			game.Id = gameCounter
+			gameCounter++
+			gamesMap[game.Id] = game
+		case r := <-gameServer.listGamesChan:
+			v := make([]*Game, 0, len(gamesMap))
+			for _, value := range gamesMap {
+				v = append(v, value)
+			}
+			r <- v
+		case r := <-gameServer.getGameChan:
+			r.returnChan <- gamesMap[r.id]
+		}
+	}
+}
+
+type stompGameStart struct {
+	Type   string `json:"type"`
+	GameId int64  `json:"gameid"`
+}
+
+func (games GameServer) AddGame(x, y int, stompConnection *extStomp.Conn) *Game {
+	game := NewGame(x, y)
+	games.addGameChan <- game
+	stompGameStart := stompGameStart{
+		Type:   "GAME_START",
+		GameId: game.Id,
+	}
+	b, _ := json.Marshal(stompGameStart)
+	stompConnection.Send("/topic/go-battlecamp.game", "", b)
+	return game
+}
+
+func (games GameServer) ListGames() []*Game {
+	r := make(chan []*Game)
+	games.listGamesChan <- r
+	return <-r
+}
+
+func (games GameServer) GetGame(id int64) *Game {
+	getGame := getGame{
+		id:         id,
+		returnChan: make(chan *Game),
+	}
+	games.getGameChan <- getGame
+	return <-getGame.returnChan
+}

+ 1 - 1
main.go

@@ -11,7 +11,7 @@ import (
 	"battlecamp-go-server/stomp"
 )
 
-var currentGames games.Games = games.New()
+var currentGames games.GameServer = games.New()
 var stompConnection *extStomp.Conn
 
 func main() {

+ 2 - 3
urlrouter.go

@@ -59,12 +59,11 @@ func createGame(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
 	if xString != "" && yString != "" {
 		x, _ := strconv.Atoi(xString)
 		y, _ := strconv.Atoi(yString)
-		game = games.NewGame(x, y)
+		game = currentGames.AddGame(x, y, stompConnection)
 	} else {
-		game = games.NewGame(56, 35)
+		game = currentGames.AddGame(56, 35, stompConnection)
 	}
 
-	currentGames.AddGame(game, stompConnection)
 	w.WriteHeader(http.StatusCreated)
 	e := json.NewEncoder(w)
 	e.Encode(game)