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