示例#1
0
        /// <summary>
        /// Deserialize a byte array into a <see cref="NetworkMessage"/>.
        /// </summary>
        /// <param name="data">Byte array to convert.</param>
        public override void Deserialize(byte[] data)
        {
            DeserializeBase(data);

            for (int i = 0; i < PeerConnectStatus.Length; i++)
            {
                PeerConnectStatus[i] = new NetworkConnectStatus(BitConverter.ToInt32(data, 5 + (i * 4)));
            }

            int offset = 5 + (PeerConnectStatus.Length * 4);

            StartFrame = BitConverter.ToUInt32(data, offset);
            offset    += 4;

            int disconnectAckFrame = BitConverter.ToInt32(data, offset);

            DisconnectRequested = (disconnectAckFrame & 1) != 0;
            AckFrame            = disconnectAckFrame >> 1;
            offset += 4;

            NumBits = BitConverter.ToUInt16(data, offset);
            offset += 2;

            InputSize = data[offset++];

            if (NumBits > 0)
            {
                Unsafe.CopyBlock(ref Bits[0], ref data[offset], (ushort)Math.Ceiling(NumBits / 8f));
            }
        }
示例#2
0
 public InputMessage()
 {
     for (int i = 0; i < PeerConnectStatus.Length; i++)
     {
         PeerConnectStatus[i] = new NetworkConnectStatus();
     }
 }
示例#3
0
        public PeerToPeerBackend(IGGPOSessionCallbacks callbacks, ILog logger, int localPort, int numPlayers, int inputSize)
        {
            this.numPlayers = numPlayers;
            this.inputSize  = inputSize;
            this.callbacks  = callbacks;
            this.logger     = logger;

            for (int i = 0; i < Constants.MaxPlayers; i++)
            {
                localConnectStatus[i] = new NetworkConnectStatus();
            }

            for (int i = 0; i < Constants.MaxSpectators; i++)
            {
                spectators[i] = new UdpProtocol(logger);
            }

            isSynchronizing = true;
            endpoints       = new UdpProtocol[numPlayers];
            for (int i = 0; i < numPlayers; i++)
            {
                endpoints[i] = new UdpProtocol(logger);
            }

            // Initialize the synchronziation layer
            sync = new Sync(localConnectStatus,
                            new Sync.Config
            {
                numPlayers          = numPlayers,
                inputSize           = inputSize,
                callbacks           = callbacks,
                numPredictionFrames = Constants.MaxPredictionFrames,
            });

            // Initialize the UDP port
            var udpEndpoint = new IPEndPoint(IPAddress.Any, localPort);

            udp = new Udp(localPort, poll, this);
        }