예제 #1
0
        public static void SendUdpWrite(byte command1, byte command2, byte[] payload, byte flag = 17, byte group = 0,
                                        IPEndPoint ep = null, bool groupSend = false)
        {
            if (payload is null)
            {
                throw new ArgumentNullException(nameof(payload));
            }
            // If we don't specify an endpoint...talk to self
            ep ??= new IPEndPoint(IPAddress.Parse("0.0.0.0"), 8888);
            using var stream   = new MemoryStream();
            using var response = new BinaryWriter(stream);
            // Magic header
            response.Write((byte)0xFC);
            // Payload length
            response.Write((byte)(payload.Length + 5));
            // Group number
            response.Write(group);
            // Flag, should be 0x10 for subscription, 17 for everything else
            response.Write(flag);
            // Upper command
            response.Write(command1);
            // Lower command
            response.Write(command2);
            // Payload
            foreach (var b in payload)
            {
                response.Write(b);
            }
            var byteSend = stream.ToArray();

            // CRC
            response.Write(MsgUtils.CalculateCrc(byteSend));
            var byteString  = BitConverter.ToString(stream.ToArray());
            var bytesString = byteString.Split("-");
            var cmd         = bytesString[4] + bytesString[5];

            cmd = MsgUtils.Commands[cmd] ?? cmd;
            if (flag == 0x30 | groupSend)
            {
                SendUdpBroadcast(stream.ToArray());
                //if (cmd != "SUBSCRIBE" && cmd != "COLOR_DATA") LogUtil.Write($"localhost -> 255.255.255.255::{cmd} {flag}-{group}");
            }
            else
            {
                SendUdpUnicast(stream.ToArray(), ep);
                //if (cmd != "SUBSCRIBE" && cmd != "COLOR_DATA") LogUtil.Write($"localhost -> {ep.Address}::{cmd} {flag}-{group}");
            }
        }
예제 #2
0
        public static void SendUdpWrite(byte command1, byte command2, byte[] payload, byte flag = 17, byte group = 0,
                                        IPEndPoint ep = null)
        {
            if (payload is null)
            {
                throw new ArgumentNullException(nameof(payload));
            }
            // If we don't specify an endpoint...talk to self
            if (ep == null)
            {
                ep = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 8888);
            }

            using var stream   = new MemoryStream();
            using var response = new BinaryWriter(stream);
            // Magic header
            response.Write((byte)0xFC);
            // Payload length
            response.Write((byte)(payload.Length + 5));
            // Group number
            response.Write(group);
            // Flag, should be 0x10 for subscription, 17 for everything else
            response.Write(flag);
            // Upper command
            response.Write(command1);
            // Lower command
            response.Write(command2);
            // Payload
            foreach (var b in payload)
            {
                response.Write(b);
            }

            var byteSend = stream.ToArray();

            // CRC
            response.Write(MsgUtils.CalculateCrc(byteSend));
            if (flag == 0x30)
            {
                SendUdpBroadcast(stream.ToArray());
            }
            else
            {
                SendUdpUnicast(stream.ToArray(), ep);
            }
        }