コード例 #1
0
        private void TCPClientMethod(int index)
        {
            Packet receivedPacket;

            //loop to allow continuous communication
            while ((receivedPacket = _clients[index].TCPRead()) != null)
            {
                try
                {
                    switch (receivedPacket.EPacketType)
                    {
                    case PacketType.EMPTY:
                        EmptyPacket emptyPacket = (EmptyPacket)receivedPacket;
                        break;

                    case PacketType.LOGIN:
                        LoginPacket loginPacket = (LoginPacket)receivedPacket;
                        _clients[index].clientData.posX        = loginPacket.SpriteX;
                        _clients[index].clientData.posY        = loginPacket.SpriteY;
                        _clients[index].clientData.playerIndex = (_clients.Count - 1);

                        //confirm connection to joining player
                        JoinConfirmationPacket joinConfirmationPacket = new JoinConfirmationPacket((_clients.Count - 1), GetAllPlayerXValues(), GetAllPlayerYValues());
                        _clients[index].TCPSend(joinConfirmationPacket);

                        PlayerJoinPacket playerJoinPacket = new PlayerJoinPacket(_clients.Count - 1, loginPacket.SpriteX, loginPacket.SpriteY);
                        Console.WriteLine(_clients.Count);
                        TCPSendPacketToAll(playerJoinPacket);
                        Console.WriteLine("PACKETS SENT");
                        break;

                    case PacketType.DISCONNECT:
                        DisconnectPacket disconnectRequestPacket = (DisconnectPacket)receivedPacket;
                        break;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("[Error] " + e.Message + e.StackTrace);
                    break;
                }
            }

            try
            {
                _clients[index].Close();

                //Take client out of client ConcurrentBag
                _clients.TryRemove(index, out Client c);
            }
            catch (Exception e)
            {
                Console.WriteLine("[Error] " + e.Message + e.StackTrace);
            }
        }
コード例 #2
0
        private void TCPProcessServerResponse()
        {
            Packet receivedPacket;

            while ((receivedPacket = TCPRead()) != null)
            {
                try
                {
                    switch (receivedPacket.EPacketType)
                    {
                    case PacketType.EMPTY:
                        EmptyPacket emptyPacket = (EmptyPacket)receivedPacket;
                        break;

                    case PacketType.PLAYERJOIN:
                        PlayerJoinPacket playerJoinPacket = (PlayerJoinPacket)receivedPacket;
                        if (_game.localServerIndex != playerJoinPacket.ExistingPlayers)
                        {
                            _game.InitialiseNewPlayer(playerJoinPacket.X, playerJoinPacket.Y);
                        }
                        break;

                    case PacketType.JOINCONFIRMATION:
                        JoinConfirmationPacket joinConfirmationPacket = (JoinConfirmationPacket)receivedPacket;
                        _game.localServerIndex = joinConfirmationPacket.ServerIndex;

                        if (joinConfirmationPacket.ServerIndex > 0)
                        {
                            _game.LoadExistingPlayers(joinConfirmationPacket.ServerIndex, joinConfirmationPacket.XValues, joinConfirmationPacket.YValues);
                        }

                        _game.InitialiseNewPlayer(0.0f, 0.0f);
                        break;

                    case PacketType.PLAYERPOSITION:
                        PlayerPositionPacket playerPositionPacket = (PlayerPositionPacket)receivedPacket;
                        _game.ChangePlayerPosition(playerPositionPacket.PlayerIndex, playerPositionPacket.X, playerPositionPacket.Y);
                        break;
                    }
                }
                catch (SocketException e)
                {
                    Debug.WriteLine("[Error] " + e.Message + e.StackTrace);
                    break;
                }
            }
        }