diff --git a/poc/py/stream_to_state.py b/poc/py/stream_to_state.py index bf6ed11..c71c64f 100644 --- a/poc/py/stream_to_state.py +++ b/poc/py/stream_to_state.py @@ -25,14 +25,16 @@ def with_(N, R, T, p): released = CBAppend(p) cb = CBFork(triggered, released) - bucket = Bucket(N, R, T, cb.cb()) + buckets = {} while True: got = readline() - if got: - bucket.push() + if not got: + [buckets[i].pop() for i in buckets] else: - bucket.pop() + if not got in buckets: + buckets[got] = Bucket(N, R, T, cb.cb(got)) + buckets[got].push() def readline(): def __input(*args): @@ -47,9 +49,9 @@ def readline(): signal.signal(signal.SIGALRM, __input) signal.alarm(timeout) foo = _input() - return not foo is None + return foo -class Bucket: +class Bucket(): def __init__(self, N, R, T, CB): self.q = 0.0 self.N = N @@ -103,7 +105,7 @@ class CBSignals(): self.__signal_triggered = signal_triggered self.__signal_released = signal_released - def cb(self): + def cb(self, payload): def cb(state): print(f"state is now {state}") kill( @@ -119,10 +121,10 @@ class CBAppend(): def __init__(self, path): self.__path = path - def cb(self): + def cb(self, payload): def cb(state): with open(self.__path, "a") as f: - f.write(f"{state}\n") + f.write(f"{'/' if not state else ''}{payload}\n") return cb class CBFork(): @@ -130,9 +132,9 @@ class CBFork(): self.__triggered = triggered self.__released = released - def cb(self): - cb_triggered = self.__triggered.cb() - cb_released = self.__released.cb() + def cb(self, payload): + cb_triggered = self.__triggered.cb(payload) + cb_released = self.__released.cb(payload) def cb(state): if state: return cb_triggered(state) diff --git a/poc/py/test.sh b/poc/py/test.sh index cd9b227..4015ffa 100644 --- a/poc/py/test.sh +++ b/poc/py/test.sh @@ -11,7 +11,7 @@ trap cleanup EXIT python3 ./state_to_buttons.py & ( - while echo ""; do + while echo $((RANDOM%2)); do if [ 0 == $((RANDOM%4)) ]; then sleep 3 fi