예제 #1
0
 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();
             }
         }
     }
 }
예제 #2
0
    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);
                }
            }
        }
    }
예제 #3
0
 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();
             }
         }
     }
 }
예제 #4
0
        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);
                    }
                }
            }
        }