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); switch (header.cmd) { case Commands.PLAYER_INIT: InitializeConnectionMsg piMsg = JsonUtility.FromJson <InitializeConnectionMsg>(recMsg); playerUpdateMsg.player.id = piMsg.yourID; HandshakeMsg m = new HandshakeMsg(); m.player = playerUpdateMsg.player; m.player.id = piMsg.yourID; SendToServer(JsonUtility.ToJson(m)); otherPlayers.Add(m.player.id, yourCharacter); Debug.Log("Initialization message received! Your ID: " + piMsg.yourID); break; 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!"); break; case Commands.SERVER_UPDATE: ServerUpdateMsg suMsg = JsonUtility.FromJson <ServerUpdateMsg>(recMsg); UpdateNetworkObjects(suMsg); Debug.Log("Server update message received!"); break; case Commands.PLAYER_DROPPED: ConnectionDroppedMsg cdMsg = JsonUtility.FromJson <ConnectionDroppedMsg>(recMsg); // Destroy GameObject character = otherPlayers[cdMsg.droppedId]; otherPlayers.Remove(cdMsg.droppedId); Destroy(character); Debug.Log("Player dropped message received! " + cdMsg.droppedId); break; default: Debug.Log("Unrecognized message received!"); break; } }
void OnDisconnect(int i) { Debug.Log("Client disconnected from server"); // Create drop message ConnectionDroppedMsg cdMsg = new ConnectionDroppedMsg(); cdMsg.droppedId = m_Connections[i].InternalId.ToString(); m_Connections[i] = default(NetworkConnection); players.RemoveAt(i); for (int j = 0; j < m_Connections.Length; j++) { if (!m_Connections[j].IsCreated) { continue; } SendToClient(JsonUtility.ToJson(cdMsg), m_Connections[j]); } }