예제 #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;
        }
예제 #2
0
        /// <summary>
        /// Makes a new instance of <see cref="SimpleInMemListener"/> and returns it
        /// if one does not exist already for provided address. Returns an existing one
        /// otherwise.
        /// </summary>
        /// <returns><see cref="SimpleInMemListener"/> instance represented by address</returns>
        public override Listener MakeListener(string address)
        {
            SimpleInMemListener listener;

            if (!listeners.TryGetValue(address, out listener))
            {
                lock (listenersLock)
                {
                    if (!listeners.TryGetValue(address, out listener))
                    {
                        listener = new SimpleInMemListener(this, address, logger, metrics);
                        listeners.Add(address, listener);
                    }
                }
            }

            return(listener);
        }