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(); } }
/// <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(); } }
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(); } }
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(); } }
/// <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); } }
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); } } }
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); }