private void BeginSend(IoBuffer buf) { ArraySegment <Byte> array = buf.GetRemaining(); try { //make sync. add by zesus19 _serialPort.Write(array.Array, array.Offset, array.Count); Int32 written = buf.Remaining; buf.Position += written; EndSend(written); //delete async //_serialPort.BaseStream.BeginWrite(array.Array, array.Offset, array.Count, SendCallback, buf); } catch (ObjectDisposedException) { // ignore } catch (Exception ex) { this.FilterChain.FireExceptionCaught(ex); //add by zesus19 Processor.Remove(this); } }
private IoBuffer ReadBuffer() { IoBuffer buf = IoBuffer.Allocate(_sessionStream.Remaining); while (true) { ArraySegment <Byte> array = buf.GetRemaining(); Int32 bytesRead = _sslStream.Read(array.Array, array.Offset, array.Count); if (bytesRead <= 0) { break; } buf.Position += bytesRead; if (_sessionStream.Remaining == 0) { break; } else { // We have to grow the target buffer, it's too small. buf.Capacity <<= 1; buf.Limit = buf.Capacity; } } buf.Flip(); return(buf); }
public void ScheduleFilterWrite(INextFilter nextFilter, IWriteRequest writeRequest) { if (!_authenticated) { if (_session.Connected) { // Handshake not complete yet. _preHandshakeEventQueue.Enqueue(new IoFilterEvent(nextFilter, IoEventType.Write, _session, writeRequest)); } return; } IoBuffer buf = (IoBuffer)writeRequest.Message; if (buf.Remaining == 0) { return; } //lock (_sessionStream) //{ ArraySegment <Byte> array = buf.GetRemaining(); _currentNextFilter = nextFilter; _currentWriteRequest = writeRequest; // SSL encrypt _sslStream.Write(array.Array, array.Offset, array.Count); _sslStream.Flush(); //} }
public void ScheduleFilterWrite(INextFilter nextFilter, IWriteRequest writeRequest) { if (!_authenticated) { if (_session.Connected) { // Handshake not complete yet. _preHandshakeEventQueue.Enqueue(new IoFilterEvent(nextFilter, IoEventType.Write, _session, writeRequest)); } return; } IoBuffer buf = (IoBuffer)writeRequest.Message; if (!buf.HasRemaining) { // empty message will break this SSL stream? return; } lock (this) { ArraySegment <Byte> array = buf.GetRemaining(); _currentNextFilter = nextFilter; _currentWriteRequest = writeRequest; // SSL encrypt _sslStream.Write(array.Array, array.Offset, array.Count); } }
/// <inheritdoc/> protected override void PutInternal(IoBuffer src) { ArraySegment <Byte> array = src.GetRemaining(); if (array.Count > Remaining) { throw new OverflowException(); } PutInternal(array.Array, array.Offset, array.Count); src.Position += array.Count; }
public MessageDecoderResult Decode(IoSession session, IoBuffer input, IProtocolDecoderOutput output) { var value = input.GetRemaining().Array; input.Position = value.Length; if (value == null) { return(MessageDecoderResult.NeedData); } output.Write(value); return(MessageDecoderResult.OK); }
private void BeginSend(AsyncDatagramSession session, IoBuffer buf, EndPoint remoteEP) { ArraySegment <Byte> array = buf.GetRemaining(); try { Socket.BeginSendTo(array.Array, array.Offset, array.Count, SocketFlags.None, remoteEP, SendCallback, session); } catch (ObjectDisposedException) { // ignore } catch (Exception ex) { EndSend(session, ex); } }
private void BeginSend(IoBuffer buf) { ArraySegment <Byte> array = buf.GetRemaining(); try { _serialPort.BaseStream.BeginWrite(array.Array, array.Offset, array.Count, SendCallback, buf); } catch (ObjectDisposedException) { // ignore } catch (Exception ex) { this.FilterChain.FireExceptionCaught(ex); } }
/// <inheritdoc/> protected override void BeginSend(IWriteRequest request, IoBuffer buf) { ArraySegment <Byte> array = buf.GetRemaining(); try { Socket.BeginSend(array.Array, array.Offset, array.Count, SocketFlags.None, SendCallback, new SendingContext(Socket, buf)); } catch (ObjectDisposedException) { // ignore } catch (Exception ex) { EndSend(ex); } }
private void BeginSend(IoBuffer buf, EndPoint destination) { ArraySegment <Byte> array = buf.GetRemaining(); try { Socket.BeginSendTo(array.Array, array.Offset, array.Count, SocketFlags.None, destination, SendCallback, new SendingContext(Socket, buf)); } catch (ObjectDisposedException) { // ignore } catch (Exception ex) { EndSend(ex); } }
private void DecodeNormal(Context ctx, IoSession session, IoBuffer input, IProtocolDecoderOutput output) { Int32 matchCount = ctx.MatchCount; // Try to find a match Int32 oldPos = input.Position, oldLimit = input.Limit; while (input.HasRemaining) { Byte b = input.Get(); if (_delimBuf[matchCount] == b) { matchCount++; if (matchCount == _delimBuf.Length) { // Found a match. Int32 pos = input.Position; input.Limit = pos; input.Position = oldPos; ctx.Append(input); input.Limit = oldLimit; input.Position = pos; if (ctx.OverflowPosition == 0) { IoBuffer buf = ctx.Buffer; buf.Flip(); buf.Limit -= matchCount; ArraySegment <Byte> bytes = buf.GetRemaining(); try { String str = _encoding.GetString(bytes.Array, bytes.Offset, bytes.Count); WriteText(session, str, output); } finally { buf.Clear(); } } else { Int32 overflowPosition = ctx.OverflowPosition; ctx.Reset(); throw new RecoverableProtocolDecoderException("Line is too long: " + overflowPosition); } oldPos = pos; matchCount = 0; } } else { input.Position = Math.Max(0, input.Position - matchCount); matchCount = 0; } } // Put remainder to buf. input.Position = oldPos; ctx.Append(input); ctx.MatchCount = matchCount; }
private void DecodeAuto(Context ctx, IoSession session, IoBuffer input, IProtocolDecoderOutput output) { Int32 matchCount = ctx.MatchCount; // Try to find a match Int32 oldPos = input.Position, oldLimit = input.Limit; while (input.HasRemaining) { Byte b = input.Get(); Boolean matched = false; switch (b) { case 0x0d: // \r // Might be Mac, but we don't auto-detect Mac EOL // to avoid confusion. matchCount++; break; case 0x0a: // \n // UNIX matchCount++; matched = true; break; default: matchCount = 0; break; } if (matched) { // Found a match. Int32 pos = input.Position; input.Limit = pos; input.Position = oldPos; ctx.Append(input); input.Limit = oldLimit; input.Position = pos; if (ctx.OverflowPosition == 0) { IoBuffer buf = ctx.Buffer; buf.Flip(); buf.Limit -= matchCount; ArraySegment <Byte> bytes = buf.GetRemaining(); try { String str = _encoding.GetString(bytes.Array, bytes.Offset, bytes.Count); WriteText(session, str, output); } finally { buf.Clear(); } } else { Int32 overflowPosition = ctx.OverflowPosition; ctx.Reset(); throw new RecoverableProtocolDecoderException("Line is too long: " + overflowPosition); } oldPos = pos; matchCount = 0; } } // Put remainder to buf. input.Position = oldPos; ctx.Append(input); ctx.MatchCount = matchCount; }