Beispiel #1
0
    async Task ReceiveBroadcastAsync()
    {
        UdpReceiveResult udpReceiveResult = await m_Client.ReceiveAsync();

        var segment = new ArraySegment <byte>(udpReceiveResult.Buffer, 0, udpReceiveResult.Buffer.Length);

        using var reader = new FastBufferReader(segment, Allocator.Temp);

        try
        {
            if (ReadAndCheckHeader(reader, MessageType.BroadCast) == false)
            {
                return;
            }

            reader.ReadNetworkSerializable(out TBroadCast receivedBroadcast);

            if (ProcessBroadcast(udpReceiveResult.RemoteEndPoint, receivedBroadcast, out TResponse response))
            {
                using var writer = new FastBufferWriter(1024, Allocator.Temp, 1024 * 64);
                WriteHeader(writer, MessageType.Response);

                writer.WriteNetworkSerializable(response);
                var data = writer.ToArray();

                await m_Client.SendAsync(data, data.Length, udpReceiveResult.RemoteEndPoint);
            }
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }
        protected override FastBufferReader Buf(params byte[] bytes)
        {
            _buffer = new byte[bytes.Length + 10];
            Array.Copy(bytes, _buffer, bytes.Length);
            var rdr = new FastBufferReader(_buffer);

            rdr.SetView(bytes.Length);
            return(rdr);
        }
        public void SetRestoreViewWorks()
        {
            const ulong value   = 43543543UL;
            var         rdr     = new FastBufferReader(BitConverter.GetBytes(value).Concat(BitConverter.GetBytes(value)).ToArray());
            var         view    = rdr.SetView(8);
            var         subView = rdr.SetView(0);

            Assert.True(rdr.End);
            rdr.RestoreView(subView);
            Assert.Equal(value, rdr.ReadLittleEndian64());
            rdr.RestoreView(view);
            Assert.Equal(value, rdr.ReadLittleEndian64());
            Assert.Throws <InvalidOperationException>(() => rdr.RestoreView(subView));
        }
Beispiel #4
0
    private bool ReadAndCheckHeader(FastBufferReader reader, MessageType expectedType)
    {
        reader.ReadValueSafe(out long receivedApplicationId);
        if (receivedApplicationId != m_UniqueApplicationId)
        {
            return(false);
        }

        reader.ReadByteSafe(out byte messageType);
        if (messageType != (byte)expectedType)
        {
            return(false);
        }

        return(true);
    }
Beispiel #5
0
    async Task ReceiveResponseAsync()
    {
        UdpReceiveResult udpReceiveResult = await m_Client.ReceiveAsync();

        var segment = new ArraySegment <byte>(udpReceiveResult.Buffer, 0, udpReceiveResult.Buffer.Length);

        using var reader = new FastBufferReader(segment, Allocator.Temp);

        try
        {
            if (ReadAndCheckHeader(reader, MessageType.Response) == false)
            {
                return;
            }

            reader.ReadNetworkSerializable(out TResponse receivedResponse);
            ResponseReceived(udpReceiveResult.RemoteEndPoint, receivedResponse);
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }