public void TestPacketSerialization() { var data = new ArtNetData(); var pollReply = new ArtPollReply { IP = IPAddress.Parse("127.0.0.1").GetAddressBytes(), Port = 0x1936, Mac = NetworkInterface.GetAllNetworkInterfaces() .Where(nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback) .Select(nic => nic.GetPhysicalAddress().GetAddressBytes()) .FirstOrDefault(), GoodInput = new byte[] { 0x08, 0x08, 0x08, 0x08 }, GoodOutput = new byte[] { 0x80, 0x80, 0x80, 0x80 }, PortTypes = new byte[] { 0xc0, 0xc0, 0xc0, 0xc0 }, ShortName = "ShortName Test", LongName = "Art.Net LongName Test", EstaManLo = 0, VersInfoH = 6, VersInfoL = 9, SubSwitch = 0, OemHi = 0, Oem = 0xFF, UbeaVersion = 0, Status1 = 0xd2, SwMacro = 0, SwRemote = 0, Style = StyleCodes.StNode, NumPortsHi = 0, NumPortsLo = 4, Status2 = 0x08, BindIp = IPAddress.Parse("127.0.0.1").GetAddressBytes(), SwIn = new byte[] { 0x01, 0x02, 0x03, 0x04 }, SwOut = new byte[] { 0x01, 0x02, 0x03, 0x04 }, GoodOutput2 = new byte[] { 0x80, 0x80, 0x80, 0x80 }, NodeReport = "NodeReport Test", Filler = new byte[168] }; data.Buffer = pollReply.ToArray(); var altPacket = ArtNetPacket.FromData(data); Assert.AreEqual(altPacket.OpCode, pollReply.OpCode); var pollReplyPacket = altPacket.Cast <ArtPollReply>(); Assert.AreEqual(pollReplyPacket.ShortName, pollReply.ShortName); Assert.AreEqual(pollReplyPacket.LongName, pollReply.LongName); Assert.AreEqual(pollReplyPacket.NodeReport, pollReply.NodeReport); Assert.Pass(); }
public static new ArtTodData FromData(ArtNetData data) { var stream = new MemoryStream(data.Buffer); var reader = new BinaryObjectReader(stream) { Position = 10 }; ArtTodData packet = reader.ReadObject <ArtTodData>(); packet.PacketData = data; return(packet); }
public void ReceiveArtNet() { try { var localPort = (EndPoint) new IPEndPoint(IPAddress.Any, Port); var recieveState = new ArtNetData(); BeginReceiveFrom(recieveState.Buffer, 0, recieveState.BufferSize, SocketFlags.None, ref localPort, new AsyncCallback(OnRecieve), recieveState); } catch (Exception ex) { UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs( new ApplicationException("An error ocurred while trying to start recieving ArtNet.", ex), false)); } }
public static ArtNetPacket FromData(ArtNetData data) { var stream = new MemoryStream(data.Buffer); var reader = new BinaryObjectReader(stream); byte[] id = reader.ReadBytes(8); OpCodes code = (OpCodes)reader.ReadInt16(); ArtNetPacket packet = new(code); packet.ID = id; packet.PacketData = data; return(packet); }
public static new ArtRdm FromData(ArtNetData data) { var stream = new MemoryStream(data.Buffer); var reader = new BinaryObjectReader(stream) { Position = 10 }; ArtRdm packet = reader.ReadObject <ArtRdm>(); packet.RdmPacket = reader.ReadBytes((int)(stream.Length - reader.Position)); packet.PacketData = data; return(packet); }
public static new ArtRdmSub FromData(ArtNetData data) { var stream = new MemoryStream(data.Buffer); var reader = new BinaryObjectReader(stream) { Position = 10 }; ArtRdmSub packet = reader.ReadObject <ArtRdmSub>(); packet.SubCount = (short)((packet.SubCount << 8) + (packet.SubCount >> 8)); packet.SubDevice = (short)((packet.SubDevice << 8) + (packet.SubDevice >> 8)); packet.Data = packet.Data.Reverse().ToArray(); packet.PacketData = data; return(packet); }
private void OnRecieve(IAsyncResult state) { EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); if (!open) { return; } try { ArtNetData recieveState = (ArtNetData)(state.AsyncState); if (recieveState == null) { // Packet was invalid continue receiving ReceiveArtNet(); } recieveState.DataLength = EndReceiveFrom(state, ref remoteEndPoint); // Protect against UDP loopback where we recieve our own packets. if (LocalEndPoint != remoteEndPoint && recieveState.Valid) { LastPacket = DateTime.Now; var packet = ArtNetPacket.FromData(recieveState); if (packet == null) { ReceiveArtNet(); } NewPacket?.Invoke(this, new NewPacketEventArgs <ArtNetPacket>((IPEndPoint)remoteEndPoint, packet)); } } catch (Exception ex) { UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, false)); } ReceiveArtNet(); }