protected override void HandleMessage(TypedPackage message)
    {
        Debug.Log(string.Format("Msg: {0} of length {1}.", message.Type, message.Data.Length));

        if (message.Type == PackageType.LoginSucceed)
        {
            try
            {
                LoginSucceedData data = new LoginSucceedData(message.Data, ref message.Offset);
                _playerID = data.PlayerID;
                _udpConnectionKey = data.UdpConnectKey;
                OnLogedIn();
            }
            catch (Exception e)
            {
                Debug.Log("Failed to parse: " + e.ToString());
            }

            BeginUdpRegister();
        }
        else if (message.Type == PackageType.LoginFailed)
        {
            OnLoginFailed();
        }
        else if (message.Type == PackageType.RoomCreated)
        {
            OnCreatedRoom();
        }
        else if (message.Type == PackageType.JoinedRoom)
        {
            JoinedRoomInfoData data;
            try
            {
                data = new JoinedRoomInfoData(message.Data, ref message.Offset);
                ConnectedRoom = data.Room;
                OnJoinedRoom();
            }
            catch (Exception e)
            {
                Debug.Log("Failed to parse data: " + e.Message + " | " + e.TargetSite + " | " + e.StackTrace);
            }
        }
        else if (message.Type == PackageType.RoomList)
        {
            RoomListData data = new RoomListData(message.Data, ref message.Offset);
            OpenRooms = data.Rooms;
            OnReceivedRooms();
        }
        else if (message.Type == PackageType.OtherJoinedRoom)
        {
            RoomPlayerInfo playerInfo = new RoomPlayerData(message.Data, ref message.Offset).Player;
            ConnectedRoom.Players.Add(playerInfo);
            OnOtherJoinedRoom(playerInfo);
        }
        else if (message.Type == PackageType.OtherLeftRoom)
        {
            PlayerIDData playerInfo = new PlayerIDData(message.Data, ref message.Offset);
            RoomPlayerInfo player = null;
            for (int i = ConnectedRoom.Players.Count - 1; i >= 0; i--)
            {
                if (ConnectedRoom.Players[i].PlayerID == playerInfo.PlayerID)
                {
                    player = ConnectedRoom.Players[i];
                    ConnectedRoom.Players.RemoveAt(i);
                    break;
                }
            }

            if (player != null) OnOtherLeftRoom(player);
            else Debug.Log("Could not find player to remove");
        }
        else if (message.Type == PackageType.OtherChangedSetup)
        {
            // Parse
            OtherPlayerSetupData info = new OtherPlayerSetupData(message.Data, ref message.Offset);

            // Find player of id
            RoomPlayerInfo foundPlayer = null;
            foreach (RoomPlayerInfo player in ConnectedRoom.Players)
            {
                if (player.PlayerID == info.PlayerID)
                {
                    foundPlayer = player;
                    break;
                }
            }

            // Change setup of player
            if (foundPlayer != null)
            {
                foundPlayer.Setup = info.Setup;
                OnOtherChangedSetup();
            }
            else
            {
                Debug.Log("Could not find player to remove");
            }
        }
        else if (message.Type == PackageType.UDPRegistered)
        {
            _udpRegistered = true;
        }
        else if (message.Type == PackageType.RoomLoad)
        {
            RoomUdpSetupData msg = new RoomUdpSetupData(message.Data, ref message.Offset);

            // Assign udp settings
            foreach (PlayerUdpSetupData playerUDP in msg.UdpPlayerList)
            {
                foreach (RoomPlayerInfo player in ConnectedRoom.Players)
                {
                    if (player.PlayerID == playerUDP.PlayerID)
                    {
                        player.UdpEP = playerUDP.EP;
                        break;
                    }
                }
            }

            OnGameLoad();
        }
        else if (message.Type == PackageType.RoomStart)
        {
            OnGameStart();
        }
        else
        {
            base.HandleMessage(message);
        }
    }
Esempio n. 2
0
 protected virtual void HandleMessage(TypedPackage message)
 {
     if (message.Type == PackageType.SetupSecureConnection)
     {
         try
         {
             _aes = new SecuritySetupData(message.Data, ref message.Offset).AES;
             _encrypter = _aes.CreateEncryptor();
             _decrypter = _aes.CreateDecryptor();
         }
         catch (Exception e)
         {
             Debug.Log("Failed to sync aes: " + e.Message);
             return;
         }
         OnConnectionSecured();
     }
     else if (message.Type == PackageType.Error)
     {
         Debug.Log("Network_ERROR: ");
     }
     else
     {
         Debug.Log(string.Format("Unhandled msg {0} of length {2}.", message.Type, message.Data.Length));
     }
 }
Esempio n. 3
0
    private void Connection_Received(EndPoint ep, TypedPackage package)
    {
        // Select player
        if (!_players.ContainsKey(ep))
        {
            Debug.Log("Received UDP from unconnected client! By " + ep.ToString());
            return;
        }

        SpawnedPlayer p = _players[ep];

        // Handle msg
        if (package.Type == PackageType.PlayerMove)
        {
            p.Positioning.FromBytes(package.Data, ref package.Offset);
            p.Updated = true;
        }
        else if (package.Type == PackageType.PlayerShoot)
        {
            ShootingData message = new ShootingData(package.Data, ref package.Offset);
            p.ShootBuffer.Shots.AddRange(message.Shots);
        }
        else if (package.Type == PackageType.BoatPartHit)
        {
            HealthData message = new HealthData(package.Data, ref package.Offset);
            lock (p.HitBuffer)
                p.HitBuffer.Add(message);
        }
        else
        {
            Debug.Log("Unhandled UDP msg");
        }
    }