/// <summary> /// MicroPython data received event handler. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">Event args.</param> private void MicroPythonDataReceived(object sender, MicroPythonDataReceivedEventArgs e) { string data = Encoding.Default.GetString(e.Data); // If the response is "OK", notify the lock to continue the process. if (data.Equals(MSG_ACK)) { ackReceived = true; lock (ackLock) { Monitor.Pulse(ackLock); } } else { // If the process is stopped, do nothing. if (!IsRunning) { return; } // Get the temperature and humidity from the received data. string[] dataArray = data.Split(SEPARATOR); if (dataArray.Length != 2) { return; } // Update the values of the temperature and humidity. TemperatureValue = dataArray[0]; HumidityValue = dataArray[1]; // Make the texts blink for a short time. ValuesColor = COLOR_GREEN; Task.Delay(200).Wait(); ValuesColor = COLOR_DEFAULT; } }
/// <summary> /// Notifies subscribed User Data Relay receive listeners that a new packet has been received in /// form of an <see cref="UserDataRelayMessage"/>. /// </summary> /// <param name="userDataRelayMessage">The User Data Relay message.</param> /// <seealso cref="UserDataRelayMessage"/> private void NotifyUserDataRelayReceived(UserDataRelayMessage userDataRelayMessage) { logger.InfoFormat(connectionInterface.ToString() + " User Data Relay received from interface {0} >> {1}.", userDataRelayMessage.SourceInterface.GetDescription(), HexUtils.PrettyHexString(userDataRelayMessage.Data)); // Notify generic event callbacks. if (UserDataRelayReceived != null) { try { lock (UserDataRelayReceived) { var handler = UserDataRelayReceived; if (handler != null) { var args = new UserDataRelayReceivedEventArgs(userDataRelayMessage); handler.GetInvocationList().AsParallel().ForAll((action) => { action.DynamicInvoke(this, args); }); } } } catch (Exception e) { logger.Error(e.Message, e); } } // Notify specific event callbacks depending on the interface. try { switch (userDataRelayMessage.SourceInterface) { case XBeeLocalInterface.BLUETOOTH: if (BluetoothDataReceived != null) { lock (BluetoothDataReceived) { var handler = BluetoothDataReceived; if (handler != null) { var args = new BluetoothDataReceivedEventArgs(userDataRelayMessage.Data); handler.GetInvocationList().AsParallel().ForAll((action) => { action.DynamicInvoke(this, args); }); } } } break; case XBeeLocalInterface.MICROPYTHON: if (MicroPythonDataReceived != null) { lock (MicroPythonDataReceived) { var handler = MicroPythonDataReceived; if (handler != null) { var args = new MicroPythonDataReceivedEventArgs(userDataRelayMessage.Data); handler.GetInvocationList().AsParallel().ForAll((action) => { action.DynamicInvoke(this, args); }); } } } break; case XBeeLocalInterface.SERIAL: if (SerialDataReceived != null) { lock (SerialDataReceived) { var handler = SerialDataReceived; if (handler != null) { var args = new SerialDataReceivedEventArgs(userDataRelayMessage.Data); handler.GetInvocationList().AsParallel().ForAll((action) => { action.DynamicInvoke(this, args); }); } } } break; default: break; } } catch (Exception e) { logger.Error(e.Message, e); } }