Example #1
0
        public bool StartRead(ref ArraySegment <byte> buffer, ref int offset, ZeroC.Ice.AsyncCallback callback,
                              object state)
        {
            if (_configuration.ReadReady())
            {
                _configuration.CheckReadException(); // Only raise if we're configured to read now.
            }

            if (_buffered)
            {
                int available = _readBufferOffset - _readBufferPos;
                if (available > 0)
                {
                    int requested = buffer.Count - offset;
                    if (available >= requested)
                    {
                        available = requested;
                    }

                    _readBuffer.Slice(_readBufferPos, available).CopyTo(buffer.Slice(offset));
                    offset         += available;
                    _readBufferPos += available;
                }

                if (_readBufferPos == _readBufferOffset && offset < buffer.Count)
                {
                    _readBufferPos    = 0;
                    _readBufferOffset = 0;
                    return(_transceiver.StartRead(ref _readBuffer, ref _readBufferOffset, callback, state));
                }
                else
                {
                    TestHelper.Assert(offset == buffer.Count);
                    return(true); // Completed synchronously
                }
            }
            else
            {
                return(_transceiver.StartRead(ref buffer, ref offset, callback, state));
            }
        }
Example #2
0
 public bool StartWrite(IList <ArraySegment <byte> > buf, int offset, ZeroC.Ice.AsyncCallback callback,
                        object state, out bool completed)
 {
     _configuration.CheckWriteException();
     return(_transceiver.StartWrite(buf, offset, callback, state, out completed));
 }