Implement publish/subscribe
This commit is contained in:
parent
5cf90c372f
commit
e156c778b9
2 changed files with 82 additions and 15 deletions
36
README.md
36
README.md
|
|
@ -36,13 +36,49 @@ Usage Example
|
|||
ws://localhost:62456/ws
|
||||
> RANDINT32
|
||||
< 585865374
|
||||
|
||||
> RANDUNIFORM
|
||||
< 0.70137183786
|
||||
|
||||
> RANDNORMAL
|
||||
< -1.6120135370
|
||||
|
||||
> RANDBYTES 16
|
||||
< <20><><EFBFBD><EFBFBD><EFBFBD>9L).<2E>!:<3A><><EFBFBD>@Nh<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD><EFBFBD><EFBFBD><EFBFBD>_q<EFBFBD>
|
||||
|
||||
> SUBSCRIBEINT32
|
||||
< 1361330636
|
||||
< -604581511
|
||||
< 1510923919
|
||||
< ...
|
||||
> UNSUBSCRIBE
|
||||
< UNSUBSCRIBED
|
||||
|
||||
> SUBSCRIBEUNIFORM
|
||||
< 0.54623951886
|
||||
< 0.67567578799
|
||||
< 0.09746421443
|
||||
< ...
|
||||
> UNSUBSCRIBE
|
||||
< UNSUBSCRIBED
|
||||
|
||||
> SUBSCRIBENORMAL
|
||||
< -1.6120135370
|
||||
< 0.02943381135
|
||||
< -0.9883458007
|
||||
< ...
|
||||
> UNSUBSCRIBE
|
||||
< UNSUBSCRIBED
|
||||
|
||||
> SUBSCRIBEBYTES 8
|
||||
< <20><><EFBFBD><EFBFBD><EFBFBD>9L)
|
||||
< .<EFBFBD>!:<EFBFBD><EFBFBD><EFBFBD>@
|
||||
< Nh<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
< d<EFBFBD><EFBFBD><EFBFBD><EFBFBD>_q<EFBFBD>
|
||||
< ...
|
||||
> UNSUBSCRIBE
|
||||
< UNSUBSCRIBED
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
import threading
|
||||
|
||||
from flask import Flask, request, Response
|
||||
from flask_sockets import Sockets
|
||||
from gevent import pywsgi
|
||||
|
|
@ -59,10 +61,14 @@ def api_randbytes():
|
|||
|
||||
@sockets.route('/ws')
|
||||
def ws(websocket):
|
||||
subscribed = [False]
|
||||
while not websocket.closed:
|
||||
threading.Thread(target=handle_ws_message, args=(websocket.receive(), websocket, subscribed)).start()
|
||||
|
||||
|
||||
def handle_ws_message(message, websocket, subscribed):
|
||||
try:
|
||||
message = websocket.receive().strip().lower()
|
||||
split_message = message.split(' ')
|
||||
split_message = message.strip().lower().split()
|
||||
if split_message[0] == 'randint32':
|
||||
websocket.send(str(qng_wrapper.randint32()))
|
||||
elif split_message[0] == 'randuniform':
|
||||
|
|
@ -70,9 +76,34 @@ def ws(websocket):
|
|||
elif split_message[0] == 'randnormal':
|
||||
websocket.send(str(qng_wrapper.randnormal()))
|
||||
elif split_message[0] == 'randbytes':
|
||||
websocket.send(qng_wrapper.randbytes(int(split_message[1])))
|
||||
except ValueError as e:
|
||||
websocket.close(code=1003, message=str(e))
|
||||
length = int(split_message[1])
|
||||
websocket.send(qng_wrapper.randbytes(length))
|
||||
elif split_message[0] == 'subscribeint32':
|
||||
if not subscribed[0]:
|
||||
subscribed[0] = True
|
||||
while subscribed[0] and not websocket.closed:
|
||||
websocket.send(str(qng_wrapper.randint32()))
|
||||
elif split_message[0] == 'subscribeuniform':
|
||||
if not subscribed[0]:
|
||||
subscribed[0] = True
|
||||
while subscribed[0] and not websocket.closed:
|
||||
websocket.send(str(qng_wrapper.randuniform()))
|
||||
elif split_message[0] == 'subscribenormal':
|
||||
if not subscribed[0]:
|
||||
subscribed[0] = True
|
||||
while subscribed[0] and not websocket.closed:
|
||||
websocket.send(str(qng_wrapper.randnormal()))
|
||||
elif split_message[0] == 'subscribebytes':
|
||||
chunk = int(split_message[1])
|
||||
if not subscribed[0]:
|
||||
subscribed[0] = True
|
||||
while subscribed[0] and not websocket.closed:
|
||||
websocket.send(qng_wrapper.randbytes(chunk))
|
||||
elif split_message[0] == 'unsubscribe':
|
||||
subscribed[0] = False
|
||||
websocket.send('UNSUBSCRIBED')
|
||||
except (ValueError, BlockingIOError):
|
||||
pass
|
||||
except Exception as e:
|
||||
websocket.close(code=1011, message=str(e))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue