void IDispatcher.SetSignals(SignalsMessage pMessage) { MessageReceived = true; SyncContext.Post(async(object state) => { try { await Region.UpdateFromRun8Async(pMessage); } catch (CommunicationException) { LinkError = true; } }, null); }
void IDispatcher.SetSignals(SignalsMessage pMessage) { IDispatcher target; lock (this) { target = Target; } if (target != null) { target.SetSignals(pMessage); } }
/// <summary> /// Updates the indications of all controlled signals in this region. /// </summary> /// <param name="message">The received data.</param> public async Task UpdateFromRun8Async(SignalsMessage message) { SubArea subArea; if (SubAreas.TryGetValue((ushort)message.Route, out subArea)) { await subArea.UpdateFromRun8Async(message); } else if (squelchUnknownSubAreas.Add(message.Route)) { Debug.Print("Received update for unknown sub-area " + message.Route + "."); } }
/// <summary> /// Updates the indications of all controlled signals in this sub-area. /// </summary> /// <param name="message">The received data.</param> public async Task UpdateFromRun8Async(SignalsMessage message) { int count = Math.Min(ControlledSignals.Count, message.Signals.Count); Task[] tasks = new Task[count]; for (int i = 0; i != count; ++i) { tasks[i] = ControlledSignals[i].UpdateFromRun8Async(message.Signals[i]); } foreach (Task i in tasks) { await i; } if (ControlledSignals.Count != message.Signals.Count && !SignalCountMismatchPrinted) { Debug.Print("Sub-area " + ID + " was configured with " + ControlledSignals.Count + " controlled signals but Run8 claims it has " + message.Signals.Count + "."); SignalCountMismatchPrinted = true; } }
public virtual void SetSignals(SignalsMessage pMessage) { }