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:
DSTO\pivatom
2019-01-14 08:55:36 +10:30
parent 31367b1893
commit f101bf61bf

View File

@@ -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)