Put custom on_vote message for voter to use their own method.
This maintains cohesion so the voter class is just focussed on how to vote, not also on how to collect the votes, which could be by a means such as an image or video sensor.
This commit is contained in:
@@ -2,10 +2,11 @@ import paho.mqtt.client as mqtt
|
|||||||
import umsgpack
|
import umsgpack
|
||||||
|
|
||||||
class BallotVoter:
|
class BallotVoter:
|
||||||
def __init__(self):
|
def __init__(self, on_vote):
|
||||||
self.client = mqtt.Client()
|
self.client = mqtt.Client()
|
||||||
# id is generated automatically.
|
# id is generated automatically.
|
||||||
self.client.connect('172.16.13.128')
|
self.client.connect('172.16.13.128')
|
||||||
|
self.on_vote = on_vote
|
||||||
|
|
||||||
def on_connect(self, client, userdata, flags, rc):
|
def on_connect(self, client, userdata, flags, rc):
|
||||||
print("Connected with result code " + str(rc))
|
print("Connected with result code " + str(rc))
|
||||||
@@ -19,19 +20,26 @@ class BallotVoter:
|
|||||||
# Leaving this until core centralised system is working.
|
# Leaving this until core centralised system is working.
|
||||||
#will_message = {"type": "UDisconnect"}
|
#will_message = {"type": "UDisconnect"}
|
||||||
|
|
||||||
# Send a connected message to let any commanders know that
|
self.send_connect()
|
||||||
# it is available.
|
|
||||||
self.client.publish("swarm/commander", "connect," + self.client._client_id)
|
|
||||||
|
|
||||||
def on_message(self, client, userdata, message):
|
def on_message(self, client, userdata, message):
|
||||||
messageDict = umsgpack.unpackb(message)
|
messageDict = umsgpack.unpackb(message)
|
||||||
if "type" in messageDict.keys:
|
if "type" in messageDict.keys:
|
||||||
# Ok message.
|
# Ok message.
|
||||||
if messageDict["type"] == "reqVote":
|
if messageDict["type"] == "reqVote":
|
||||||
submit_vote()
|
self.submit_vote()
|
||||||
|
if messageDict["type"] == "listening":
|
||||||
|
self.send_connect()
|
||||||
else:
|
else:
|
||||||
# Bad message.
|
# Bad message.
|
||||||
|
pass
|
||||||
|
|
||||||
def submit_vote(self):
|
def submit_vote(self):
|
||||||
self.client.publish('swarm1/')
|
binary = umsgpack.packb("type": "vote", "client": self.client._client_id, "vote": self.on_vote())
|
||||||
|
self.client.publish('swarm1/commander', binary)
|
||||||
|
|
||||||
|
def send_connect(self):
|
||||||
|
# Send a connected message to let any commanders know that
|
||||||
|
# it is available.
|
||||||
|
binary = umsgpack.packb({"type": "connect", "id": self.client._client_id})
|
||||||
|
self.client.publish("swarm/commander", binary)
|
||||||
Reference in New Issue
Block a user