private void SocketEvent_Receive(IAsyncResult ar) { try { lock (this) { EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); var socket = _socket; int transBytes = socket?.EndReceiveFrom(ar, ref remoteEP) ?? -1; if (transBytes == -1) { return; } byte[] dispatchBuffer = new byte[transBytes]; Array.Copy(_receivedBuffer, dispatchBuffer, transBytes); SpinWorker.Dispatch(() => { EventRead?.Invoke(new IOEventResult(remoteEP, IOEventType.Read, dispatchBuffer, 0, transBytes, 0)); }); WaitForReceive(); } } catch (Exception e) { Logger.Err(LogMask.Aegis, e.ToString()); Close(); } }
static ValueTask <EventWrite> DefaultTransform(EventRead evt) => new ValueTask <EventWrite>( new EventWrite { Stream = evt.EventStreamId, EventId = evt.EventId, EventType = evt.EventType, IsJson = evt.IsJson, Data = evt.Data, Metadata = evt.Metadata, SourcePosition = evt.Position } );
private void OnRead(IAsyncResult ar) { int transBytes = PipeStream.EndRead(ar); if (transBytes == 0) { PipeStream.Close(); PipeStream = null; EventClose?.Invoke(new IOEventResult(this, IOEventType.Close, AegisResult.ClosedByRemote)); return; } EventRead?.Invoke(new IOEventResult(this, IOEventType.Read, _receivedBuffer, 0, transBytes, AegisResult.Ok)); WaitForReceive(); }
private void ReceiveThread() { byte[] buffer = new byte[BaudRate * 2]; while (_receiveThread != null && Handle != null) { try { int readBytes = Handle.Read(buffer, 0, BaudRate); if (readBytes == 0) { lock (this) { Handle?.Close(); Handle = null; _receiveThread = null; } EventClose?.Invoke(new IOEventResult(this, IOEventType.Close, AegisResult.ClosedByRemote)); break; } EventRead?.Invoke(new IOEventResult(this, IOEventType.Read, buffer, 0, readBytes, AegisResult.Ok)); } catch (System.IO.IOException) { lock (this) { Handle?.Close(); Handle = null; _receiveThread = null; EventClose?.Invoke(new IOEventResult(this, IOEventType.Close, AegisResult.ClosedByRemote)); } break; } catch (Exception e) { ErrorHandler?.Invoke(e); Logger.Err(LogMask.Aegis, e.Message); } } }