コード例 #1
0
        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;
            }
        }
コード例 #2
0
 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."));
     }
 }
コード例 #3
0
 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."));
     }
 }
コード例 #4
0
        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);
        }