예제 #1
0
        public void PlayerStateUpdate()
        {
            lobbyManager.createLobby(4, "bob", 5, "no", (WebSocketSharp.WebSocket)null, "five");
            LobbyInfoPacket lip = lobbyManager.joinLobby("testing", 1, "bob", "no");

            Assert.That(lobbies["five"].players.Count == 2);
        }
예제 #2
0
        public void PlayerJoinAlert()
        {
            lobbyManager.createLobby(4, "bob", 5, "no", (WebSocketSharp.WebSocket)null, "five");
            LobbyInfoPacket lip = lobbyManager.joinLobby("testing", 1, "bob", "no");

            Assert.That(lip.dataType == Packets.UPDATE);
        }
예제 #3
0
        private void HandleLobbyInfoPacket(LobbyInfoPacket p)
        {
            // show on screen
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine($"Players Total: {p.ClientCount}");
            stringBuilder.AppendLine($"Players InGame: {p.InGameCount}");
            stringBuilder.AppendLine($"Rooms Total: {p.RoomCount}");

            this.lobbyInfo.Text = stringBuilder.ToString();
        }
예제 #4
0
        public void BlockFreezeStateUpdate()
        {
            lobbyManager.createLobby(4, "bob", 5, "no", (WebSocketSharp.WebSocket)null, "five");
            LobbyInfoPacket lip    = lobbyManager.joinLobby("testing", 1, "bob", "no");
            Packet          packet = new Packet();

            packet.data = "{'lobbyID': 'five'}";
            packet.type = 2;
            lobbyManager.startGame(packet);
            PlayerInputPacket pip = new PlayerInputPacket();

            pip.lobbyID = "five";
            pip.move    = "freeze";
            int[][] indices = new int[][] { new int[] { 1, 2 } };
            pip.shapeIndices = indices;
            UpdatePacket up = lobbyManager.processInput(pip);
        }
예제 #5
0
        public void GameStateAlert()
        {
            lobbyManager.createLobby(4, "bob", 5, "no", (WebSocketSharp.WebSocket)null, "five");
            LobbyInfoPacket lip    = lobbyManager.joinLobby("testing", 1, "bob", "no");
            Packet          packet = new Packet();

            packet.data = "{'lobbyID': 'five'}";
            packet.type = 2;
            lobbyManager.startGame(packet);
            PlayerInputPacket pip = new PlayerInputPacket();

            pip.lobbyID = "five";
            pip.move    = "left";
            UpdatePacket up = lobbyManager.processInput(pip);

            Assert.That(up.move == "left");
        }
예제 #6
0
    public LobbyInfoPacket alertLobby(int playerID, string lobbyID, int type)
    {
        Console.WriteLine("checking for lobbyid " + lobbyID);
        LobbyInfoPacket lobbyInfoPacket = new LobbyInfoPacket();
        Lobby           lobby;

        if (lobbies.ContainsKey(lobbyID))
        {
            lobby = lobbies[lobbyID];
            for (int j = 0; j < lobby.players.Count; j++)
            {
                lobbyInfoPacket.players    = lobby.players;
                lobbyInfoPacket.lobbyID    = lobbyID;
                lobbyInfoPacket.maxPlayers = lobby.maxPlayers;
                lobbyInfoPacket.dataType   = type;
                lobbyInfoPacket.numBots    = lobby.botCount;
                try
                {
                    Sessions.SendTo(JsonConvert.SerializeObject(lobbyInfoPacket), lobby.players[j].socketID);
                }
                catch (Exception)
                {
                    // testing or invalid session
                }
            }
            return(lobbyInfoPacket);
        }
        else if (lobbyID == "testing")
        {
            lobby = lobbies["five"];
            lobbyInfoPacket.players    = lobby.players;
            lobbyInfoPacket.lobbyID    = lobbyID;
            lobbyInfoPacket.maxPlayers = lobby.maxPlayers;
            lobbyInfoPacket.dataType   = type;
            lobbyInfoPacket.numBots    = lobby.botCount;
            return(lobbyInfoPacket);
        }
        else
        {
            Send("invalid ID");
            return(lobbyInfoPacket);
        }
    }
예제 #7
0
        public void OnPacket(byte[] data)
        {
            if (data.Length == 0)
            {
                return;
            }

            PACKET_TYPES type = Packet.GetType(data);

            if (type == PACKET_TYPES.LOBBY_INFO)
            {
                LobbyInfoPacket packet = Packet.Deserialize <LobbyInfoPacket>(data);
                if (packet.state == LobbyInfoPacket.State.LOBBY_CLOSED)
                {
                    RequestNewState(new Game(_serverConnection));
                }


                if (packet.state == LobbyInfoPacket.State.STARTING)
                {
                    _statusText.DisplayedString = "Game is starting in " + packet.countdown + " seconds!";
                }


                if (packet.state == LobbyInfoPacket.State.GAME_IN_PROGRESS)
                {
                    _statusText.DisplayedString = "Game is currently in progress, please wait.";
                }


                if (packet.state == LobbyInfoPacket.State.WAITING_FOR_PLAYERS)
                {
                    _statusText.DisplayedString = "Waiting for players...";
                }

                _playerCountText.DisplayedString = "Players in lobby: " + packet.playerCount;
            }
        }
예제 #8
0
    public LobbyInfoPacket joinLobby(string lobbyID, int playerID, string name, string socketID)
    {
        lobbyID = lobbyID.ToLower();
        Lobby lobby;

        if (lobbies == null)
        {
            Console.WriteLine("lobbies is null");
        }
        if (lobbies.ContainsKey(lobbyID))
        {
            lobby = lobbies[lobbyID];
            if (lobby.numPlayers < lobby.maxPlayers)
            {
                if (lobby.lobbyState == LobbyState.PLAYING && lobby.game.current_time > 5)
                {
                    return((LobbyInfoPacket)null);
                }
                int newPlayerID = lobby.players.Count + 1;
                lobby.numPlayers += 1;
                Player newPlayer = new Player(newPlayerID, name, socketID, Context.WebSocket);
                lobby.players.Add(newPlayer);
                // send message to user of lobby id
                ConfirmationPacket confirmationPacket = new ConfirmationPacket();
                confirmationPacket.lobbyID  = lobbyID;
                confirmationPacket.playerID = newPlayerID;
                alertLobby(playerID, lobbyID, Packets.UPDATE);
                LobbyInfoPacket lobbyInfoPacket = new LobbyInfoPacket();
                lobbyInfoPacket.lobbyID    = lobby.id;
                lobbyInfoPacket.players    = lobby.players;
                lobbyInfoPacket.lobbyID    = lobbyID;
                lobbyInfoPacket.maxPlayers = lobby.maxPlayers;
                lobbyInfoPacket.dataType   = Packets.UPDATE;
                lobbyInfoPacket.numBots    = lobby.botCount;
                Send(JsonConvert.SerializeObject(lobbyInfoPacket));
                Send(JsonConvert.SerializeObject(confirmationPacket, Formatting.Indented, new JsonSerializerSettings()
                {
                    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                }));
                return(lobbyInfoPacket);
            }
            else
            {
                if (lobby.botCount > 0 && lobby.lobbyState != LobbyState.PLAYING)
                {
                    lobbies[lobbyID].botCount--;
                    lobbies[lobbyID].numPlayers--;
                    alertLobby(-2, lobbyID, Packets.REMOVE_BOT);
                    joinLobby(lobbyID, playerID, name, socketID);
                }
            }
        }
        else if (lobbyID == "testing")
        {
            lobby = lobbies["five"];
            lobby.players.Add(new Player(1, "bob", "no", (WebSocketSharp.WebSocket)null));
            return(alertLobby(0, "testing", Packets.UPDATE));
        }
        else
        {
            //send message invalid ID
            Send("bad");
        }
        return(null);
    }