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; }
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); }