@GrabResolver(name='Paho', root='https://repo.eclipse.org/content/repositories/paho-releases/') @Grab(group='org.eclipse.paho', module='org.eclipse.paho.client.mqttv3', version='1.0.1', ext='jar') import org.eclipse.paho.client.mqttv3.MqttClient import org.eclipse.paho.client.mqttv3.MqttMessage import org.eclipse.paho.client.mqttv3.MqttException import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence String host = args[0] String tmpDir = System.getProperty("java.io.tmpdir") MqttDefaultFilePersistence dataStore1 = new MqttDefaultFilePersistence(tmpDir + "/client1") MqttClient client1 = new MqttClient("tcp://${host}:1883", "ConnectedClient", dataStore1) client1.connect() println "Client1 connected" sleep(3000) //now connect a second client but with the same ID MqttDefaultFilePersistence dataStore2 = new MqttDefaultFilePersistence(tmpDir + "/client2") MqttClient client2 = new MqttClient("tcp://${host}:1883", "ConnectedClient", dataStore2) client2.connect() println "Client2 connected" try { client1.subscribe("topic", 2) println "BAD! Client1 subscribed to topic but its session has to be dropped out by client2" } catch (Exception ex) { println "Ok, client1 has been dropped out" } sleep(3000) //now connect a second client but with the same ID MqttDefaultFilePersistence dataStorePublisher = new MqttDefaultFilePersistence(tmpDir + "/publisher") MqttClient publisher = new MqttClient("tcp://${host}:1883", "Publisher", dataStorePublisher) publisher.connect() println "publisher connected" client2.subscribe("topic", 2) println "Client2 subscribed to topic" sleep(3000) print "Publisher is going to publish.." publisher.publish('topic', 'Hello world!!'.bytes, 2, false) println "Ok mate, done!" client1.disconnect() println "Client1 disconnected" client2.disconnect() println "Client2 disconnected" publisher.disconnect() println "publisher disconnected"