Ejemplo n.º 1
0
    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());
        }
    }
Ejemplo n.º 2
0
    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();
    }
 public void SendPacketToServer(NetworkPacket packet, QosType ChannelType)
 {
     if (ServerConnectionID != -1)
     {
         byte error;
         NetworkTransport.Send(socketId, ServerConnectionID, GetChannel(ChannelType), packet.GetBytes(), packet.GetTotalPacketSize(), out error);
     }
 }