Exemplo n.º 1
0
        internal SimpleInMemConnection(
            SimpleInMemListener parentListener, ConnectionType connectionType,
            ServiceHost serviceHost, SimpleInMemTransport transport,
            Logger logger, Metrics metrics)
        {
            if (parentListener == null)
            {
                throw new ArgumentNullException(nameof(parentListener));
            }
            if (serviceHost == null)
            {
                throw new ArgumentNullException(nameof(serviceHost));
            }
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }

            this.parentListener = parentListener;
            this.connectionType = connectionType;
            this.serviceHost    = serviceHost;
            this.transport      = transport;
            writeQueue          = new InMemFrameQueue();

            // start at -1 or 0 so the first conversation ID is 1 or 2.
            prevConversationId = (connectionType == ConnectionType.Client) ? -1 : 0;
            state = CnxState.Created;

            this.logger  = logger;
            this.metrics = metrics;
        }
Exemplo n.º 2
0
        public override Task StopAsync()
        {
            bool connected = false;

            lock (stateLock)
            {
                if (connected = ((state & CnxState.Connected) != 0))
                {
                    state = CnxState.Disconnecting;
                    cancelTokenSource.Cancel();
                }
            }

            if (connected)
            {
                OnDisconnect();
                writeQueue.Clear();
                pairedReadQueue = null;

                lock (stateLock)
                {
                    state = CnxState.Disconnected;
                }
            }

            return(TaskExt.CompletedTask);
        }