diff --git a/server/src/notifier.py b/server/src/notifier.py new file mode 100644 index 0000000..21f8e8b --- /dev/null +++ b/server/src/notifier.py @@ -0,0 +1,71 @@ +#!/bin/env python3 +import websocket +import json +import random +import zmq +from pprint import pprint + +__version__ = "2.0.0b2" + +ws = None +uri = "ws://localhost:5080" +ws = websocket.create_connection(uri) + +context = zmq.Context() +socket = context.socket(zmq.REP) +socket.bind("tcp://*:5555") + +def sendsmpmessage(target, message): + global ws + print("Sendmessage %s called to %s" % (message, target)) + msg = ("%s %s" % (target, message)) + + # Create a unique correlation ID + command = { + "corrId": f"id{random.randint(0, 999999)}", + "cmd": msg, + } + json_command = json.dumps(command) + + """ Connects to WebSocket server, sends a message, and returns the response """ + if ws is None: + uri = "ws://localhost:5080" + ws = websocket.create_connection(uri) # Blocking WebSocket connection + + ws.send(json_command) # Send message to WebSocket + responsejson = ws.recv() # Receive response + response = json.loads(responsejson) + # ws.close() + + for chatitem in response['resp']['chatItems']: + statusdict = chatitem['chatItem']['meta']['itemStatus'] + try: + status = statusdict['sndProgress'] + except KeyError: + print("FAILED") + status = 'FAILED' + else: + smessage = chatitem['chatItem']['meta']['itemText'] + print("Message '%s' sent over websocket to %s, status was %s" % (smessage, target, status)) + + if status == 'complete': + return True + else: + return False + + +if __name__ == '__main__': + while True: + zmq = socket.recv_string() + print(f"Received request: {zmqmessage}") + result = True + + decoded = json.loads(zmqmessage) + pprint(decoded) + + result = sendmessage(decoded.get('target'), decoded.get('message')) + + if result is True: + socket.send_string("sent") + else: + socket.send_string("failed") diff --git a/server/src/tellmesrv.py b/server/src/tellmesrv.py index dae59b3..87928d8 100644 --- a/server/src/tellmesrv.py +++ b/server/src/tellmesrv.py @@ -4,60 +4,36 @@ import websocket import json import yaml import random -import threading from pprint import pprint __version__ = "2.0.0b2" versionstring='Taurix TellMe server v' + __version__ app = Flask(__name__) -lock = threading.Lock() -ws = None -uri = "ws://localhost:5080" -ws = websocket.create_connection(uri) +socket = context.socket(zmq.REQ) +socket.connect("tcp://localhost:5555") hooks = {} with open(r'/etc/tellme/hooks.yml') as hooksfile: hooks = yaml.load(hooksfile, Loader=yaml.FullLoader) + def sendmessage(target, message): - global ws - print("Sendmessage %s called to %s" % (message, target)) - msg = ("%s %s" % (target, message)) + global socket + jsonmessage = {} + jsonmessage['target'] = target + jsonmessage['message'] = message + socket.send_string(json.dumps(jsonmessage)) - # Create a unique correlation ID - command = { - "corrId": f"id{random.randint(0, 999999)}", - "cmd": msg, - } - json_command = json.dumps(command) + # Wait for a reply + reply = socket.recv_string() + print(f"Received reply: {reply}") - """ Connects to WebSocket server, sends a message, and returns the response """ - if ws is None: - uri = "ws://localhost:5080" - ws = websocket.create_connection(uri) # Blocking WebSocket connection - - ws.send(json_command) # Send message to WebSocket - responsejson = ws.recv() # Receive response - response = json.loads(responsejson) - # ws.close() - - for chatitem in response['resp']['chatItems']: - statusdict = chatitem['chatItem']['meta']['itemStatus'] - try: - status = statusdict['sndProgress'] - except KeyError: - print("FAILED") - status = 'FAILED' - else: - smessage = chatitem['chatItem']['meta']['itemText'] - print("Message '%s' sent over websocket to %s, status was %s" % (smessage, target, status)) - - if status == 'complete': - return True - else: - return False + if reply == 'sent': + return True + else: + return False @app.route("/webhook/", methods=['POST'])