-
Notifications
You must be signed in to change notification settings - Fork 0
/
export.py
47 lines (36 loc) · 1.33 KB
/
export.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import queue
import threading
import time
import umsgpack
from request import Request
__author__ = 'Joern Weissenborn'
import libexport
class AurSirExport:
def __init__(self, service_descriptor, address):
self.id = libexport.NewExportYaml(service_descriptor.encode('ascii'), address.encode('ascii'))
self.idq = queue.Queue()
self.receiver = ExportReceiver(self.id, self.idq)
self.receiver.start()
def request(self):
uuid = self.idq.get()
function = libexport.RetrieveRequestFunction(self.id, uuid).decode("ascii")
params = libexport.RetrieveRequestParams(self.id, uuid)
return Request(uuid, function, params, self.id)
def emit(self, inparams, outparams):
libexport.Emit(self.id, umsgpack.packb(inparams), umsgpack.packb(outparams))
def react(self, reactions):
while True:
req = self.request()
reaction = reactions[req.function]
req.reply(reaction(req.decode()))
class ExportReceiver(threading.Thread):
def __init__(self, eid, idq):
super(ExportReceiver, self).__init__()
self.eid = eid
self.idq = idq
def run(self):
while True:
rid = libexport.GetNextRequestId(self.eid)
if rid is not None:
self.idq.put(rid)
time.sleep(0.001)