1STATUS_EVENT = "status" 2RESUME_EVENT = "resume" 3TEST_COMPLETED_EVENT = "test_completed" 4 5 6class EventDispatcher(object): 7 def __init__(self): 8 self._clients = {} 9 10 def add_session_client(self, client): 11 token = client.session_token 12 if token not in self._clients: 13 self._clients[token] = [] 14 self._clients[token].append(client) 15 16 def remove_session_client(self, client_to_delete): 17 if client_to_delete is None: 18 return 19 token = client_to_delete.session_token 20 if token not in self._clients: 21 return 22 23 for client in self._clients[token]: 24 if client.session_token == client_to_delete.session_token: 25 self._clients.remove(client) 26 break 27 if len(self._clients[token]) == 0: 28 del self._clients[token] 29 30 def dispatch_event(self, token, event_type, data): 31 if token not in self._clients: 32 return 33 event = { 34 "type": event_type, 35 "data": data 36 } 37 38 for client in self._clients[token]: 39 client.send_message(event) 40