blob: b0f699d90bf4086a23ff55283dc43f20c377a33d [file] [log] [blame]
Holger Hans Peter Freythere7ae51f2018-02-25 21:10:16 +00001
2from osmo_gsm_tester import log
3from functools import partial
4
5import time
6
7
8class EventServer(log.Origin):
9 """
10 Listen for AF_UNIX/SOCK_DGRAM messages from test apps and
11 forward them.
12 """
13 def __init__(self, name, path):
14 super().__init__(log.C_RUN, name)
15 self._path = path
16 self._handlers = []
17
18 def register(self, cb):
19 self._handlers.append(cb)
20
21 def server_path(self):
22 return self._path
23
24 def listen(self, loop):
25 self._server = loop.create_unix_server(self.read_cb, self._path)
26
27 def read_cb(self, obj, mask):
28 # addresss doesn't give us the remote but currently we don't
29 # need it.
Holger Hans Peter Freyther05895a92018-06-17 19:31:46 +010030 data, ancdata, flags, addr = self._server.recvmsg(4096, 4096)
Holger Hans Peter Freythere7ae51f2018-02-25 21:10:16 +000031 now = time.clock_gettime(time.CLOCK_MONOTONIC)
32 for handler in self._handlers:
Holger Hans Peter Freyther05895a92018-06-17 19:31:46 +010033 handler(data, addr, now)