private static List <byte> SendActivateGatherFrame()
        {
            var list = new List <byte>();

            list.AddRange(_frameBuilder.Build(0));
            list.AddRange(_frameBuilder.Build(1));
            list.AddRange(_frameBuilder.Build(2));
            list.AddRange(_frameBuilder.Build(3));
            list.AddRange(_frameBuilder.Build(4));
            return(list);
        }
        private void SendActivateGatherFrame()
        {
            var list = new List <byte>();

            list.AddRange(_frameBuilder.Build(0));
            list.AddRange(_frameBuilder.Build(1));
            list.AddRange(_frameBuilder.Build(2));
            list.AddRange(_frameBuilder.Build(3));
            list.AddRange(_frameBuilder.Build(4));
            _bitkyTcpServer.SendDelayed(list.ToArray(), 200);
        }
Пример #3
0
        // No need for these to be public!
        public void SendSubscribeRequest(string channel)
        {
            FrameBuilder blder = new FrameBuilder();

            blder.WriteString(channel);
            socket.Send(blder.Build(FrameType.Subscribe));
        }
Пример #4
0
        public async Task <PostResult> PostMessage(string topic, byte[] data, QoS qos)
        {
            FrameBuilder bld = new FrameBuilder();

            bld.WriteByte((byte)(qos == QoS.BestEffort ? 0x00 : 0x01));
            // ToDo: Generate Frame Number to receive ACK.
            currentPacketId++;
            bld.WriteArray(BitConverter.GetBytes(currentPacketId));
            bld.WriteString(topic);
            bld.WriteMultiByte(data.Length);
            bld.WriteArray(data);

            if (qos == QoS.GuaranteedDelivery)
            {
                if (!syncSendInProcess.WaitOne(3000))
                {
                    return(PostResult.DispatchError);
                }
                waitForPacketId = currentPacketId;
            }

            socket.Send(bld.Build(FrameType.ChannelEvent));

            if (qos == QoS.GuaranteedDelivery)
            {
                var replyReceived = waitQosEvent.WaitOne(3000);

                syncSendInProcess.ReleaseMutex();
                return(replyReceived ? PostResult.Delivered
                                     : PostResult.DeliveryError);
            }

            return(PostResult.Dispatched);
        }
Пример #5
0
        public void SendPublishReply(UInt32 messageId, PublishStatus status)
        {
            FrameBuilder bld = new FrameBuilder();

            bld.WriteArray(BitConverter.GetBytes(messageId));
            bld.WriteByte((byte)status);
            socket.Send(bld.Build(FrameType.PubReply));
        }
Пример #6
0
        public virtual void SendUnsubReply(string channel)
        {
            FrameBuilder theBuilder = new FrameBuilder();

            theBuilder.WriteString(channel);

            socket.Send(theBuilder.Build(FrameType.UnsubReply));
        }
Пример #7
0
        public virtual void SendConnectionReply(ConnectionAttemptStatus status)
        {
            FrameBuilder theBuilder = new FrameBuilder();

            theBuilder.WriteByte((byte)status);

            socket.Send(theBuilder.Build(FrameType.ConReply));
        }
Пример #8
0
        public virtual void SendSubscribeReply(string channel, SubscribeStatus status)
        {
            FrameBuilder theBuilder = new FrameBuilder();

            theBuilder.WriteString(channel);
            theBuilder.WriteByte((byte)status);

            socket.Send(theBuilder.Build(FrameType.SubReply));
        }
Пример #9
0
        public void Subscribe_SendsSubscriptionRequest()
        {
            FrameBuilder blder = new FrameBuilder();

            blder.WriteString("Fnord");
            var theFrame = blder.Build(FrameType.Subscribe);

            client.SendSubscribeRequest("Fnord");
            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(theFrame))).MustHaveHappened();
        }
Пример #10
0
        private void UpdateColors(object?sender, DreamScreenClient.DeviceColorEventArgs e)
        {
            var colors = e.Colors;
            var frame  = _builder.Build(colors);

            Log.Debug("Update: DS");
            _splitter.Update(frame).ConfigureAwait(false);
            frame.Dispose();
            _cs.Counter.Tick("Dreamscreen");
        }
Пример #11
0
        public void SendConnectReply_ConRefused_SendsConnectionReply()
        {
            FrameBuilder bld = new FrameBuilder();

            bld.WriteByte((byte)ConnectionAttemptStatus.Refused);
            var expectedFrame = bld.Build(FrameType.ConReply);

            p.SendConnectionReply(ConnectionAttemptStatus.Refused);

            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(expectedFrame))).MustHaveHappened();
        }
Пример #12
0
        public void SendPublishReply_SendsMessageToPeer()
        {
            FrameBuilder bld = new FrameBuilder();

            bld.WriteArray(BitConverter.GetBytes((UInt32)112233));
            bld.WriteByte((byte)PublishStatus.Ack);
            var expected = bld.Build(FrameType.PubReply);

            p.SendPublishReply(112233, PublishStatus.Ack);
            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(expected))).MustHaveHappened();
        }
Пример #13
0
        public FireBallAnimation(Coord pt1, Coord pt2, Color color, string symbol = "*")
        {
            var line = new Line(pt1, pt2);

            var fB = new FrameBuilder();
            foreach (Coord pt in line)
            {
                fB.Clear();
                fB.AddFrameItem(symbol, color, pt);
                AddFrame(fB.Build());
            }
        }
Пример #14
0
        public void SendSubscribeReply_SendsSubscribeReply()
        {
            FrameBuilder bld = new FrameBuilder();

            bld.WriteString("Test");
            bld.WriteByte((byte)SubscribeStatus.Success);
            var expectedFrame = bld.Build(FrameType.SubReply);

            p.SendSubscribeReply("Test", SubscribeStatus.Success);

            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(expectedFrame))).MustHaveHappened();
        }
Пример #15
0
        private async Task FlashSector(object o, DynamicEventArgs dynamicEventArgs)
        {
            var sector = dynamicEventArgs.Arg0;
            // When building center, we only need the v and h sectors.
            var dims = new[]
            { _systemData.VSectors, _systemData.VSectors, _systemData.HSectors, _systemData.HSectors };
            var builder      = new FrameBuilder(dims, true, _systemData.UseCenter);
            var col          = Color.FromArgb(255, 255, 0, 0);
            var emptyColors  = ColorUtil.EmptyColors(_systemData.LedCount);
            var emptySectors = ColorUtil.EmptyColors(_systemData.SectorCount);

            emptySectors[sector - 1] = col;
            var tMat = builder.Build(emptySectors);

            foreach (var dev in _sDevices)
            {
                if (dev.Enable)
                {
                    dev.Testing = true;
                }
            }

            _splitter.DoSend = false;
            await _splitter.Update(tMat);

            var colors  = _splitter.GetColors().ToArray();
            var sectors = _splitter.GetSectors().ToArray();

            await SendColors(colors, sectors, 0, true);

            await Task.Delay(500);

            await SendColors(emptyColors, emptySectors, 0, true);

            await Task.Delay(500);

            await SendColors(colors, sectors, 0, true);

            await Task.Delay(1000);

            await SendColors(emptyColors, emptySectors, 0, true);

            foreach (var dev in _sDevices)
            {
                if (dev.Enable)
                {
                    dev.Testing = false;
                }
            }

            _splitter.DoSend = true;
        }
Пример #16
0
        public FireBallAnimation(Coord pt1, Coord pt2, Color color, string symbol = "*")
        {
            var line = new Line(pt1, pt2);

            var fB = new FrameBuilder();

            foreach (Coord pt in line)
            {
                fB.Clear();
                fB.AddFrameItem(symbol, color, pt);
                AddFrame(fB.Build());
            }
        }
Пример #17
0
        public void Publish_SendsPublishframe()
        {
            FrameBuilder blder = new FrameBuilder();

            blder.WriteByte((byte)QoS.BestEffort);
            blder.WriteArray(new byte[] { 0x00, 0x00, 0x00, 0x00 });
            blder.WriteString("What a great channel!");
            blder.WriteString("This is my data!");
            var theFrame = blder.Build(FrameType.Publish);

            client.PostMessage("What a great channel!", Encoding.UTF8.GetBytes("This is my data!"), QoS.BestEffort);
            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(theFrame))).MustHaveHappened();
        }
Пример #18
0
        public Task <PostResult> PostMessage(string topic, byte[] data, QoS qos)
        {
            FrameBuilder blder = new FrameBuilder();

            blder.WriteByte((byte)qos);
            // Empty packet id for now!
            blder.WriteArray(new byte[] { 0x00, 0x00, 0x00, 0x00 });
            blder.WriteString(topic);
            blder.WriteMultiByte(data.Length);
            blder.WriteArray(data);
            var theFrame = blder.Build(FrameType.Publish);

            socket.Send(theFrame);
            return(new Task <PostResult>(() => PostResult.Dispatched));
        }
Пример #19
0
        public void PostMessage_QosGuaranteedDelivery_Fails_If_No_Reply_Arrives()
        {
            FrameBuilder bld = new FrameBuilder();

            bld.WriteByte(0x01);    // Reply Flag
            bld.WriteArray(new byte[] { 0x01, 0x00, 0x00, 0x00 });
            bld.WriteString("Fnord");
            bld.WriteString("I am a payload");

            var expected = bld.Build(FrameType.ChannelEvent);

            var result = p.PostMessage("Fnord", Encoding.UTF8.GetBytes("I am a payload"), QoS.GuaranteedDelivery);

            result.Wait();
            Assert.Equal(PostResult.DeliveryError, result.Result);
        }
Пример #20
0
        public void CanExtract_FrameBuilderOutput()
        {
            FrameBuilder blder = new FrameBuilder();

            blder.WriteByte(0x44);     //Protocol Version 1
            // empty client id for now
            blder.WriteArray(new byte[16]);
            blder.WriteMultiByte(0);    // no secdata
            blder.WriteMultiByte(0);    // no lastwill channel
            blder.WriteMultiByte(0);    // no lastwill data

            var theFrame = blder.Build(FrameType.Connect);

            FrameExtractor fex = new FrameExtractor();

            Assert.True(fex.TryExtract(theFrame, 23).success == FrameExtractor.ResultState.Ok);
        }
Пример #21
0
        public void PostMessage_QosGuaranteedDelivery_SetsReplyRequestBit()
        {
            FrameBuilder bld = new FrameBuilder();

            bld.WriteByte(0x01);    // Reply Flag
            bld.WriteArray(new byte[] { 0x01, 0x00, 0x00, 0x00 });
            bld.WriteString("Fnord");
            bld.WriteString("I am a payload");

            var expected = bld.Build(FrameType.ChannelEvent);

            var result = p.PostMessage("Fnord", Encoding.UTF8.GetBytes("I am a payload"), QoS.GuaranteedDelivery);

            result.Wait();

            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(expected))).MustHaveHappened();
        }
Пример #22
0
        public void PostMessage_SendsMessageToPeer()
        {
            FrameBuilder bld = new FrameBuilder();

            bld.WriteByte(0x00);    // No Flags!
            bld.WriteArray(new byte[] { 0x01, 0x00, 0x00, 0x00 });
            bld.WriteString("Fnord");
            bld.WriteString("I am a payload");

            var expected = bld.Build(FrameType.ChannelEvent);

            var result = p.PostMessage("Fnord", Encoding.UTF8.GetBytes("I am a payload"), QoS.BestEffort);

            result.Wait();

            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(expected))).MustHaveHappened();
        }
Пример #23
0
        public void Connect_SendsConnectionRequest()
        {
            FrameBuilder blder = new FrameBuilder();

            blder.WriteByte(1);     //Protocol Version 1
            // empty client id for now
            blder.WriteArray(new byte[16]);
            blder.WriteMultiByte(0);    // no secdata
            blder.WriteMultiByte(0);    // no lastwill channel
            blder.WriteMultiByte(0);    // no lastwill data

            var theFrame = blder.Build(FrameType.Connect);

            client.Connect();

            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(theFrame))).MustHaveHappened();
        }
Пример #24
0
        public void Build_CreatesFrame()
        {
            builder.WriteArray(new byte[] { 0xAA, 0xBB });

            var frame = builder.Build(FrameType.Disconnect);

            var expectedFrame = new byte[]
            {
                0x02,
                0x03,
                0x0E,
                0xAA,
                0xBB,
                0x03
            };

            Assert.True(expectedFrame.SequenceEqual(frame));
        }
Пример #25
0
        public void Connect()
        {
            FrameBuilder builder = new FrameBuilder();

            // Build connection request.
            FrameBuilder blder = new FrameBuilder();

            blder.WriteByte(1);
            // empty client id for now
            blder.WriteArray(new byte[16]);

            blder.WriteMultiByte(0);    // no secdata
            blder.WriteMultiByte(0);    // no lastwill channel
            blder.WriteMultiByte(0);    // no lastwill data

            var theFrame = blder.Build(FrameType.Connect);

            socket.Send(theFrame);
        }
Пример #26
0
        public void ChannelEvent_Calls_EventCallback()
        {
            string chan = string.Empty;

            byte[] data = null;
            client.OnMessageReceived += (x, y) => { chan = x; data = y; };
            FrameBuilder blder = new FrameBuilder();

            blder.WriteByte(0x00);
            blder.WriteArray(new byte[] { 0x00, 0x00, 0x12, 0x13 });    // Message ID = 0x12 0x13
            blder.WriteString("YetAnotherChannel");
            blder.WriteString("TestData");
            var theFrame = blder.Build(FrameType.ChannelEvent);

            client.DataReceivedDelegate(theFrame, theFrame.Length);

            Assert.Equal(chan, "YetAnotherChannel");
            Assert.Equal("TestData", Encoding.UTF8.GetString(data));
        }
Пример #27
0
        public void ChannelEvent_SendsReply_If_Replybit_Is_Set()
        {
            FrameBuilder blder = new FrameBuilder();

            blder.WriteByte(0x01);
            blder.WriteArray(new byte[] { 0x00, 0x00, 0x12, 0x13 });    // Message ID = 0x12 0x13
            blder.WriteString("What a great channel!");
            blder.WriteString("This is my data!");
            var theFrame = blder.Build(FrameType.ChannelEvent);

            client.DataReceivedDelegate(theFrame, theFrame.Length);

            FrameBuilder replyBuilder = new FrameBuilder();

            replyBuilder.WriteArray(new byte[] { 0x00, 0x00, 0x12, 0x13 });
            replyBuilder.WriteByte(0x00);
            var replBuffer = replyBuilder.Build(FrameType.EventAck);

            A.CallTo(() => socket.Send(A <byte[]> .That.IsSameSequenceAs(replBuffer))).MustHaveHappened();
        }
Пример #28
0
        private void DispatchChannelEvent(Frame f)
        {
            var flagByte  = f.payload[0];
            var messageId = new byte[4];

            Array.Copy(f.payload, 1, messageId, 0, 4);
            // var clientId = ...
            var channel = Util.ExtractByteArray(f.payload, 5);
            var payload = Util.ExtractByteArray(f.payload, 5 + channel.numBytesUsed);

            OnMessageReceived(System.Text.Encoding.UTF8.GetString(channel.data), payload.data);

            if ((flagByte & 0x01) != 0x00)
            {
                FrameBuilder builder = new FrameBuilder();
                builder.WriteArray(messageId);
                builder.WriteByte((byte)ChannelEventResult.Ok);
                socket.Send(builder.Build(FrameType.EventAck));
            }
        }
Пример #29
0
 public GlowingAnimation(Atom atomToGlow, Color[] colors = null, int framePerColors = 7)
 {
     if(colors == null)
     {
         colors = new Color[]
         {
             Color.Yellow,
             Color.Blue,
         };
     }
     var symbol = atomToGlow.Symbol;
     var pt = atomToGlow.Position;
      
     var fB = new FrameBuilder();
     foreach (Color color in colors)
     {
         fB.Clear();
         fB.AddFrameItem(symbol, color, pt);
         AddFrame(fB.Build());
     }
 }
Пример #30
0
        public GlowingAnimation(Atom atomToGlow, Color[] colors = null, int framePerColors = 7)
        {
            if (colors == null)
            {
                colors = new Color[]
                {
                    Color.Yellow,
                    Color.Blue,
                };
            }
            var symbol = atomToGlow.Symbol;
            var pt     = atomToGlow.Position;

            var fB = new FrameBuilder();

            foreach (Color color in colors)
            {
                fB.Clear();
                fB.AddFrameItem(symbol, color, pt);
                AddFrame(fB.Build());
            }
        }
Пример #31
0
        public BlobsAnimation(List <Coord> centers,
                              int maxRadius,
                              Color color,
                              string symbol = "*")
        {
            var fB = new FrameBuilder();

            for (int r = 2; r < Math.Max(3, maxRadius); r++)
            {
                var circles = centers.Select(c => new SimpleCircle(c, r));
                fB.Clear();

                foreach (var circle in circles)
                {
                    foreach (Coord pt in circle)
                    {
                        fB.AddFrameItem(symbol, color, pt);
                    }
                }

                AddFrame(fB.Build());
            }
        }
Пример #32
0
        public BlobsAnimation(  List<Coord> centers, 
                                int maxRadius, 
                                Color color, 
                                string symbol = "*")
        {
            var fB = new FrameBuilder();

            for (int r = 2; r < Math.Max(3, maxRadius); r++)
            {
                var circles = centers.Select(c => new SimpleCircle(c, r));
                fB.Clear();

                foreach (var circle in circles)
                {
                    foreach (Coord pt in circle)
                    {
                        fB.AddFrameItem(symbol, color, pt);
                    }
                }

                AddFrame(fB.Build());
            }
        }