客户端已订阅x /#主题。有可能在主题x / start和x / stop中接收消息,并且根据主题,它会执行操作。我不知道如何识别开始或停止主题中的内容。
在当前代码中,我在JSON中发送“操作”键:“开始”或“停止”。我想删除此密钥,并使用上面所述的格式,以标识主题。
他们认为需要任何进一步的信息,请要求我编辑该帖子!
JDK 8
代码:
private MqttCallback callback = new MqttCallback() {
public void connectionLost(Throwable throwable) {
try {
connect();
} catch (MqttException e) {
e.printStackTrace();
}
}
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
String messageReceived = new String(mqttMessage.getPayload());
actionPerformed(messageReceived);
}
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
};
private void actionPerformed(String message) throws IOException {
ClientDTO clientDTO = new ObjectMapper().readValue(message, ClientDTO.class);
if (clientDTO.getAction().equalsIgnoreCase("start")) {
startView(clientDTO);
} else if (clientDTO.getAction().equalsIgnoreCase("stop")) {
stopView();
}
}
public void connect() throws MqttException {
MqttConnectOptions options = new MqttConnectOptions();
options.setUserName("a_nice_username");
options.setPassword("a_cool_password".toCharArray());
options.setAutomaticReconnect(true);
MqttClient client = new MqttClient("someaddress", MqttClient.generateClientId());
client.setCallback(callback);
try {
client.connect(options);
client.subscribe(topic);
TaskbarIcon.alteraIconeOnline();
} catch (Exception e) {
TaskbarIcon.alteraIconeOffline();
}
}
public void tipoConexao(int tipoConex) throws IOException {
switch (tipoConex) {
case 0:
topic += "/operador/" + getIdReceived() + "/#";
System.out.println(topic);
break;
//etc
}
答案 0 :(得分:4)
此方法中的s
是主题:public void messageArrived(String s, MqttMessage mqttMessage)
here有据可查:
已到达邮件
void messageArrived(java.lang.String主题,MqttMessage消息)抛出java.lang.Exception
从服务器收到消息时将调用此方法。
此方法由MQTT客户端同步调用。在此方法之前,不会将确认发送回服务器 干净地返回。
如果此方法的实现引发异常,则客户端将关闭。下次重新连接客户端时,任何 服务器将重新传送QoS 1或2消息。
在运行此方法的实现时到达的其他任何消息,将在内存中累积,然后进行备份 在网络上。
如果应用程序需要保留数据,则应确保在从此方法返回之前(如之后)保留数据 从此方法返回的消息被认为是 已交付,并且无法复制。
可以在此回调的实现中发送新消息(例如,对此消息的响应),但是 实现一定不能断开客户端的连接,因为那样会 无法发送对正在处理的消息的确认, 就会发生死锁。
参数:
topic -消息中主题的名称发布至
消息-实际消息。
投掷:
java.lang.Exception -如果发生终端错误,应关闭客户端。