Example #1
0
        private void SendReceiveAsyncReadComplete(IAsyncResult ar)
        {
            SendReceiveAsyncState state = (SendReceiveAsyncState)ar.AsyncState;
            int bytes = state.dst.EndRead(ar);

            if (bytes != 0)
            {
                state.rcv += bytes;
                if (state.rcv < state.recvBuf.Length)
                {
                    Console.WriteLine("Begin Receive: Offset=" + state.rcv + "; Count=" + (state.recvBuf.Length - state.rcv));
                    state.dst.BeginRead(state.recvBuf, state.rcv, state.recvBuf.Length - state.rcv, SendReceiveAsyncReadComplete, state);
                }
                else
                {
                    state.finished.Set();
                    Assert.Fail("Received more data than expected");
                }
            }
            else
            {
                if (state.rcv != state.sendBuf.Length)
                {
                    state.finished.Set();
                    Assert.Fail("Received more/less data than expected: {0} expected; {1} received", state.sendBuf.Length, state.rcv);
                }
                state.finished.Set();
            }
        }
Example #2
0
        public void SendReceiveWithBeginEnd()
        {
            using (SerialPortStream src = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = TimeOut; src.ReadTimeout = TimeOut;
                    dst.WriteTimeout = TimeOut; dst.ReadTimeout = TimeOut;
                    src.Open(); Assert.That(src.IsOpen, Is.True);
                    dst.Open(); Assert.That(dst.IsOpen, Is.True);

                    SendReceiveAsyncState state = new SendReceiveAsyncState {
                        src     = src,
                        dst     = dst,
                        sendBuf = new byte[src.WriteBufferSize],
                        recvBuf = new byte[src.WriteBufferSize + 10]
                    };
                    Random r = new Random();
                    r.NextBytes(state.sendBuf);

                    // Here we start the read and write in parallel. The read will wait up to c_Timeout for the first byte.
                    dst.BeginRead(state.recvBuf, 0, state.recvBuf.Length, SendReceiveAsyncReadComplete, state);
                    src.BeginWrite(state.sendBuf, 0, state.sendBuf.Length, SendReceiveAsyncWriteComplete, state);
                    if (!state.finished.WaitOne(30000))
                    {
                        Assert.Fail("BeginWrite/BeginRead test case timeout");
                    }
                }
        }
Example #3
0
        private void SendReceiveAsyncWriteComplete(IAsyncResult ar)
        {
            SendReceiveAsyncState state = (SendReceiveAsyncState)ar.AsyncState;

            state.src.EndWrite(ar);
        }