Ejemplo n.º 1
0
 protected virtual void OnDataReceiveError(UdpDataReceiveErrorEventArgs e)
 {
     DataReceiveError?.Invoke(this, e);
 }
Ejemplo n.º 2
0
        private void ProcessReceive(SocketAsyncEventArgs e)
        {
            if (e.SocketError != SocketError.Success)
            {
                if (e.SocketError == SocketError.OperationAborted)
                {
                    return;
                }

                //Fire ClientDataReceiveError event
                if (DataReceiveError != null)
                {
                    if (CallDataReceiveErrorAsync)
                    {
                        DataReceiveError.BeginInvoke(this, r => DataReceiveError.EndInvoke(r), null);
                    }
                    else
                    {
                        DataReceiveError(this);
                    }
                }

                ProcessDisconnect(e);
                return;
            }

            ClientToken clientToken      = (ClientToken)e.UserToken;
            int         bytesTransferred = e.BytesTransferred;

            if (bytesTransferred != 0)
            {
                clientToken.AcceptData(e, bytesTransferred);

                //Parse received data for packets
                List <BaseResponse> packets = clientToken.ProcessReceivedDataRsp();

                //Fire ClientDataReceived event
                if (packets.Count > 0 && DataReceived != null)
                {
                    if (CallDataReceivedAsync)
                    {
                        DataReceived.BeginInvoke(this, packets, r => DataReceived.EndInvoke(r), null);
                    }
                    else
                    {
                        DataReceived(this, packets);
                    }
                }

                StartReceive(e);

                //clientToken.AcceptDataAsync(e, bytesTransferred).ContinueWith
                //    (
                //        a =>
                //        {
                //            //Parse received data for packets
                //            List<BaseResponse> packets = clientToken.ProcessReceivedDataRsp();

                //            //Fire ClientDataReceived event
                //            if (packets.Count > 0 && DataReceived != null)
                //            {
                //                DataReceived.BeginInvoke(this, packets, r => DataReceived.EndInvoke(r), null);
                //            }

                //            StartReceive(e);
                //        }
                //    );

                return;
            }

            //Return of zero bytes transferred means that the server is no longer connected
            if (!clientToken.Closed && clientToken.Socket != null)
            {
                ProcessDisconnect(e);
            }
        }