/// <summary> /// This function processes a packet and decides what to do next. /// </summary> /// <param name="packet">The packet to process</param> private void ProcessPacket(UdpReceiveResult res) { Buffer packet = Buffer.From(res.Buffer); if (packet.Length < 4) { return; // do nothing } string id = packet.ReadString(0, 4); switch (id) { case "REPL": ProcessPacketREPL(packet); break; case "PAWN": if (packet.Length < 5) { return; } ushort networkID = packet.ReadUInt16BE(4); controlledPawnNetID = networkID; var obj = NetworkObject.GetObjectByNetworkID(networkID); if (obj != null) { Pawn p = (Pawn)obj; if (p != null) { p.canPlayerControl = true; } cam.orthographicSize = 6; } break; case "HOST": if (packet.Length < 7) { return; } ushort port = packet.ReadUInt16BE(4); int nameLength = packet.ReadUInt8(6); if (packet.Length < 7 + nameLength) { return; } string name = packet.ReadString(7, nameLength); AddToServerList(new RemoteServer(res.RemoteEndPoint, name)); break; case "CHAT": if (packet.Length < 6) { return; } int usernameLength = packet.ReadUInt8(4); ushort messageLength = packet.ReadUInt16BE(5); string username = packet.ReadString(7, usernameLength); string message = packet.ReadString(7 + usernameLength, messageLength); chatController.AddMessageToChatDisplay($"{username}: {message}"); print(message); break; case "STRT": if (ready) { chatController.gameObject.SetActive(false); } //PawnScores.singleton.gameObject.SetActive(true); break; } }