internal ValueTask WriteDirectOrQueueFireAndForgetAsync <T>(PhysicalConnection connection, Message message, ResultProcessor <T> processor) { async ValueTask Awaited(ValueTask <WriteResult> l_result) => await l_result.ForAwait(); if (message != null) { message.SetSource(processor, null); ValueTask <WriteResult> result; if (connection == null) { Multiplexer.Trace("Enqueue: " + message); result = GetBridge(message.Command).TryWriteAsync(message, isSlave); } else { Multiplexer.Trace("Writing direct: " + message); var bridge = connection.BridgeCouldBeNull; if (bridge == null) { throw new ObjectDisposedException(connection.ToString()); } else { result = bridge.WriteMessageTakingWriteLockAsync(connection, message); } } if (!result.IsCompletedSuccessfully) { return(Awaited(result)); } } return(default);
internal void WriteDirectOrQueueFireAndForget <T>(PhysicalConnection connection, Message message, ResultProcessor <T> processor) { if (message != null) { message.SetSource(processor, null); if (connection == null) { Multiplexer.Trace("Enqueue: " + message); GetBridge(message.Command).TryWrite(message, isSlave); } else { Multiplexer.Trace("Writing direct: " + message); var bridge = connection.BridgeCouldBeNull; if (bridge == null) { throw new ObjectDisposedException(connection.ToString()); } else { bridge.WriteMessageTakingWriteLock(connection, message); } } } }
internal void OnConnectionFailed(PhysicalConnection connection, ConnectionFailureType failureType, Exception innerException) { Trace($"OnConnectionFailed: {connection}"); AbandonPendingBacklog(innerException); if (reportNextFailure) { LastException = innerException; reportNextFailure = false; // until it is restored var endpoint = ServerEndPoint.EndPoint; Multiplexer.OnConnectionFailed(endpoint, ConnectionType, failureType, innerException, reconfigureNextFailure, connection?.ToString()); } }
internal void OnFullyEstablished(PhysicalConnection connection) { try { if (connection == null) { return; } var bridge = connection.BridgeCouldBeNull; if (bridge != null) { if (bridge == subscription) { Multiplexer.ResendSubscriptions(this); } Multiplexer.OnConnectionRestored(EndPoint, bridge.ConnectionType, connection?.ToString()); } } catch (Exception ex) { connection.RecordConnectionFailed(ConnectionFailureType.InternalFailure, ex); } }