void OnData(DataStreamReader stream, int i) { NativeArray <byte> bytes = new NativeArray <byte>(stream.Length, Allocator.Temp); stream.ReadBytes(bytes); string recMsg = Encoding.ASCII.GetString(bytes.ToArray()); NetworkHeader header = JsonUtility.FromJson <NetworkHeader>(recMsg); switch (header.cmd) { case Commands.HANDSHAKE: HandshakeMsg hsMsg = JsonUtility.FromJson <HandshakeMsg>(recMsg); Debug.Log("Handshake message received!"); break; case Commands.PLAYER_UPDATE: PlayerUpdateMsg puMsg = JsonUtility.FromJson <PlayerUpdateMsg>(recMsg); Debug.Log("Player update message received!"); Debug.Log("Player List: " + serverPlayerList); foreach (NetworkObjects.NetworkPlayer player in serverPlayerList) { if (player.id == puMsg.player.id) { player.cubeColor = puMsg.player.cubeColor; player.cubPos = puMsg.player.cubPos; player.cubRot = puMsg.player.cubRot; } } break; case Commands.PLAYER_BULLET: PlayerBulletMsg pbMsg = JsonUtility.FromJson <PlayerBulletMsg>(recMsg); Debug.Log("Player Bullet Fired!"); FireBulletForPlayers(pbMsg, m_Connections[i]); break; case Commands.PLAYER_JOINED: PlayerJoinMessage pjMsg = JsonUtility.FromJson <PlayerJoinMessage>(recMsg); Debug.Log("Player join message received!"); CreatePlayer(pjMsg, m_Connections[i]); break; case Commands.SERVER_UPDATE: ServerUpdateMsg suMsg = JsonUtility.FromJson <ServerUpdateMsg>(recMsg); Debug.Log("Server update message received!"); break; case Commands.PLAYER_LEFT: PlayerLeaveMsg plMsg = JsonUtility.FromJson <PlayerLeaveMsg>(recMsg); Debug.Log("Player leave message recieved!"); OnDisconnect(int.Parse(plMsg.player.id)); break; default: Debug.Log("SERVER ERROR: Unrecognized message received!"); break; } }
void FireBulletForPlayers(PlayerBulletMsg pbMsg, NetworkConnection c) { for (int i = 0; i < m_Connections.Length; i++) { if (m_Connections[i] != c) { SendToClient(JsonUtility.ToJson(pbMsg), m_Connections[i]); } } }
IEnumerator SendPlayerInformation() { yield return(new WaitForSeconds(0.2f)); Debug.Log("Creating Player"); PlayerJoinMessage pm = new PlayerJoinMessage(); pm.player.cubeColor = UnityEngine.Random.ColorHSV(0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); pm.player.cubPos = new Vector3(UnityEngine.Random.Range(-50.0f, 50.0f), 0.0f, UnityEngine.Random.Range(-50.0f, 50.0f)); pm.player.cubRot = new Quaternion(); pm.player.Username = PlayerPrefs.GetString("Player_Username"); pm.player.playerClass = (Classes)int.Parse(PlayerPrefs.GetString("Player_Class")); pm.player.level = int.Parse(PlayerPrefs.GetString("Player_Level")); pm.player.health = int.Parse(PlayerPrefs.GetString("Player_Health")); pm.player.score = int.Parse(PlayerPrefs.GetString("Player_Score")); SendToServer(JsonUtility.ToJson(pm)); while (true) { PlayerUpdateMsg pum = new PlayerUpdateMsg(); PlayerBulletMsg pbMsg = new PlayerBulletMsg(); foreach (NetworkObjects.NetworkPlayer player in playerList) { if (player.id == clientID) { pum.player.id = clientID; pum.player.cube = player.cube; pum.player.cubeColor = player.cubeColor; pum.player.cubPos = player.cubPos; pum.player.cubRot = player.cubRot; if (pum.player.cube.GetComponent <Character>().bulletFired) { pbMsg.player = player; pbMsg.clickedLocation = player.cube.GetComponent <Character>().clickPosition; Debug.Log("Sending Bullet Message Over to Server"); SendToServer(JsonUtility.ToJson(pbMsg)); pbMsg.player.cube.GetComponent <Character>().bulletFired = false; } SendToServer(JsonUtility.ToJson(pum)); } } yield return(new WaitForSeconds(updateTime)); } }
void OnData(DataStreamReader stream) { NativeArray <byte> bytes = new NativeArray <byte>(stream.Length, Allocator.Temp); stream.ReadBytes(bytes); string recMsg = Encoding.ASCII.GetString(bytes.ToArray()); NetworkHeader header = JsonUtility.FromJson <NetworkHeader>(recMsg); Debug.Log("Got this: " + header.cmd); switch (header.cmd) { case Commands.HANDSHAKE: HandshakeMsg hsMsg = JsonUtility.FromJson <HandshakeMsg>(recMsg); Debug.Log("Handshake message received!"); clientID = hsMsg.player.id; Debug.Log("Id: " + clientID); break; case Commands.PLAYER_UPDATE: PlayerUpdateMsg puMsg = JsonUtility.FromJson <PlayerUpdateMsg>(recMsg); Debug.Log("Player update message received!"); break; case Commands.PLAYER_BULLET: PlayerBulletMsg pbMsg = JsonUtility.FromJson <PlayerBulletMsg>(recMsg); Debug.Log("Player Bullet Fired Message Recieved!"); GameObject.Instantiate(bulletRef, (pbMsg.player.cubPos + (pbMsg.clickedLocation - pbMsg.player.cubPos).normalized), Quaternion.LookRotation((pbMsg.clickedLocation - pbMsg.player.cubPos).normalized)); break; case Commands.PLAYER_JOINED: PlayerJoinMessage pjMsg = JsonUtility.FromJson <PlayerJoinMessage>(recMsg); Debug.Log("Player join message received!"); pjMsg.player.cube = Instantiate(cubeRef); pjMsg.player.cube.GetComponent <Renderer>().material.SetColor("_Color", pjMsg.player.cubeColor); if (pjMsg.player.id == clientID) { pjMsg.player.cube.GetComponent <Character>().networkManRef = this; pjMsg.player.cube.GetComponent <Character>().playerRef = pjMsg.player; } else { pjMsg.player.cube.GetComponent <Character>().setStats(); } playerList.Add(pjMsg.player); break; case Commands.SERVER_UPDATE: suMsg = JsonUtility.FromJson <ServerUpdateMsg>(recMsg); Debug.Log("Server update message received!"); foreach (NetworkObjects.NetworkPlayer clientPlayer in playerList) { if (clientPlayer.id == clientID) { } else { foreach (NetworkObjects.NetworkPlayer serverPlayer in suMsg.players) { if (serverPlayer.id == clientPlayer.id) { clientPlayer.cube.transform.position = serverPlayer.cubPos; } else { } } } } break; case Commands.PLAYER_LEFT: PlayerLeaveMsg plMsg = JsonUtility.FromJson <PlayerLeaveMsg>(recMsg); Debug.Log("Player Leave message received!"); KillClientPlayer(plMsg.player); OnDisconnect(); break; default: Debug.Log("Unrecognized message received!"); break; } }