public async Task Send(BitmexWebsocketChannel toChannel, MultiplexingMessageBase multiplexingMessage) { var message = new List <object> { (int)multiplexingMessage.MessageType, toChannel.ChannelId, toChannel.ChannelName }; if (multiplexingMessage.Payload != null) { message.Add(multiplexingMessage.Payload); } var serialized = BitmexJsonSerializer.Serialize(message); try { await _communicator.Send(serialized).ConfigureAwait(false); } catch (Exception e) { Log.Error(e, L($"Exception while sending message '{serialized}'. Error: {e.Message}")); throw; } }
/// <summary> /// Creates a channel. /// </summary> /// <param name="channelName">Name of the channel.</param> /// <returns></returns> /// <exception cref="BitmexException">Couldn't add the channel with Id = {channel.ChannelId}.</exception> public async Task <BitmexWebsocketChannel> CreateChannel(string channelName) { var channel = new BitmexWebsocketChannel(GetNonExistentChannelId(), channelName); if (!_channels.TryAdd(channel.ChannelId, channel)) { Log.Error($"Exception while creating a channel with Id = {channel.ChannelId}"); throw new BitmexException($"Couldn't add the channel with Id = {channel.ChannelId}."); } await Send(channel, new MultiplexingMessageBase { MessageType = MultiplexingMessageType.Subscribe }); channelSubject.OnNext(channel); return(channel); }