test_offline.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import paho_mqtt3a as mqttv3, time, random
  2. import contextlib
  3. print dir(mqttv3)
  4. hostname = "localhost"
  5. clientid = "myclientid"
  6. topic = "test2_topic"
  7. def deliveryComplete(context, msgid):
  8. print "deliveryComplete", msgid
  9. def connectionLost(context, cause):
  10. print "connectionLost", cause
  11. client = context
  12. responseOptions = {"context": context, "onSuccess": onSuccess, "onFailure" : onFailure}
  13. print "rc from publish while disconnected is", mqttv3.send(client, topic, "message while disconnected", 2, 0, responseOptions)
  14. def messageArrived(context, topicName, message):
  15. print "messageArrived", message
  16. #print "clientid", context
  17. #print "topicName", topicName
  18. return 1
  19. def connected(context, cause):
  20. print "connected", cause
  21. def onSuccess(context, successData):
  22. print "onSuccess for", context["clientid"], context["state"], successData
  23. responseOptions = {"context": context, "onSuccess": onSuccess, "onFailure" : onFailure}
  24. if context["state"] == "connecting":
  25. context["state"] = "subscribing"
  26. print "rc from subscribe is", mqttv3.subscribe(client, topic, 2, responseOptions)
  27. elif context["state"] == "subscribing":
  28. context["state"] = "publishing qos 0"
  29. print "rc from publish is", mqttv3.send(client, topic, "a QoS 0 message", 0, 0, responseOptions)
  30. elif context["state"] == "publishing qos 0":
  31. context["state"] = "publishing qos 1"
  32. print "rc from publish is", mqttv3.send(client, topic, "a QoS 1 message", 1, 0, responseOptions)
  33. elif context["state"] == "publishing qos 1":
  34. context["state"] = "publishing qos 2"
  35. print "rc from publish is", mqttv3.send(client, topic, "a QoS 2 message", 2, 0, responseOptions)
  36. elif context["state"] == "publishing qos 2":
  37. context["state"] = "finished"
  38. print "leaving onSuccess"
  39. def onFailure(context, failureData):
  40. print "onFailure for", context["clientid"]
  41. context["state"] = "finished"
  42. noclients = 1
  43. myclientid = None
  44. clients = []
  45. for i in range(noclients):
  46. myclientid = clientid+str(i)
  47. rc, client = mqttv3.create("tcp://"+hostname+":1883", myclientid, mqttv3.PERSISTENCE_DEFAULT, {"sendWhileDisconnected" : 1})
  48. #print "client is", hex(client)
  49. print "rc from create is", rc
  50. print "rc from setcallbacks is", mqttv3.setcallbacks(client, client, connectionLost, messageArrived, deliveryComplete)
  51. print "rc from setconnected is", mqttv3.setconnected(client, client, connected)
  52. context = {"client" : client, "clientid" : clientid, "state" : "connecting"}
  53. print "rc from connect is", mqttv3.connect(client, {"cleansession" : 0, "automaticReconnect": 1, "context": context, "onSuccess": onSuccess, "onFailure": onFailure})
  54. clients.append(context)
  55. while [x for x in clients if x["state"] != "finished"]:
  56. print [x for x in clients if x["state"] != "finished"]
  57. time.sleep(1)
  58. print "waiting for 60 seconds"
  59. time.sleep(60)
  60. for client in clients:
  61. if mqttv3.isConnected(client["client"]):
  62. print "rc from disconnect is", mqttv3.disconnect(client["client"], 1000)
  63. time.sleep(1)
  64. mqttv3.destroy(client["client"])
  65. print "after destroy"