Пример #1
0
        public override void ReadData(CitpBinaryReader data)
        {
            base.ReadData(data);

            int count = data.ReadUInt16();

            for (int n = 0; n < count; n++)
            {
                FixtureChange change = new FixtureChange()
                {
                    FixtureId     = data.ReadUInt32(),
                    ChangedFields = (Modification)data.ReadByte(),
                    Patched       = data.ReadBoolean(),
                    DMXUniverse   = data.ReadByte(),
                    DMXAddress    = data.ReadUInt16(),
                    Unit          = data.ReadUcs2(),
                    Channel       = data.ReadUInt16(),
                    Circuit       = data.ReadUcs2(),
                    Note          = data.ReadUcs2(),
                    Position      = new Coordinate()
                    {
                        X = data.ReadSingle(), Y = data.ReadSingle(), Z = data.ReadSingle()
                    },
                    Angle = new Coordinate()
                    {
                        X = data.ReadSingle(), Y = data.ReadSingle(), Z = data.ReadSingle()
                    }
                };
                Fixtures.Add(change);
            }
        }
        private void DispatchUpdateChangeMessages()
        {
            if (_isDispatching)
            {
                return;
            }

            _isDispatching = true;
            foreach (var eventUpdate in _eventUpdates)
            {
                var updateStr = eventUpdate.Value ? "fixture" : "result";
                try
                {
                    LogInt.LogDebug($"Dispatching {updateStr} change [{_eventUpdates.Count}] for {eventUpdate.Key.SportEventId}. Updated={eventUpdate.Key.UpdateTime}");
                    if (eventUpdate.Value)
                    {
                        FixtureChange?.Invoke(this, eventUpdate.Key);
                    }
                    else
                    {
                        ResultChange?.Invoke(this, eventUpdate.Key);
                    }

                    _eventUpdates.TryRemove(eventUpdate.Key, out bool _);
                }
                catch (Exception ex)
                {
                    LogExec.LogWarning(ex, $"Error during user processing of event {updateStr} change message.");
                }
            }
            _isDispatching = false;
        }