/// <summary> /// User Data Relay received event handler. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">Event args.</param> private void UserDataRelayReceived(object sender, UserDataRelayReceivedEventArgs e) { UserDataRelayMessage message = e.UserDataRelayMessage; // Add the message to the list. ReceivedMessages.Add(string.Format("[{0}] {1}", message.SourceInterface.GetDescription(), Encoding.Default.GetString(message.Data))); }
/// <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); } }