protected void RunAsyncByteReader(Action <byte[]> asyncReader) { int len = sizeof(int); byte[] buff = new byte[len]; // read the length pipeStream.ReadAsync(buff, 0, len).ContinueWith((ret) => { if (ret.Result == 0) { PipeClosed?.Invoke(this, EventArgs.Empty); return; } // read the data len = BitConverter.ToInt32(buff, 0); buff = new byte[len]; pipeStream.ReadAsync(buff, 0, len).ContinueWith((ret2) => { if (ret2.Result == 0) { PipeClosed?.Invoke(this, EventArgs.Empty); return; } asyncReader(buff); RunAsyncByteReader(asyncReader); }); }); }
void recvProc() { while (revcRunning) { int len = sizeof(int); byte[] buff = new byte[len]; int ret = SafeRead(buff, len); if (ret < 0) { PipeClosed?.Invoke(this, EventArgs.Empty); return; } len = BitConverter.ToInt32(buff, 0); buff = new byte[len]; ret = SafeRead(buff, len); if (ret < 0) { PipeClosed?.Invoke(this, EventArgs.Empty); return; } DataReceived?.Invoke(this, buff); } }
private void StartByteReader(Action <byte[]> packetReceived) { int intSize = sizeof(int); byte[] dataLengthBytes = new byte[intSize]; _pipeStream.ReadAsync(dataLengthBytes, 0, intSize).ContinueWith(t => { int len = t.Result; if (len == 0) { PipeClosed?.Invoke(this, EventArgs.Empty); } else { int dataLength = BitConverter.ToInt32(dataLengthBytes, 0); byte[] data = new byte[dataLength]; _pipeStream.ReadAsync(data, 0, dataLength).ContinueWith(t2 => { len = t2.Result; if (len == 0) { PipeClosed?.Invoke(this, EventArgs.Empty); } else { packetReceived(data); StartByteReader(packetReceived); } }); } }); }
protected virtual void OnPipeClosed(PipeClosedEventArgs e) { LoggingManager.Info("FancyServer disconnected"); PipeClosed?.Invoke(this, e); }