Exemple #1
0
        public void Start(IPEndPoint _)
        {
            readThread = new Thread(() =>
            {
                IPEndPoint endPoint = null;
                while (!dropConnection)
                {
                    byte[] data = udpClient.Receive(ref endPoint);

                    ReceiveEventArgs eventArgs = new ReceiveEventArgs(data, endPoint);
                    IPEndPoint point           = endPoint;
                    Task.Run(() =>
                    {
                        Receive(eventArgs);
                        byte[] arr = new ByteBuffer().Write((int)eventArgs.ResponseCode).ToArray();
                        udpClient.Send(arr, arr.Length, point);
                    });
                }
            });

            readThread.Start();
        }
Exemple #2
0
        private static void ReceiveCallback(IAsyncResult result)
        {
            if (result == null)
            {
                return;
            }

            byte[]         receivedBytes = null;
            EbReceiveState state         = (EbReceiveState)result.AsyncState;

            try
            {
                receivedBytes = state.UdpClient.EndReceive(result, ref state.EndPoint);
            }
            catch (ObjectDisposedException)
            {
            }

            if (receivedBytes?.Length > 0)
            {
                ReceiveEventArgs eventArgs = new ReceiveEventArgs(receivedBytes, state.EndPoint);

                if (state.Receive != null)
                {
                    Task.Factory.StartNew(() => state.Receive(eventArgs)).ContinueWith((task =>
                    {
                        byte[] toWrite = new ByteBuffer().Write((int)eventArgs.ResponseCode).ToArray();
                        state.UdpClient.Send(toWrite, toWrite.Length, state.EndPoint);
                    }));
                }
            }

            if (!state.Sender.Closing)
            {
                state.UdpClient.BeginReceive(state.AsyncReceiveCallback, state);
            }
        }