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); } }
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)); } }
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"); } }