Esempio n. 1
0
func HandlerFactory(game *obj.Game) func(http.ResponseWriter, *http.Request) {
	res := func(w http.ResponseWriter, r *http.Request) {
		fmt.Println("connection")
		conn, err := upgrader.Upgrade(w, r, nil)
		if err != nil {
			fmt.Println(err)
			return
		}

		player := game.AddPlayer()

		for {
			messageType, p, err := conn.ReadMessage()
			var f interface{}
			if err != nil {
				game.RemovePlayer(player)
				return
			}
			err = json.Unmarshal(p, &f)
			if err != nil {
				return
			}

			response := parseCommand(game, f.(map[string]interface{}), player)

			if response != nil {
				if err = conn.WriteMessage(messageType, response); err != nil {
					game.RemovePlayer(player)
					return
				}
			}
		}
	}
	return res
}