Skip to content

Commit 95a3fc0

Browse files
committed
artnet poll reply system
1 parent d7a6db7 commit 95a3fc0

3 files changed

Lines changed: 135 additions & 0 deletions

File tree

Assets/Scenes/SampleScene.unity

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7359,6 +7359,66 @@ PrefabInstance:
73597359
propertyPath: m_Name
73607360
value: ArtNet
73617361
objectReference: {fileID: 0}
7362+
- target: {fileID: 2204995358144401484, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7363+
propertyPath: ArtNetReceiver
7364+
value:
7365+
objectReference: {fileID: 1946927779}
7366+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7367+
propertyPath: _onReceivedDmxEvent.m_PersistentCalls.m_Calls.Array.size
7368+
value: 1
7369+
objectReference: {fileID: 0}
7370+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7371+
propertyPath: _onReceivedPollEvent.m_PersistentCalls.m_Calls.Array.size
7372+
value: 1
7373+
objectReference: {fileID: 0}
7374+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7375+
propertyPath: _onReceivedDmxEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
7376+
value: 0
7377+
objectReference: {fileID: 0}
7378+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7379+
propertyPath: _onReceivedDmxEvent.m_PersistentCalls.m_Calls.Array.data[1].m_Mode
7380+
value: 1
7381+
objectReference: {fileID: 0}
7382+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7383+
propertyPath: _onReceivedPollEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
7384+
value: 0
7385+
objectReference: {fileID: 0}
7386+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7387+
propertyPath: _onReceivedDmxEvent.m_PersistentCalls.m_Calls.Array.data[1].m_Target
7388+
value:
7389+
objectReference: {fileID: 134366298}
7390+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7391+
propertyPath: _onReceivedPollEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Target
7392+
value:
7393+
objectReference: {fileID: 134366298}
7394+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7395+
propertyPath: _onReceivedDmxEvent.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
7396+
value: 2
7397+
objectReference: {fileID: 0}
7398+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7399+
propertyPath: _onReceivedDmxEvent.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
7400+
value: ReceivedDmxPacket
7401+
objectReference: {fileID: 0}
7402+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7403+
propertyPath: _onReceivedPollEvent.m_PersistentCalls.m_Calls.Array.data[0].m_CallState
7404+
value: 1
7405+
objectReference: {fileID: 0}
7406+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7407+
propertyPath: _onReceivedPollEvent.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
7408+
value: ReceivedPollPacket
7409+
objectReference: {fileID: 0}
7410+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7411+
propertyPath: _onReceivedDmxEvent.m_PersistentCalls.m_Calls.Array.data[1].m_TargetAssemblyTypeName
7412+
value: ArtNet.DmxManager, ArtNet
7413+
objectReference: {fileID: 0}
7414+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7415+
propertyPath: _onReceivedPollEvent.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
7416+
value: ArtNet.DmxManager, ArtNet
7417+
objectReference: {fileID: 0}
7418+
- target: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7419+
propertyPath: _onReceivedPollEvent.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
7420+
value: UnityEngine.Object, UnityEngine
7421+
objectReference: {fileID: 0}
73627422
m_RemovedComponents: []
73637423
m_RemovedGameObjects: []
73647424
m_AddedGameObjects: []
@@ -7596,6 +7656,17 @@ CanvasRenderer:
75967656
m_PrefabAsset: {fileID: 0}
75977657
m_GameObject: {fileID: 1842672642}
75987658
m_CullTransparentMesh: 1
7659+
--- !u!114 &1946927779 stripped
7660+
MonoBehaviour:
7661+
m_CorrespondingSourceObject: {fileID: 2204995358144401486, guid: e82cf9e9307c20548bacccf3e2dc2504, type: 3}
7662+
m_PrefabInstance: {fileID: 1805663751}
7663+
m_PrefabAsset: {fileID: 0}
7664+
m_GameObject: {fileID: 0}
7665+
m_Enabled: 1
7666+
m_EditorHideFlags: 0
7667+
m_Script: {fileID: 11500000, guid: a0dff173f61007e4ca57e8303fa9e17d, type: 3}
7668+
m_Name:
7669+
m_EditorClassIdentifier:
75997670
--- !u!1 &1949854965
76007671
GameObject:
76017672
m_ObjectHideFlags: 0

Packages/net.naoyakohda.artnet-unity@12078a5f801e/Runtime/Scripts/ArtNetReceiver.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ public void ChangePort(int port)
5252
UdpReceiver.ChangePort(port);
5353
}
5454

55+
public ushort Port => (ushort)UdpReceiver.Port;
56+
public IPAddress Address => UdpReceiver.Address;
57+
5558
public void ChangeIPAddress(IPAddress address)
5659
{
5760
ArtNetLogger.LogInfo("ArtNetReceiver", $"Changing IP Address from {UdpReceiver.Address} to {address}");

Packages/net.naoyakohda.artnet-unity@12078a5f801e/Runtime/Scripts/DmxManager.cs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
34
using System.Linq;
5+
using System.Net;
6+
using System.Net.Sockets;
47
using ArtNet.Devices;
8+
using ArtNet.IO;
59
using ArtNet.Packets;
610
using UnityEngine;
711

@@ -13,6 +17,9 @@ public class DmxManager : MonoBehaviour
1317
private Dictionary<ushort, byte[]> DmxDictionary { get; } = new();
1418
public Dictionary<ushort, IEnumerable<IDmxDevice>> DmxDevices { get; private set; }
1519

20+
public ArtNetReceiver ArtNetReceiver;
21+
private readonly Socket _socket = new(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
22+
1623
public void Update()
1724
{
1825
lock (_updatedUniverses)
@@ -66,5 +73,59 @@ public void ReceivedDmxPacket(ReceivedData<DmxPacket> receivedData)
6673
_updatedUniverses.Enqueue(universe);
6774
}
6875
}
76+
77+
public void ReceivedPollPacket(ReceivedData<PollPacket> receivedData)
78+
{
79+
var packet = receivedData.Packet;
80+
//unclear what flags and priority are for
81+
//Debug.Log(packet.Flags);
82+
//Debug.Log(packet.Priority);
83+
84+
byte status = 0b11110000;
85+
86+
//construct a response packet
87+
var responsePacket = new PollReplyPacket
88+
{
89+
IpAddress = ArtNetReceiver.Address.GetAddressBytes(),
90+
Port = ArtNetReceiver.Port,
91+
//OUR version number. Just report 69 because its funny
92+
VersionInfo = 42069,
93+
NetSwitch = 0,
94+
SubSwitch = 0,
95+
Oem = 0,
96+
UbeaVersion = 0,
97+
Status1 = status,
98+
EstaCode = 0,
99+
ShortName = "HNode",
100+
LongName = "HNode by Happyrobot33",
101+
NodeReport = "All systems functional (TODO: Add more here lol)",
102+
NumPorts = ushort.MaxValue,
103+
PortTypes = new byte[] { 0b0100101, 0b0100101, 0b0100101, 0b0100101 },
104+
InputStatus = new byte[] { 0b100000,0b100000,0b100000,0b100000},
105+
OutputStatus = new byte[] { 0b100000,0b100000,0b100000,0b100000},
106+
InputSubSwitch = new byte[] { 0, 0, 0, 0 },
107+
OutputSubSwitch = new byte[] { 0, 0, 0,0 },
108+
SwVideo = 0,
109+
SwMacro = 0,
110+
SwRemote = 0,
111+
Spares = new byte[3],
112+
Style = 0,
113+
MacAddress = new byte[6],
114+
BindIpAddress = new byte[4],
115+
BindIndex = 0,
116+
};
117+
118+
//send this over the network to the current port and broadcast address
119+
var stream = new MemoryStream();
120+
var writer = new ArtNetWriter(stream);
121+
writer.Write(responsePacket.ToByteArray());
122+
123+
writer.Flush();
124+
125+
//send over udp directly back to the requesting endpoint
126+
//the port SHOULD change because polls actually do move with the port changing
127+
Debug.Log($"Responding to poll from: {receivedData.RemoteEp}");
128+
_socket.SendTo(stream.ToArray(), receivedData.RemoteEp);
129+
}
69130
}
70131
}

0 commit comments

Comments
 (0)