private void SubscribeToTeleSubscriptionUpdates( string s, WebSocketIncomingMessage im, bool subscribing ) { if (!(im.Data is long id)) { return; } var sub = Bot.Subscriptions.FirstOrDefault(x => x.Id == id); if (sub is null) { Send(WebSocketMessageBuilder.Error($"{id} not found is subscriptions.")); return; } if (subscribing) { sub.Updated += SubOnUpdated; } else { sub.Updated -= SubOnUpdated; } }
protected virtual void HandleCommand(WebSocketIncomingMessage im) { if (AvailableCommands.Keys.Any(x => x == im)) { var kp = AvailableCommands.First(x => x.Key == im); kp.Value?.Invoke(kp.Key, im); } else { Send(WebSocketMessageBuilder.Error($"{im.Name} not a valid command.")); } }
protected virtual void HandleUnsubscribe(WebSocketIncomingMessage im) { if (AvailableSubscriptions.Keys.Any(x => x == im) && Subscriptions.Remove(im)) { var kp = AvailableSubscriptions.First(x => x.Key == im); kp.Value?.Invoke(kp.Key, im, false); Send(WebSocketMessageBuilder.Unsubscribe(kp.Key)); } else { Send(WebSocketMessageBuilder.Error($"{im.Name} doesn't exist or not subscribed.")); } }
public void BuildMessageTest() { var frameBuilder = new WebSocketFrameBuilder(ProxyConfig.MaxByteArrayLength); var data1 = new byte[] { 0b00000010, // notFIN, Binary 0b00000001, // noMask, 1bytes 0b11111111, // Payload }; frameBuilder.TryAddData(data1, 0, data1.Length, out var readSize1, out var frame1).IsTrue(); readSize1.Is(data1.Length); var data2 = new byte[] { 0b00000000, // notFIN, Continuation 0b00000001, // noMask, 1bytes 0b00000000, // Payload }; frameBuilder.TryAddData(data2, 0, data2.Length, out var readSize2, out var frame2).IsTrue(); readSize2.Is(data2.Length); var data3 = new byte[] { 0b10000000, // FIN, Continuation 0b00000001, // noMask, 1bytes 0b01010101, // Payload }; frameBuilder.TryAddData(data3, 0, data3.Length, out var readSize3, out var frame3).IsTrue(); readSize3.Is(data3.Length); var builder = new WebSocketMessageBuilder(null, ProxyConfig.MaxByteArrayLength); builder.TryCreateOrAdd(frame1, out _).IsFalse(); builder.TryCreateOrAdd(frame2, out _).IsFalse(); builder.TryCreateOrAdd(frame3, out var message).IsTrue(); message.HandshakeSession.IsNull(); message.Opcode.Is(WebSocketOpcode.Binary); message.PayloadData[0].Is(0b11111111); message.PayloadData[1].Is(0b00000000); message.PayloadData[2].Is(0b01010101); }