private void ProcessSensors() { ISensorBase[] toProcess; lock (sensorSync) { if (sensors.Length > 0) { toProcess = new ISensorBase[sensors.Length]; Array.Copy(sensors, toProcess, sensors.Length); } else { return; } } // process all available sensors // and relay captured data for (int i = 0; i < toProcess.Length; i++) { if (toProcess[i] == null || !toProcess[i].Capturing) { continue; } SensorDataPacket packet = toProcess[i].Process(-1); if (packet == null) { continue; } SensorObservable observable; lock (observableSync) { observable = observables[i]; } observable.OnDataAvailable(packet); } }
/// <summary> /// Reports data availablility of the observed sensor. /// </summary> /// <param name="args">Sensor and data information.</param> public void OnDataAvailable(SensorDataPacket args) { lock (observerSync) { foreach (var observer in observers) { observer.OnDataAvailable(args); } } }