IEnumerator NetworkUpdate() { bool ServerActive = true; while (ServerActive) { int recHostId; int recConnectionId; int recChannelId; byte[] recBuffer = new byte[ReceivePacketSize]; int dataSize; byte error; NetworkEventType recNetworkEvent = NetworkTransport.Receive(out recHostId, out recConnectionId, out recChannelId, recBuffer, ReceivePacketSize, out dataSize, out error); switch (recNetworkEvent) { case NetworkEventType.Nothing: break; case NetworkEventType.ConnectEvent: AddConnection(recConnectionId); break; case NetworkEventType.DataEvent: NetworkPacket RecPacket = ScriptableObject.CreateInstance <NetworkPacket>(); RecPacket.SetPacketTarget(BitConverter.ToInt32(recBuffer, 0)); RecPacket.PacketHeader = (NetworkPacketHeader)BitConverter.ToInt32(recBuffer, 4); RecPacket.SetIsTargetRoom(BitConverter.ToBoolean(recBuffer, 8)); RecPacket.SetPacketData(recBuffer, 13, BitConverter.ToInt32(recBuffer, 9)); Debug.Log("Received Packet: " + RecPacket.PacketHeader + " Size: " + RecPacket.GetDataSize()); NetworkPacketReader.ReadPacket(RecPacket, recConnectionId, true); if (RecPacket.GetPacketTarget() != (int)PacketTargets.ServerOnly) { if (RecPacket.GetPacketTarget() == (int)PacketTargets.RelayToAllClients) { RelayPacketToAllClients(RecPacket, recConnectionId, recChannelId); } else if (RecPacket.GetIsTargetRoom()) { NetworkPacketSender.RelayPacketToPlayersInRoom(RecPacket, LevelManager.Instance.GetRoom(RecPacket.GetPacketTarget()), GetQOSType(recChannelId), false); } else { SendPacketToClient(RecPacket, recChannelId); } } Debug_AmountOfPacketsReceivedPerSecond++; Debug_TotalSizeOfPacketsReceivedPerSecond += RecPacket.GetTotalPacketSize(); break; case NetworkEventType.DisconnectEvent: RemoveConnection(recHostId); Debug.Log("remote client event disconnected"); break; } yield return(new WaitForEndOfFrame()); } }
public void SendPacketToClient(NetworkPacket packet, QosType QosChannel) { Debug.Log("Sent Packet: " + packet.PacketHeader + " Size: " + packet.GetDataSize()); byte error; NetworkTransport.Send(socketId, packet.GetPacketTarget(), GetChannel(QosChannel), packet.GetBytes(), packet.GetTotalPacketSize(), out error); Debug_AmountOfPacketsSentPerSecond++; Debug_TotalSizeOfPacketsSentPerSecond += packet.GetTotalPacketSize(); }