Exemplo n.º 1
0
        internal virtual void DataArrival(IAsyncResult asyncResult)
        {
            var bytesRecived = 0;

            try { bytesRecived = ConnectionSocket.EndReceive(asyncResult); }
            catch (Exception)
            {
                //Client quit unexpectantly
            }

            if (bytesRecived != 0)
            {
                var data = new byte[bytesRecived];
                Array.Copy(DataBuffer, data, bytesRecived);

                OnPacket(data);

                try
                {
                    ConnectionSocket.BeginReceive(DataBuffer, 0, DataBuffer.Length, SocketFlags.None, new AsyncCallback(DataArrival), null);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error occured recieving packet!");
                }
            }
            else
            {
                Disconnect();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// reads the incomming data and triggers the DataReceived event when done
        /// </summary>
        protected virtual void Read(IAsyncResult ar)
        {
            if (ConnectionSocket == null)
            {
                return;
            }
            int sizeOfReceivedData = -1;

            try
            {
                sizeOfReceivedData = ConnectionSocket.EndReceive(ar);
            }
            catch { }

            if (sizeOfReceivedData > 0)
            {
                // we are no longer reading data
                readingData = false;
                OnDataReceived(new DataReceivedEventArgs(sizeOfReceivedData, dataBuffer));
                Listen();
            }
            else // the socket is closed
            {
                OnDisconnected();
            }
        }
Exemplo n.º 3
0
        internal virtual void DataArrival(IAsyncResult asyncResult)
        {
            var bytesRecived = 0;

            try
            {
                // TODO: Foi Forçado o cancelamento de uma conexão pelo host remoto.
                bytesRecived = ConnectionSocket.EndReceive(asyncResult);
            }
            catch (Exception e)
            {
                var trace = new StackTrace(e, true);
                Log.Print(LogType.Error,
                          $"{e.Message}: {e.Source}" +
                          $"{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
            }

            if (bytesRecived != 0)
            {
                var data = new byte[bytesRecived];
                Array.Copy(DataBuffer, data, bytesRecived);

                OnPacket(data);

                try
                {
                    // TODO: Cannot access a disposed object.
                    ConnectionSocket.BeginReceive(DataBuffer, 0, DataBuffer.Length, SocketFlags.None, DataArrival,
                                                  null);
                }
                catch (SocketException e)
                {
                    var trace = new StackTrace(e, true);
                    Log.Print(LogType.Error,
                              $"{e.Message}: {e.Source}" +
                              $"{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
                    ConnectionSocket.Close();
                }
                catch (Exception e)
                {
                    var trace = new StackTrace(e, true);
                    Log.Print(LogType.Error,
                              $"{e.Message}: {e.Source}" +
                              $"{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
                }
            }
            else
            {
                Disconnect();
            }
        }
Exemplo n.º 4
0
        public virtual void DataArrival(IAsyncResult asyncResult)
        {
            var bytesRecived = 0;

            try
            {
                bytesRecived = ConnectionSocket.EndReceive(asyncResult);
            }
            catch (Exception e)
            {
                var trace = new StackTrace(e, true);
                Log.Print(LogType.Error,
                          $"{e.Message}: {e.Source}" +
                          $"{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
            }

            if (bytesRecived != 0)
            {
                var data = new byte[bytesRecived];
                Array.Copy(DataBuffer, data, bytesRecived);

                OnPacket(data);

                try
                {
                    ConnectionSocket.BeginReceive(DataBuffer, 0, DataBuffer.Length, SocketFlags.None, DataArrival,
                                                  null);
                }
                catch (SocketException e)
                {
                    var trace = new StackTrace(e, true);
                    Log.Print(LogType.Error,
                              $"{e.Message}: {e.Source}" +
                              $"{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
                    ConnectionSocket.Close();
                }
                catch (Exception e)
                {
                    var trace = new StackTrace(e, true);
                    Log.Print(LogType.Error,
                              $"{e.Message}: {e.Source}" +
                              $"{trace.GetFrame(trace.FrameCount - 1).GetFileName()}:{trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber()}");
                }
            }
            else
            {
                Disconnect();
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// reads the incoming data and triggers the DataReceived event when done
        /// </summary>
        private void Read(IAsyncResult ar)
        {
            int sizeOfReceivedData = 0;

            try
            {
                sizeOfReceivedData = ConnectionSocket.EndReceive(ar);
            }
            catch (SocketException)
            {
            }
            catch (ObjectDisposedException)
            {
            }

            if (sizeOfReceivedData > 0)
            {
                bool complete;
                var  msg = DecodeMessage(_dataBuffer, out complete);

                if (complete)
                {
                    _dataBufferOffset = 0;

                    if (DataReceived != null && !_discard)
                    {
                        DataReceived(this, new DataReceivedEventArgs(msg));
                    }

                    _discard = false;
                }
                else
                {
                    _dataBufferOffset += sizeOfReceivedData;
                }
                if (_dataBufferOffset >= _dataBuffer.Length)
                {
                    _dataBufferOffset = 0;
                    _discard          = true;
                }
                // continue listening for more data
                Listen();
            }
            else // the socket is closed
            {
                Disconnected?.Invoke(this, EventArgs.Empty);
            }
        }
Exemplo n.º 6
0
 private void ReadCallback(IAsyncResult ar)
 {
     try
     {
         int bytesRead = ConnectionSocket.EndReceive(ar);
         if (bytesRead > 0)
         {
             streamParser.Push(buffer, 0, bytesRead);
             ConnectionSocket.BeginReceive(buffer, 0, BUFFERSIZE, 0, new AsyncCallback(ReadCallback), null);
         }
     }
     catch (Exception ex)
     {
         LogTools.Write(this.SessionId, ex, "Connection.ReadCallback");
     }
 }
        private void Read(IAsyncResult ar)
        {
            int sizeOfReceivedData = ConnectionSocket.EndReceive(ar);

            if (sizeOfReceivedData > 0)
            {
                OnDataReceived(new DataReceivedEventArgs(sizeOfReceivedData, Decode2(dataBuffer)));
                Send("hi dere!");

                // continue listening for more data
                Listen();
            }
            else // the socket is closed
            {
                if (Disconnected != null)
                {
                    Disconnected(this, EventArgs.Empty);
                }
            }
        }
Exemplo n.º 8
0
        private int AsyncReceive(out byte[] data, int timeout)
        {
            data = new byte[ReceiveBufferSize];

            IAsyncResult receiveResult = ConnectionSocket.BeginReceive(data, 0, ReceiveBufferSize, SocketFlags.None, null, null);

            bool success = false;

            if (timeout > 0)
            {
                success = receiveResult.AsyncWaitHandle.WaitOne(timeout, true);
            }
            else if (timeout == 0)
            {
                success = receiveResult.AsyncWaitHandle.WaitOne();
            }

            if (!success)
            {
                data = null;
                ConnectionSocket.Dispose();
                return(-1);
            }

            int size = ConnectionSocket.EndReceive(receiveResult);

            if (size > 0)
            {
                TrimData(ref data, size);
            }
            else
            {
                data = null;
            }

            return(size);
        }