protected void Update() { lock (receivedDataQueue) while (0 < receivedDataQueue.Count) { onDataReceived.Invoke(receivedDataQueue.Dequeue()); } lock (updateUniverseQueue) { while (0 < updateUniverseQueue.Count) { var universe = updateUniverseQueue.Dequeue(); var events = dmxUniverseEvents.Where(pair => pair.universe == universe).Select(pair => pair.dmxEvent); var dmxData = universeDmxDataMap[universe]; foreach (var e in events) { e.Invoke(dmxData); } if (dmxMergeMode == DmxMergeMode.HTP) { DmxMerge.ClearForHTP(); } } } }
protected override void OnReadPacket(byte[] buffer, int length, IPEndPoint source) { var recieveState = new ArtNetRecieveData(); recieveState.buffer = buffer; recieveState.DataLength = length; var artNetPacket = ArtNetPacket.Create(recieveState); if (0 < receiveLimit && receivedDataQueue.Count < receiveLimit) { lock (receivedDataQueue) receivedDataQueue.Enqueue(artNetPacket); if (artNetPacket.OpCode == ArtNet.Enums.ArtNetOpCodes.Dmx) { var dmxPacket = (ArtNetDmxPacket)artNetPacket; var universe = dmxPacket.Universe; var dmxData = dmxPacket.DmxData; var mergedDmxData = DmxMerge.GetMergedDmxData(universe, dmxData, dmxMergeMode, source); if (!universeDmxDataMap.ContainsKey(universe)) { universeDmxDataMap.Add(universe, Enumerable.Repeat((byte)0, 512).ToArray()); } System.Buffer.BlockCopy(mergedDmxData, 0, universeDmxDataMap[universe], 0, mergedDmxData.Length); if (!updateUniverseQueue.Contains(universe)) { lock (updateUniverseQueue) updateUniverseQueue.Enqueue(universe); } } } }
protected void Update() { lock (receivedDataQueue) while (0 < receivedDataQueue.Count) { onDataReceived.Invoke(receivedDataQueue.Dequeue()); } lock (updateUniverseQueue) { while (0 < updateUniverseQueue.Count) { var universe = updateUniverseQueue.Dequeue(); var dmxData = _universeDmxDataMap[universe]; onDmxData.Invoke(universe, dmxData); if (dmxMergeMode == DmxMergeMode.HTP) { DmxMerge.ClearForHTP(); } } } }
protected override void OnReadPacket(byte[] buffer, int length, IPEndPoint source) { if (recieveState == null) { recieveState = new ArtNetRecieveData(); } recieveState.buffer = buffer; recieveState.DataLength = length; var artNetPacket = ArtNetPacket.Create(recieveState); if (0 < receiveLimit && receivedDataQueue.Count < receiveLimit) { lock (receivedDataQueue) receivedDataQueue.Enqueue(artNetPacket); if (artNetPacket.OpCode == ArtNet.Enums.ArtNetOpCodes.Dmx) { var dmxPacket = (ArtNetDmxPacket)artNetPacket; var universe = dmxPacket.Universe; var dmxData = dmxPacket.DmxData; var mergedDmxData = DmxMerge.GetMergedDmxData(universe, dmxData, dmxMergeMode); if (dmx == null) { dmx = new byte[512][]; } if (dmx[universe] == null) { dmx[universe] = new byte[512]; } System.Buffer.BlockCopy(mergedDmxData, 0, dmx[universe], 0, mergedDmxData.Length); if (!updateUniverseQueue.Contains(universe)) { lock (updateUniverseQueue) updateUniverseQueue.Enqueue(universe); } } } }