Esempio n. 1
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");
                    }
                }
        }
        public void DisconnectOnWriteAsyncBlocked()
        {
            byte[] buffer = new byte[8192];
            using (SerialPortStream serialSource = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream serialDest = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    serialSource.ReadBufferSize  = 8192;
                    serialSource.WriteBufferSize = 8192;
                    serialDest.ReadBufferSize    = 8192;
                    serialDest.WriteBufferSize   = 8192;
                    serialSource.Handshake       = Handshake.Rts;
                    serialSource.Open();
                    serialDest.Open();

                    serialDest.RtsEnable = false;
                    Thread.Sleep(100);

                    Assert.That(
                        () => {
                        while (true)
                        {
                            Console.WriteLine("DisconnectOnWriteAsyncBlocked BeginWrite");
                            IAsyncResult ar = serialSource.BeginWrite(buffer, 0, buffer.Length, null, null);
                            Console.WriteLine("DisconnectOnWriteAsyncBlocked EndWrite");
                            serialSource.EndWrite(ar);
                        }
                    }, Throws.InstanceOf <System.IO.IOException>());

                    // Device should still be open.
                    Assert.That(serialSource.IsOpen, Is.True);
                    serialSource.Close();
                }
        }
Esempio n. 3
0
 public static IAsyncResult BeginWrite(this SerialPortStream stream, Message message, AsyncCallback callback, object state)
 => stream.BeginWrite(message.MessageBytes, 0, Message.messageSize, callback, state);