internal MsQuicStream(MsQuicConnection connection, QUIC_STREAM_OPEN_FLAG flags, IntPtr nativeObjPtr, bool inbound)
        {
            Debug.Assert(connection != null, "Connection null");

            _ptr = nativeObjPtr;

            _sendResettableCompletionSource    = new ResettableCompletionSource <uint>();
            _receiveResettableCompletionSource = new ResettableCompletionSource <uint>();
            SetCallbackHandler();

            bool isBidirectional = !flags.HasFlag(QUIC_STREAM_OPEN_FLAG.UNIDIRECTIONAL);

            if (inbound)
            {
                _canRead  = true;
                _canWrite = isBidirectional;
                _started  = true;
            }
            else
            {
                _canRead  = isBidirectional;
                _canWrite = true;
                StartLocalStream();
            }
        }
예제 #2
0
        // Creates a new MsQuicStream
        internal MsQuicStream(MsQuicConnection connection, QUIC_STREAM_OPEN_FLAG flags, IntPtr nativeObjPtr, bool inbound)
        {
            Debug.Assert(connection != null);

            _ptr = nativeObjPtr;

            if (inbound)
            {
                _started  = StartState.Finished;
                _canWrite = !flags.HasFlag(QUIC_STREAM_OPEN_FLAG.UNIDIRECTIONAL);
                _canRead  = true;
            }
            else
            {
                _started  = StartState.None;
                _canWrite = true;
                _canRead  = !flags.HasFlag(QUIC_STREAM_OPEN_FLAG.UNIDIRECTIONAL);
            }

            _sendResettableCompletionSource          = new ResettableCompletionSource <uint>();
            _receiveResettableCompletionSource       = new ResettableCompletionSource <uint>();
            _shutdownWriteResettableCompletionSource = new ResettableCompletionSource <uint>();

            SetCallbackHandler();
        }