Holger Hans Peter Freyther | e7ae51f | 2018-02-25 21:10:16 +0000 | [diff] [blame] | 1 | |
| 2 | from osmo_gsm_tester import log |
| 3 | from functools import partial |
| 4 | |
| 5 | import time |
| 6 | |
| 7 | |
| 8 | class 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. |
| 30 | (data, address) = self._server.recvfrom(4096) |
| 31 | now = time.clock_gettime(time.CLOCK_MONOTONIC) |
| 32 | for handler in self._handlers: |
| 33 | handler(data, now) |