using System; using System.Text; using M2Mqtt; using M2Mqtt.Messages; using System.Text.Json; namespace RaspiControl { class Programm { private static MqttClient client; static void Main(string[] args) { try { client = new MqttClient("localhost"); client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived; string clientId = Guid.NewGuid().ToString(); client.Connect(clientId); client.Subscribe(new string[] { "APROG/REQUEST" }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE }); Joystick joystick = new Joystick(); joystick.JoystickChanged += Joystick_JoystickChanged; } catch (Exception ex) { Console.WriteLine(ex.Message); } } private static void Joystick_JoystickChanged(object sender, JoystickEventArgs e) { switch (e.Button) { case JoystickButton.None: break; case JoystickButton.Left: client.Publish(MqttConstants.MOBILE_NAV_TURN_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.TURN_ANGLE_LEFT}"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false); break; case JoystickButton.Right: client.Publish(MqttConstants.MOBILE_NAV_TURN_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.TURN_ANGLE_RIGHT}"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false); break; case JoystickButton.Up: client.Publish(MqttConstants.MOBILE_NAV_MOVE_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.SPEED_FORWARD}"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false); break; case JoystickButton.Down: client.Publish(MqttConstants.MOBILE_NAV_MOVE_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.SPEED_BACKWARD}"), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false); break; case JoystickButton.Center: client.Publish(MqttConstants.MOBILE_NAV_STOP_TOPIC, Encoding.UTF8.GetBytes($"{NavigationConstants.STOP}"), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); break; } } private static void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { Console.Write(e.Topic + "\n"); Console.Write(Encoding.UTF8.GetString(e.Message) + "\n"); Dictionary data = JsonSerializer.Deserialize>(e.Message); foreach(KeyValuePair entry in data) { Console.WriteLine(entry.Key+ ": " + entry.Value); } } } }