/// <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)); } }
public InputMessage() { for (int i = 0; i < PeerConnectStatus.Length; i++) { PeerConnectStatus[i] = new NetworkConnectStatus(); } }
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); }