-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathClientMessage.py
More file actions
56 lines (45 loc) · 1.53 KB
/
ClientMessage.py
File metadata and controls
56 lines (45 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import json
#message type
ACTION, MESSAGE, ADMIN = range(3)
#valid actions
actions = ['move', 'cast', 'use', 'do']
messageTypes = ['say', 'yell', 'party']
adminOps = ['connect', 'gamelist', 'update', 'start', 'register', 'auth', 'username', 'password']
class ClientMessage:
"""Takes a JSON encoded string and attempt to turn it
into a valid message, throws exception if it can't."""
mtype = None
mpayload = dict()
valid = False
def __init__(self, message):
try:
data = json.loads(message)
except ValueError:
self.valid = False
raise InvalidMessageError
if 'action' in data:
self.mtype = ACTION
self.validate(actions, data['action'])
elif 'message' in data:
self.mtype = MESSAGE
self.validate(messageTypes, data['message'])
elif 'admin' in data:
self.mtype = ADMIN
self.validate(adminOps, data['admin'])
else:
self.valid = False
raise InvalidMessageError
def validate(self, validItems, payload):
if not type(payload) is dict:
raise InvalidMessageError
for item in validItems:
if item in payload:
self.mpayload = {item: payload[item]}
return
self.valid = False
raise InvalidMessageError
class InvalidMessageError(Exception):
def __init__(self, value="Invalid Message"):
self.value = value
def __str__(self):
return repr(self.value)