Files
picar/DecisionSystem/messages.py
2019-01-27 23:41:29 +10:30

91 lines
1.9 KiB
Python

import umsgpack
import uuid
class Message:
_type = None
def __init__(self, sender = "", data = {}):
self._sender = sender
self._data = data
@property
def sender(self):
return self._sender
@sender.setter
def sender(self, value):
self._sender = value
@property
def data(self):
return self._data
# I love using keywords...
@property
def type(self):
return self._type
@type.setter
def type(self, value):
self._type = value
def serialise(self):
return umsgpack.packb({"type":self.type, "sender": self.sender, "data": self.data})
# SHould make this static in Message class.
def deserialise(obj):
"""
Deserialises a given messagepack object into a Message.
"""
m = Message()
unpacked = umsgpack.unpackb(obj)
print('Unpacked Object')
print(unpacked)
m.type = unpacked["type"]
m._sender = unpacked["sender"]
m._data = unpacked["data"]
return m
class RequestLeader(Message):
_type = "RequestLeader"
class ProposeMessage(Message):
_type = "Propose"
class ElectionVote(Message):
_type = "Elect"
class Commit(Message):
_type = "Commit"
class ConnectSwarm(Message):
_type = "connect"
class RequestVote(Message):
_type = "reqvote"
class ConnectResponse(Message):
_type = "accepted"
class VoterWill(Message):
_type = "disconnectedvoter"
class CommanderWill(Message):
_type = "disconnectedcommander"
class SubmitVote(Message):
_type = "vote"
def __init__(self, vote = None, sender = "", data = {}):
Message.__init__(self, sender, data)
self._data["vote"] = vote
@property
def vote(self):
return self._data["vote"]
@vote.setter
def vote(self, value):
self._data["vote"] = value
class GetSwarmParticipants(Message):
_type = "listening"