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}"); } }
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); } }