BaseProtocolServer
Clase base para servidores de protocolo (FIX, SBE, etc.) Contiene infraestructura compartida: ciclo de vida, sesiones, suscripciones, canales de mensajes, tareas de fondo.
Hereda de: BaseLogReceiver
Implementa: IHostedProtocolServer, IProtocolServer, ILogReceiver, ILogSource, IDisposable, IMessageListener
Constructores
protected BaseProtocolServer(TSettings settings, IAuthorization authorization)
baseProtocolServer = BaseProtocolServer(settings, authorization)
Initializes a new instance.
- settings
- Server settings.
- authorization
- The customer authentication.
Propiedades
public abstract EndPoint Address { get; set; }
value = baseProtocolServer.Address
baseProtocolServer.Address = value
Where the server listens.
public IAuthorization Authorization { get; }
value = baseProtocolServer.Authorization
The customer authentication.
protected LoginRateLimiter LoginRateLimiter { get; private set; }
value = baseProtocolServer.LoginRateLimiter
baseProtocolServer.LoginRateLimiter = value
Limitador de tarifas para los intentos de inicio de sesión (compartido entre todos los oyentes).
public IEnumerable<IMessageListenerSession> Sessions { get; }
value = baseProtocolServer.Sessions
Sesiones activas.
public ChannelStates State { get; protected set; }
value = baseProtocolServer.State
baseProtocolServer.State = value
Consigue el almacenamiento estatal subyacente.
Métodos
protected Task AcceptClientsAsync(TcpListener listener, Func<TcpClient, CancellationToken, Task> handleClient, CancellationToken cancellationToken)
result = baseProtocolServer.AcceptClientsAsync(listener, handleClient, cancellationToken)
Accept clients on a listener for as long as the server runs.
- listener
- The listener to accept on.
- handleClient
- What the protocol does with an accepted client. It is not awaited, so one client's session does not hold up the next accept.
- cancellationToken
- Cancellation token.
public void AddSubscription(ServerSubscription subscription)
baseProtocolServer.AddSubscription(subscription)
Agregue su suscripción.
- subscription
- Suscripción.
private static Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> AlwaysWrites(Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler)
result = BaseProtocolServer.AlwaysWrites(handler)
Wrap a handler that always writes so it reports the write the way the session's pump expects.
protected virtual void ClearState()
baseProtocolServer.ClearState()
Despejar todo el estado: oyentes, sesiones, suscripciones.
protected ClientOrderIdRegistry ClientOrderIdsOf(TClientSession session, string clientCode)
result = baseProtocolServer.ClientOrderIdsOf(session, clientCode)
The ClOrdIds a client's live orders hold, whichever of its connections placed them.
- session
- A session of the client.
- clientCode
- The client an order command of a service login names; ignored for any other login.
Devuelve: The client's registry.
protected string Convert(string value)
result = baseProtocolServer.Convert(value)
Convertir texto en latín si está configurado.
protected static ExecutionMessage CreateOrderFailure(OrderRegisterMessage command, Exception error)
result = BaseProtocolServer.CreateOrderFailure(command, error)
The report an order command refused before it reached the venue is answered with. It repeats what the command asked for, because the client has nothing else to match the failure against: the order never got an id on the venue.
- command
- The refused order command.
- error
- Why it was refused.
Devuelve: The execution report to send back.
protected abstract TSubscription CreateOrderSubscription(TClientSession session, string clOrdId, long transactionId)
result = baseProtocolServer.CreateOrderSubscription(session, clOrdId, transactionId)
The subscription an order's reports reach its client by.
- session
- The connection the reports go to.
- clOrdId
- The ClOrdId the client gave the order.
- transactionId
- The number the order goes by.
Devuelve: The subscription.
protected abstract TSubscription CreateSubscription(TClientSession session, string requestId, ServerSubscription subscription, MessageTypes type)
result = baseProtocolServer.CreateSubscription(session, requestId, subscription, type)
Crear una instancia de información de suscripción.
public void Disconnect(IMessageListenerSession session)
baseProtocolServer.Disconnect(session)
Sesión de desconexión.
- session
- Sesión.
protected override void DisposeManaged()
baseProtocolServer.DisposeManaged()
Libera recursos.
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)
Encuue message for multiple subscribers.
- subscribers
- Subscribers to write to.
- handler
- Writes the message for one subscriber. It always writes.
- cancellationToken
- Cancellation token.
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)
Encuue message for multiple subscribers (with bool result).
- subscribers
- Subscribers to write to.
- handler
- Writes the message for one subscriber and answers when it wrote nothing.
- cancellationToken
- Cancellation token.
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)
Encuue message for a single subscription.
- subscription
- The subscription the write belongs to. Its session and request id address the write.
- handler
- Writes the message. It always writes.
- cancellationToken
- Cancellation token.
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)
Encuue message for a single subscription (with bool result).
- subscription
- The subscription the write belongs to. Its session and request id address the write.
- handler
- Writes the message and answers when it wrote nothing.
- cancellationToken
- Cancellation token.
protected void EnqueueMessage(TClientSession session, Func<TClientSession, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, handler, cancellationToken)
Enqueue a write addressed to a session rather than to a subscription: session-level traffic answers no request, so the handler takes neither a subscription nor a request id.
- session
- Session to write to.
- handler
- Writes the message. It always writes.
- cancellationToken
- Cancellation token.
private void EnqueueMessage(TSubscription subscription, TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, session, requestId, handler, cancellationToken)
Encuentro básico: programar trabajo en una sesión de cliente.
protected static string GetRawId(long id)
result = BaseProtocolServer.GetRawId(id)
The transaction id as text, for an answer the client named no id of its own for.
- id
- The transaction id.
Devuelve: The id as text, or an empty string when there is no id.
protected abstract string GetSessionKey(TClientSession session)
result = baseProtocolServer.GetSessionKey(session)
Consiga la clave utilizada para agrupar las sesiones de clientes (e.g. SenderCompId).
public IEnumerable<ServerSubscription> GetSubscriptions(IMessageListenerSession session)
result = baseProtocolServer.GetSubscriptions(session)
Obtener suscripción para la sesión especificada.
- session
- Sesión.
Devuelve: Suscripciones.
protected void HandLiveOrderToLiveConnection(TClientSession addressee, Message message)
baseProtocolServer.HandLiveOrderToLiveConnection(addressee, message)
Hands a report of a live order to a connection of the client that placed it, when the connection that placed it has gone.
- addressee
- The connection the module addressed the report to, or .
- message
- What the module sent.
public bool HasSubscriptions(DataType dataType, SecurityId securityId)
result = baseProtocolServer.HasSubscriptions(dataType, securityId)
Hay suscriptores.
protected bool IsAnotherSessionsSubscription(TClientSession session, long transactionId)
result = baseProtocolServer.IsAnotherSessionsSubscription(session, transactionId)
Whether the subscription a session named is one only another session holds.
- session
- The session asking.
- transactionId
- The subscription it named.
Devuelve: when the subscription belongs to somebody else.
protected bool IsOrphanStatusRow(ExecutionMessage execMsg)
result = baseProtocolServer.IsOrphanStatusRow(execMsg)
Whether an order row names no portfolio, so no status subscription is handed it: client connectors refuse an order with an empty portfolio. The answer to a command goes out regardless.
- execMsg
- The execution report.
Devuelve: when status subscriptions are not handed the row.
protected abstract bool IsStubSubscription(TSubscription subscription)
result = baseProtocolServer.IsStubSubscription(subscription)
Compruebe si la suscripción es un stub (accionista de posición).
public override Task LoadAsync(SettingsStorage storage, CancellationToken cancellationToken)
result = baseProtocolServer.LoadAsync(storage, cancellationToken)
Load settings.
- storage
- Settings storage.
- cancellationToken
- CancellationToken
Devuelve: Task
protected abstract void OnClearListenerState()
baseProtocolServer.OnClearListenerState()
Estado de escucha específico del protocolo claro (detener a los oyentes, etc.).
protected abstract void OnStartListeners(CancellationToken cancellationToken)
baseProtocolServer.OnStartListeners(cancellationToken)
Comience los oyentes específicos del protocolo (TCP, etc.) Agregue tareas a _backgroundTasks.
protected abstract void ProcessInMessage(IMessageListenerSession addressee, Message message, CancellationToken cancellationToken)
baseProtocolServer.ProcessInMessage(addressee, message, cancellationToken)
Process an incoming message and route to subscribed clients.
- addressee
- The only session the message is for, or when it is for every subscriber to it.
protected virtual void ProcessLogout(TClientSession session)
baseProtocolServer.ProcessLogout(session)
Procesamiento de logotipo/desconexión cliente.
protected void RaiseNewOutMessage(IMessageListenerSession session, Message message)
baseProtocolServer.RaiseNewOutMessage(session, message)
Escribe mensaje saliente al canal.
protected void RaiseSessionConnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionConnected(session)
Elevar el evento conectado sesión.
protected void RaiseSessionDisconnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionDisconnected(session)
Levantar sesión evento desconectado.
protected void ReleaseClOrdIdOfEndedOrder(TSubscription[] subscriptions, ExecutionMessage execMsg)
baseProtocolServer.ReleaseClOrdIdOfEndedOrder(subscriptions, execMsg)
Gives a client order id back once the order holding it has ended, so the client may number its next order the same way.
- subscriptions
- The subscriptions the report is going to.
- execMsg
- The execution report.
protected void ReleaseOrderTransactionId(TClientSession session, string clientCode, long transactionId)
baseProtocolServer.ReleaseOrderTransactionId(session, clientCode, transactionId)
Gives back the number an order holds, once the order has ended or its command did not go on after all.
- session
- A session of the client.
- clientCode
- The client an order of a service login belongs to; ignored for any other login.
- transactionId
- The transaction the order travels under.
public bool RemoveSubscription(ServerSubscription subscription)
result = baseProtocolServer.RemoveSubscription(subscription)
Retire la suscripción.
- subscription
- Suscripción.
Devuelve: si se encontró la suscripción, de lo contrario.
protected static string RequestIdOf(long transactionId)
result = BaseProtocolServer.RequestIdOf(transactionId)
The id a transaction goes out under, or for none.
- transactionId
- The transaction id.
Devuelve: The id as text, or when there is no id.
public bool Resume(ServerSubscription subscription)
result = baseProtocolServer.Resume(subscription)
Reanuda la suscripción.
- subscription
- Suscripción.
Devuelve: si se encontró la suscripción, de lo contrario.
public void Resume(IMessageListenerSession session)
baseProtocolServer.Resume(session)
Continuación del período de sesiones.
- session
- Sesión.
public IAsyncEnumerable<ValueTuple<IMessageListenerSession, Message>> RunAsync(CancellationToken cancellationToken)
result = baseProtocolServer.RunAsync(cancellationToken)
Ejecute mensajes de procesamiento y de vuelta de mensajes salientes como IAsyncEnumerable. Abre el servidor al principio y cierra al final.
public override Task SaveAsync(SettingsStorage storage, CancellationToken cancellationToken)
result = baseProtocolServer.SaveAsync(storage, cancellationToken)
Save settings.
- storage
- Settings storage.
- cancellationToken
- CancellationToken
Devuelve: Task
protected abstract void ScheduleSessionWork(TClientSession session, ServerSubscription subscription, string requestId, Func<TClientSession, string, CancellationToken, ValueTask<bool>> handler)
baseProtocolServer.ScheduleSessionWork(session, subscription, requestId, handler)
Programar trabajo en la cola de salida de una sesión de cliente.
public virtual bool SendInMessage(IMessageListenerSession session, Message message)
result = baseProtocolServer.SendInMessage(session, message)
Send a message to one named session.
- session
- The session the message is for.
- message
- The message.
Devuelve: when it was taken for sending.
public virtual bool SendInMessage(Message message)
result = baseProtocolServer.SendInMessage(message)
Enviar mensaje entrante al servidor para procesar y enrutar a los clientes.
protected void StartServer(CancellationToken cancellationToken)
baseProtocolServer.StartServer(cancellationToken)
Iniciar el servidor: inicializar el estado, iniciar los oyentes y tareas de fondo.
protected static void StateConditionalOrderType(OrderReplaceMessage replace)
BaseProtocolServer.StateConditionalOrderType(replace)
Takes a replace carrying a condition for the replace of a conditional order, as a registration carrying one places one: a replace may leave its type unsaid.
- replace
- The replace as it was read.
protected void StopServer()
baseProtocolServer.StopServer()
Detén el servidor: cancela tareas, canales completos, estado claro.
public bool Suspend(ServerSubscription subscription)
result = baseProtocolServer.Suspend(subscription)
Suscripción suspendida.
- subscription
- Suscripción.
Devuelve: si se encontró la suscripción, de lo contrario.
public void Suspend(IMessageListenerSession session)
baseProtocolServer.Suspend(session)
Sesión suspendida.
- session
- Sesión.
protected static long ToTransactionId(string requestId)
result = BaseProtocolServer.ToTransactionId(requestId)
The transaction id a request runs under: the number its client gave it.
- requestId
- The id the client gave the request.
Devuelve: The transaction id.
protected Task<ValueTuple<string, long>> TryAuthorizeAsync(string login, string password, EndPoint remoteEndPoint, CancellationToken cancellationToken)
result = baseProtocolServer.TryAuthorizeAsync(login, password, remoteEndPoint, cancellationToken)
Check a client's credentials, honouring the login rate limiter.
- login
- The login the client offered.
- password
- The password the client offered.
- remoteEndPoint
- Where the client connected from.
- cancellationToken
- CancellationToken
Devuelve: The session token and the broker user behind the login, or when the client is refused. A refusal carries no reason: rate limited, unknown login and wrong password are one answer, so nothing here tells a caller which half of the credentials it got right.
protected bool TryClaimOrderTransactionId(TClientSession session, string clientCode, string clOrdId, long? orderId, long transactionId, Exception refusal)
result = baseProtocolServer.TryClaimOrderTransactionId(session, clientCode, clOrdId, orderId, transactionId, refusal)
Claims the ClOrdId an order command opens under, which is also the transaction id it runs on.
- session
- Client session.
- clientCode
- The client the order is for, which a service login names.
- clOrdId
- The id the client gave the order.
- orderId
- The id the order is written down under, or when the command names none.
- transactionId
- The transaction id the order runs on.
- refusal
- Why the order is refused, when it is.
Devuelve: when the order may go on.
protected bool TryReadCancelTransactionId(TClientSession session, string clientCode, string clOrdId, long transactionId, Exception refusal)
result = baseProtocolServer.TryReadCancelTransactionId(session, clientCode, clOrdId, transactionId, refusal)
The transaction id a command that opens no order runs on: a cancel, a mass cancel, or a replace that names its order by the order's id alone.
- session
- Client session.
- clientCode
- The client the command is for, which a service login names.
- clOrdId
- The id the client gave the command.
- transactionId
- The transaction id the command runs on.
- refusal
- Why the command is refused, when it is.
Devuelve: when the command may go on.
protected static bool TryReadOrderTransactionId(string clOrdId, long transactionId, Exception refusal)
result = BaseProtocolServer.TryReadOrderTransactionId(clOrdId, transactionId, refusal)
The transaction id of the order a ClOrdId names.
- clOrdId
- The ClOrdId.
- transactionId
- The transaction id.
- refusal
- Why the ClOrdId is refused, when it is not a positive whole number.
Devuelve: when the ClOrdId is such a number.
protected static bool TryReadOrigTransactionId(string origClOrdId, long transactionId, Exception refusal)
result = BaseProtocolServer.TryReadOrigTransactionId(origClOrdId, transactionId, refusal)
The client's number of the order a cancel or a replace names, or zero when it names the order by the order's id alone.
- origClOrdId
- The OrigClOrdId the command carries.
- transactionId
- The order's number, or zero.
- refusal
- Why the command is refused, when it is.
Devuelve: when the command may go on.
protected bool TryTakeReplaceTransactionId(TClientSession session, string clientCode, string clOrdId, long? orderId, bool isMove, long transactionId, Exception refusal)
result = baseProtocolServer.TryTakeReplaceTransactionId(session, clientCode, clOrdId, orderId, isMove, transactionId, refusal)
The transaction id a replace runs on.
- session
- Client session.
- clientCode
- The client the replace is for, which a service login names.
- clOrdId
- The id the client gave the replace.
- orderId
- The id the order is written down under, or when the replace names none.
- isMove
- Whether the replace names the client's previous number of the order.
- transactionId
- The transaction id the replace runs on.
- refusal
- Why the replace is refused, when it is.
Devuelve: when the replace may go on.
protected static bool TryToTransactionId(string requestId, long transactionId)
result = BaseProtocolServer.TryToTransactionId(requestId, transactionId)
The transaction id a request names, when the id its client gave is a positive whole number.
- requestId
- The id the client gave the request.
- transactionId
- The transaction id.
Devuelve: when the id is such a number.
Eventos
public event Action<IMessageListenerSession> SessionConnected
baseProtocolServer.SessionConnected += handler
Evento conectado a la sesión.
public event Action<IMessageListenerSession> SessionDisconnected
baseProtocolServer.SessionDisconnected += handler
Sesión evento desconectado.
public event Action StateChanged
baseProtocolServer.StateChanged += handler
Acto de cambio de Estado.
public event Action<ServerSubscription> SubscriptionChanged
baseProtocolServer.SubscriptionChanged += handler
La suscripción al cliente cambió el evento.
Campos
protected readonly List<Task> _backgroundTasks
value = baseProtocolServer._backgroundTasks
Tareas de fondo (aceptar clientes, procesar mensajes, etc.).
protected readonly SynchronizedSet<ServerSubscription> _changedSubscriptions
value = baseProtocolServer._changedSubscriptions
Cambio de suscripciones pendientes de notificación.
protected readonly CachedSynchronizedDictionary<string, CachedSynchronizedList<TClientSession>> _clientSessions
value = baseProtocolServer._clientSessions
Sesiones de clientes agrupadas por clave de sesión (e.g. SenderCompId).
protected readonly Channel<ValueTuple<IMessageListenerSession, Message>> _incomingMessages
value = baseProtocolServer._incomingMessages
Canal de mensajes entrantes.
protected readonly Channel<ValueTuple<IMessageListenerSession, Message>> _outgoingMessages
value = baseProtocolServer._outgoingMessages
Canal de mensajes salientes (sesión + pares de mensajes).
protected readonly SessionSubscriptions<TSubscription, TClientSession> _subscriptions
value = baseProtocolServer._subscriptions
Titular de suscripción.