Compare commits
No commits in common. "lash/mux-input" and "master" have entirely different histories.
lash/mux-i
...
master
97
parse.py
97
parse.py
@ -4,8 +4,6 @@ import enum
|
|||||||
import uuid
|
import uuid
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
import sys
|
|
||||||
import select
|
|
||||||
from multiprocessing import Process
|
from multiprocessing import Process
|
||||||
from multiprocessing import Value
|
from multiprocessing import Value
|
||||||
from multiprocessing import Pipe
|
from multiprocessing import Pipe
|
||||||
@ -273,7 +271,6 @@ class Router:
|
|||||||
|
|
||||||
|
|
||||||
def exec(self, cmd):
|
def exec(self, cmd):
|
||||||
logg.debug("router exec {}".format(cmd))
|
|
||||||
if cmd.c & 0xa0 > 0:
|
if cmd.c & 0xa0 > 0:
|
||||||
return self.sync(cmd.i)
|
return self.sync(cmd.i)
|
||||||
fn = self.__routes[cmd.c]
|
fn = self.__routes[cmd.c]
|
||||||
@ -283,17 +280,10 @@ class Router:
|
|||||||
po.start()
|
po.start()
|
||||||
|
|
||||||
|
|
||||||
def finish(self):
|
|
||||||
print("syncing")
|
|
||||||
for k, v in self.__r.items():
|
|
||||||
print("syncing key " + k)
|
|
||||||
r = self.sync(k)
|
|
||||||
logg.debug("synced " + k + ": " + r)
|
|
||||||
print("synced " + k + ": " + r)
|
|
||||||
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
self.finish()
|
for k, v in self.__r.items():
|
||||||
|
r = self.sync(k)
|
||||||
|
logging.debug("synced " + k + ": " + r)
|
||||||
|
|
||||||
|
|
||||||
def noop_handler(cmd):
|
def noop_handler(cmd):
|
||||||
@ -306,76 +296,21 @@ def foo_handler(cmd):
|
|||||||
|
|
||||||
parser = yacc.yacc()
|
parser = yacc.yacc()
|
||||||
|
|
||||||
running = True
|
cmds = [
|
||||||
|
"KEY_CREATE foo-bar Foo BAr",
|
||||||
|
"KEY_CREATE bar-baz Foo BAr 0xabcdef0",
|
||||||
class FileGet:
|
"VOUCHER_MINT - 0xdeadbeef 13 0xfdaf",
|
||||||
def __init__(self, o, fp):
|
"VOUCHER_MINT baz-baz 0xdeadbeef 13 0xfdaf",
|
||||||
self.__running = True
|
"VOUCHER_MINT bar-bar 0xdeadbeef 42",
|
||||||
self.__o = o
|
"VOUCHER_CREATE foo-foo Foo Bar 42",
|
||||||
self.__f = open(fp, 'r')
|
"VOUCHER_CREATE inky-pinky-blinky Foo Bar 42 44 233",
|
||||||
|
"VOUCHER_TRANSFER clyde-sue 0xbeeffeed0123 666 foo 0x0fdc",
|
||||||
def run(self):
|
]
|
||||||
while self.__running:
|
for v in cmds:
|
||||||
v = ifc.get()
|
|
||||||
if v == None:
|
|
||||||
break
|
|
||||||
v = v.strip('\n')
|
|
||||||
if len(v) == 0:
|
|
||||||
break
|
|
||||||
r = parser.parse(v)
|
|
||||||
self.__o.exec(r)
|
|
||||||
|
|
||||||
def get(self):
|
|
||||||
return self.__f.readline()
|
|
||||||
|
|
||||||
|
|
||||||
class WaitGet:
|
|
||||||
def __init__(self, o, *r):
|
|
||||||
self.__running = True
|
|
||||||
self.__o = o
|
|
||||||
self.__f = r
|
|
||||||
|
|
||||||
# TODO: router copy results in missing keys to sync when closing down
|
|
||||||
def __process(self, f):
|
|
||||||
while self.__running:
|
|
||||||
r = select.select([f], [], [])
|
|
||||||
v = r[0][0].recv()
|
|
||||||
if v == None:
|
|
||||||
break
|
|
||||||
v = v.strip('\n')
|
|
||||||
if len(v) == 0:
|
|
||||||
break
|
|
||||||
r = parser.parse(v)
|
|
||||||
self.__o.exec(r)
|
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
(fo, fi,) = Pipe()
|
|
||||||
p = Process(target=self.__process, args=(fo,))
|
|
||||||
p.start()
|
|
||||||
while self.__running:
|
|
||||||
v = input("> ")
|
|
||||||
if v == "":
|
|
||||||
fi.send(None)
|
|
||||||
break
|
|
||||||
fi.send(v)
|
|
||||||
p.join()
|
|
||||||
logg.debug('waitget run end')
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
ifc = None
|
|
||||||
o = Router()
|
o = Router()
|
||||||
o.register(CmdId.KEY_CREATE, noop_handler)
|
o.register(CmdId.KEY_CREATE, noop_handler)
|
||||||
o.register(CmdId.VOUCHER_MINT, noop_handler)
|
o.register(CmdId.VOUCHER_MINT, noop_handler)
|
||||||
o.register(CmdId.VOUCHER_CREATE, noop_handler)
|
o.register(CmdId.VOUCHER_CREATE, noop_handler)
|
||||||
o.register(CmdId.VOUCHER_TRANSFER, foo_handler)
|
o.register(CmdId.VOUCHER_TRANSFER, foo_handler)
|
||||||
|
r = parser.parse(v)
|
||||||
if len(sys.argv) > 1:
|
o.exec(r)
|
||||||
ifc = FileGet(o, sys.argv[1])
|
|
||||||
else:
|
|
||||||
ifc = WaitGet(o, sys.stdin)
|
|
||||||
|
|
||||||
ifc.run()
|
|
||||||
o.finish()
|
|
||||||
|
Loading…
Reference in New Issue
Block a user