Esempio n. 1
0
    private void FixedUpdate()
    {
        if (ServerConnection.IsSet)
        {
            unsafe
            {
                var id     = _detector.AddHeaderForPeerId((ushort)ServerConnection.ID, _buffer);
                var length = _buffer.Length;
                var ptr    = Marshal.AllocHGlobal(length);
                var span   = new Span <byte>(ptr.ToPointer(), length);

                _buffer.ToSpan(ref span);

                var data = new PacketData
                {
                    Data = ptr, Length = length, SequenceId = id
                };

                _buffer.Clear();

                var canSend = _detector.EnqueueData((ushort)ServerConnection.ID, data);

                if (canSend)
                {
                    _sent++;
                    var packet = new Packet();
                    packet.Create(data.Data, data.Length, PacketFlags.None);
                    _sendData.Enqueue(new SendData {
                        Packet = packet, Peer = ServerConnection
                    });
                }
                else
                {
                    ServerConnection.DisconnectNow(0);
                }
            }
        }
    }
    private void SendUnreliable(uint value)
    {
        unsafe
        {
            _sentUnreliable++;
            var id = _detector.AddHeaderForPeerId((ushort)_client.ID, _buffer);

            _buffer.AddUInt(value);

            var length = _buffer.Length;
            var ptr    = Marshal.AllocHGlobal(length);
            var span   = new Span <byte>(ptr.ToPointer(), length);
            _buffer.ToSpan(ref span);

            var data = new PacketData
            {
                Data = ptr, Length = length, SequenceId = id
            };

            _buffer.Clear();

            var canSend = _detector.EnqueueData((ushort)_client.ID, data);

            if (canSend)
            {
                var packet = new Packet();
                packet.Create(data.Data, data.Length, PacketFlags.None);
                _sendData.Enqueue(new SendData {
                    Packet = packet, Peer = _client
                });
            }
            else
            {
                _client.DisconnectNow(0);
            }
        }
    }