| #!/usr/bin/python |
| import json |
| import threading |
| import wptserve.stash |
| from mod_pywebsocket import msgutil |
| |
| address, authkey = wptserve.stash.load_env_config() |
| path = "/stash_responder_blocking" |
| stash = wptserve.stash.Stash(path, address=address, authkey=authkey) |
| cv = threading.Condition() |
| |
| def handle_set(key, value): |
| with cv: |
| stash.put(key, value) |
| cv.notify_all() |
| |
| def handle_get(key): |
| with cv: |
| while True: |
| value = stash.take(key) |
| if value is not None: |
| return value |
| cv.wait() |
| |
| def web_socket_do_extra_handshake(request): |
| pass |
| |
| def web_socket_transfer_data(request): |
| line = request.ws_stream.receive_message() |
| |
| query = json.loads(line) |
| action = query["action"] |
| key = query["key"] |
| |
| if action == "set": |
| value = query["value"] |
| handle_set(key, value) |
| response = {} |
| elif action == "get": |
| value = handle_get(key) |
| response = {"value": value} |
| else: |
| response = {} |
| |
| msgutil.send_message(request, json.dumps(response)) |