SbeServer

StockSharp.Server.Sbe

Сервер SBE.

Наследует: BaseProtocolServer<ClientSbeSession, SbeServerSubscription, SbeServerSettings>

Конструкторы

SbeServer
public SbeServer(IAuthorization authorization, ITransactionIdStorage transactionIdStorage, string licenseFeatureId, DateTime componentTimestamp, IMessageConverter converter)
sbeServer = SbeServer(authorization, transactionIdStorage, licenseFeatureId, componentTimestamp, converter)

Инициализирует новый экземпляр SbeServer.

Свойства

Authorization
public IAuthorization Authorization { get; }
value = sbeServer.Authorization

Аутентификация клиента.

ComponentTimestamp
public DateTime ComponentTimestamp { get; }
value = sbeServer.ComponentTimestamp

Временная метка компонента.

Converter
public IMessageConverter Converter { get; }
value = sbeServer.Converter

Конвертер сообщений.

LicenseFeatureId
public string LicenseFeatureId { get; }
value = sbeServer.LicenseFeatureId

Лицензионный идентификатор.

SendOutHeartbeats
public bool SendOutHeartbeats { get; set; }
value = sbeServer.SendOutHeartbeats
sbeServer.SendOutHeartbeats = value

Отправляйте сердцебиение через исходящий канал сообщений.

TransactionIdStorage
public ITransactionIdStorage TransactionIdStorage { get; }
value = sbeServer.TransactionIdStorage

Методы

ConfigureAcceptedSocket
private void ConfigureAcceptedSocket(TcpClient client)
sbeServer.ConfigureAcceptedSocket(client)

Примените TCP KeepAlive к принятому клиентскому сокету. Зонды поддержания активности поддерживают активность записей потока NAT/брандмауэра и быстро обнаруживают мертвые узлы.

CreateSubscription
protected override SbeServerSubscription CreateSubscription(ClientSbeSession session, string requestId, ServerSubscription subscription, MessageTypes type)
result = sbeServer.CreateSubscription(session, requestId, subscription, type)
GetSessionKey
protected override string GetSessionKey(ClientSbeSession session)
result = sbeServer.GetSessionKey(session)
IsStubSubscription
protected override bool IsStubSubscription(SbeServerSubscription subscription)
result = sbeServer.IsStubSubscription(subscription)
NextResponseId
private static string NextResponseId()
result = SbeServer.NextResponseId()

Создайте уникальный идентификатор ответа, который НЕ загрязняет TransactionIdStorage. Предотвращает конфликт между идентификаторами ответов, сгенерированными сервером, и идентификаторами ответов mdReqIds, предоставленными клиентом.

OnClearListenerState
protected override void OnClearListenerState()
sbeServer.OnClearListenerState()

Очистить состояние прослушивателя для конкретного протокола (остановить прослушиватели и т. д.).

OnProcess
private IAsyncEnumerable<Message> OnProcess(ClientSbeSession session, ushort templateId, byte[] payload, CancellationToken cancellationToken)
result = sbeServer.OnProcess(session, templateId, payload, cancellationToken)

Отправьте входящее сообщение SBE templateId.

OnStartListeners
protected override void OnStartListeners(CancellationToken cancellationToken)
sbeServer.OnStartListeners(cancellationToken)

Запустите прослушиватели для конкретного протокола (TCP и т. д.). Добавляйте задачи в _backgroundTasks.

ProcessInMessage
protected override void ProcessInMessage(Message message, CancellationToken cancellationToken)
sbeServer.ProcessInMessage(message, cancellationToken)

Обработать входящее сообщение и направить его подписанным клиентам.

ProcessLogout
protected override void ProcessLogout(ClientSbeSession session)
sbeServer.ProcessLogout(session)
ReadFramedMessageAsync
private static Task<byte[]> ReadFramedMessageAsync(Stream stream, CancellationToken cancellationToken)
result = SbeServer.ReadFramedMessageAsync(stream, cancellationToken)

Формирование SBE: чтение [длина 4 байта][полезная нагрузка].

ScheduleSessionWork
protected override void ScheduleSessionWork(ClientSbeSession session, ServerSubscription subscription, string requestId, Func<ClientSbeSession, string, CancellationToken, ValueTask<bool>> handler)
sbeServer.ScheduleSessionWork(session, subscription, requestId, handler)
WriteFramedAsync
private ValueTask<bool> WriteFramedAsync(ClientSbeSession session, Func<SbeRecordSerializer, byte[], int> serialize, CancellationToken cancellationToken)
result = sbeServer.WriteFramedAsync(session, serialize, cancellationToken)

Центральный исходящий путь записи: сериализуйте сообщение в буфер записи сеанса (растет и повторяет попытку при переполнении, чтобы не отбрасывались большие кадры), затем кадрируете и отправляете его. Буфер может быть перераспределен с помощью Int32}), поэтому после сериализации он пересчитывается.