コード例 #1
0
        /// <summary>
        /// Generates an IPRefreshPacket from a supplied byte stream and then raises the Refresh event;
        /// </summary>
        /// <param name="data"></param>
        private void ProcessRefreshPacket(byte[] data)
        {
            if (Refresh != null)
            {
                IPRefreshPacket pkt = null;
                try
                {
                    pkt = new IPRefreshPacket(data);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine($"{ex.GetType().Name} in Refresh Packet Constructor while processing: {ex.Message}");
                }

                try
                {
                    if (pkt != null)
                    {
                        lock (lockObject)
                        {
                            if (statusPacket.Revision == pkt.Revision && pkt.Revision > 0)
                            {
                                statusPacket.Revision   = 0;
                                statusPacket.UICmdCount = 0;
                            }
                        }
                        OnRefresh(pkt);
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine($"{ex.GetType().Name} in Refresh Packet Handler: {ex.Message}");
                }
            }
        }
        private void SpyderConsole_Refresh(IPRefreshPacket pkt)
        {
            var newSegments = pkt.GetPortRefresh();

            List <int>            keysOn    = new List <int>();
            List <int>            keysOff   = new List <int>();
            List <QuickKeyButton> quickKeys = new List <QuickKeyButton>();

            foreach (var newSegment in newSegments)
            {
                int segmentID = newSegment.Key;
                var segment   = newSegment.Value;

                var spyderKeys = segment.ColorButtons;
                var sm3Keys    = buttonMap.GetKeysFromSegmentID(segmentID);
                var mappings   = from spyderKey in spyderKeys
                                 join sm3Key in sm3Keys on spyderKey.ControlID equals sm3Key.Value.SpyderButtonIndex
                                 select new
                {
                    Sm3Index  = sm3Key.Key,
                    Mapping   = sm3Key.Value,
                    SpyderKey = spyderKey,
                    spyderKey.Text,
                    QuickKeyIndex = KeyConfig.GetQuickKeyIndex(sm3Key.Key)
                };

                var lampMappings = from mapping in mappings
                                   where mapping.QuickKeyIndex == -1
                                   select new
                {
                    Index  = mapping.Sm3Index,
                    LampOn = ShouldLampBeOn(mapping.SpyderKey)
                };

                var quickKeyMappings = from mapping in mappings
                                       where mapping.QuickKeyIndex != -1
                                       select new QuickKeyButton()
                {
                    Index = mapping.QuickKeyIndex,
                    Text  = GetQuickKeyText(segment, mapping.SpyderKey),
                    Color = GetQuickKeyColor(mapping.SpyderKey)
                };

                keysOn.AddRange(lampMappings.Where(key => key.LampOn).Select(key => key.Index));
                keysOff.AddRange(lampMappings.Where(key => !key.LampOn).Select(key => key.Index));
                quickKeys.AddRange(quickKeyMappings);
            }

            //Send lamp updates to SM3
            screenMasterConsole.SetLamps(true, keysOn.ToArray());
            screenMasterConsole.SetLamps(false, keysOff.ToArray());
            screenMasterConsole.SetQuickKeys(quickKeys.ToArray());
        }
        private void client_Refresh(IPRefreshPacket pkt)
        {
            var updatedSegmentData = pkt.GetPortRefresh();

            dispatcher.BeginInvoke((ThreadStart)(() =>
            {
                foreach (int port in updatedSegmentData.Keys)
                {
                    var segment = (Segment)updatedSegmentData[port];

                    //Need to force the segment type to update on the source module; it only returns 2x8 typed segments?
                    segment.Type = this.segments[port].SegmentType;
                    this.segments[port].CopyFrom(segment, LcdDisplayMode.Segment);
                }
            }));
        }
コード例 #4
0
 protected void OnRefresh(IPRefreshPacket packet)
 {
     Refresh?.Invoke(packet);
 }