Table of Contents

WebSocket Client

When developing a connector for a number of exchanges, an important component is the WebSocket client, which provides real-time data retrieval. In StockSharp, for this purpose, a SocketClient class is often created when developing a connector, built on the basis of WebSocketClient.

WebSocketClient Features

WebSocketClient is a system class developed for automatic reconnection in case of a WebSocket connection loss. Its source code is available in the Ecng repository.

SocketClient Structure

SocketClient usually includes the following key elements:

  1. Constructor
  • Initializes the base WebSocketClient
  • Sets up event handlers
  1. Connection and disconnection methods
  • Connect / ConnectAsync
  • Disconnect
  1. Subscription methods for different types of data
  • For example, SubscribeTrades, SubscribeOrderBook
  1. Unsubscription methods for data
  • Corresponding unsubscription methods for each type of subscription
  1. Event handlers
  • For handling different types of incoming messages
  1. Helper methods
  • For forming subscription/unsubscription messages
  • For processing received data
class SocketClient : BaseLogReceiver
{
	private readonly WebSocketClient _client;
	private readonly Authenticator _authenticator;

	// Events for different types of data
	public event Action<Heartbeat> HeartbeatReceived;
	public event Action<Ticker> TickerReceived;
	public event Action<Trade> TradeReceived;
	public event Action<string, string, IEnumerable<OrderBookChange>> OrderBookReceived;
	public event Action<Order> OrderReceived;
	public event Action<Exception> Error;
	public event Action Connected;
	public event Action<bool> Disconnected;

	public SocketClient(Authenticator authenticator, int reconnectAttempts)
	{
		_authenticator = authenticator;
		_client = new WebSocketClient(/* parameters */);
		_client.ReconnectAttempts = reconnectAttempts;
	}

	public ValueTask Connect(CancellationToken cancellationToken)
	{
		// Connection logic
	}

	public void Disconnect()
	{
		// Disconnection logic
	}

	public ValueTask SubscribeTicker(string symbol, CancellationToken cancellationToken)
	{
		// Ticker subscription logic
	}

	public ValueTask UnSubscribeTicker(string symbol, CancellationToken cancellationToken)
	{
		// Ticker unsubscription logic
	}

	// Similar methods for other types of subscriptions (trades, order book, etc.)

	private void OnProcess(dynamic obj)
	{
		// Processing incoming messages
	}

	// Helper methods
}

Implementation Recommendations

  • Adapt the SocketClient structure to the specific exchange, taking into account the specifics of its API.
  • Use asynchronous methods for efficient work with WebSocket.
  • Implement handling of different types of messages from the exchange.
  • Ensure proper error handling and reconnection upon connection loss.

Remember that the specific implementation may differ depending on the requirements and specifics of the API of a particular exchange.