private SocketAsyncEventArgs CreateIoEventArgs()
        {
            SocketAsyncEventArgs receiveArgs = CreateAcceptEventArgs();
            SocketAsyncEventArgs sendArgs    = CreateAcceptEventArgs();

            IBuffer receiveBuffer = null;
            IBuffer sendBuffer    = null;

            if (!this._bufferAllocator.Alloc(ChannelBufferSize, out receiveBuffer) || !this._bufferAllocator.Alloc(ChannelBufferSize, out sendBuffer))
            {
                // Failed to allocate buffers!
                throw new InvalidOperationException("Failed to allocate send & receive buffers");
            }

            receiveArgs.SetBuffer(receiveBuffer.Get(), 0, ChannelBufferSize);
            sendArgs.SetBuffer(sendBuffer.Get(), 0, ChannelBufferSize);

            Channel      channel      = new DefaultChannel(this._channelIdIndex++, this, sendArgs);
            ChannelToken channelToken = new ChannelToken(channel, new DataWriter());

            receiveArgs.UserToken = channelToken;
            sendArgs.UserToken    = channelToken;

            this._channelInitialiser.InitialiseChannel(channel);

            return(receiveArgs);
        }
Beispiel #2
0
 static void TestGet <T>(IBuffer <T> buffer, T expectedValue, bool expectedException = false)
 {
     try
     {
         T value = buffer.Get();
         if (expectedValue.Equals(value))
         {
             Console.ForegroundColor = ConsoleColor.Green;
             Console.WriteLine($"OK. Gets {value}");
         }
         else
         {
             Console.ForegroundColor = ConsoleColor.Red;
             Console.WriteLine($"Error. Gets {value}, but expected {expectedValue}");
         }
     }
     catch (Exception e)
     {
         if (expectedException)
         {
             Console.ForegroundColor = ConsoleColor.Green;
             Console.WriteLine($"OK. Exception has been thrown! {e.Message}");
         }
         else
         {
             Console.ForegroundColor = ConsoleColor.Red;
             Console.WriteLine($"Error. Exception has been thrown! {e.Message}");
         }
     }
     Console.ResetColor();
 }
Beispiel #3
0
        public IBuffer Put(IBuffer source, int length)
        {
            CheckBounds(0, length, source.Remaining);
            int index = PutIndex(length);

            for (int i = 0; i < length; i++)
            {
                InternalPut(index + i, source.Get());
            }

            return(this);
        }