2018-02-25 21:10:16 +00:00
|
|
|
|
2020-04-10 17:51:31 +00:00
|
|
|
from osmo_gsm_tester.core import log
|
2018-02-25 21:10:16 +00:00
|
|
|
|
|
|
|
import time
|
|
|
|
|
|
|
|
|
|
|
|
class EventServer(log.Origin):
|
|
|
|
"""
|
|
|
|
Listen for AF_UNIX/SOCK_DGRAM messages from test apps and
|
|
|
|
forward them.
|
|
|
|
"""
|
|
|
|
def __init__(self, name, path):
|
|
|
|
super().__init__(log.C_RUN, name)
|
|
|
|
self._path = path
|
|
|
|
self._handlers = []
|
|
|
|
|
|
|
|
def register(self, cb):
|
|
|
|
self._handlers.append(cb)
|
|
|
|
|
|
|
|
def server_path(self):
|
|
|
|
return self._path
|
|
|
|
|
|
|
|
def listen(self, loop):
|
|
|
|
self._server = loop.create_unix_server(self.read_cb, self._path)
|
|
|
|
|
|
|
|
def read_cb(self, obj, mask):
|
|
|
|
# addresss doesn't give us the remote but currently we don't
|
|
|
|
# need it.
|
2018-06-17 18:31:46 +00:00
|
|
|
data, ancdata, flags, addr = self._server.recvmsg(4096, 4096)
|
2018-02-25 21:10:16 +00:00
|
|
|
now = time.clock_gettime(time.CLOCK_MONOTONIC)
|
|
|
|
for handler in self._handlers:
|
2018-06-17 18:31:46 +00:00
|
|
|
handler(data, addr, now)
|