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; }