#!/usr/bin/python3 # -*- coding: utf-8 -*- # -*- mode: Python -*- ''' tonano exporter to LJ nano v0.1b ''' from __future__ import print_function import websocket import time import argparse import traceback import sys import random from websocket_server import WebsocketServer from socket import * try: import thread except ImportError: import _thread as thread name = "exports::tonano" def debug(*args, **kwargs): if( verbose == False ): return print(*args, file=sys.stderr, **kwargs) argsparser = argparse.ArgumentParser(description="tonano v0.1b help mode") argsparser.add_argument("-v","--verbose",action="store_true",help="Verbose output") argsparser.add_argument("-s","--server",help="WS server IP (127.0.0.1 by default)", type=str) argsparser.add_argument("-p","--port",help="WS port to bind to (9001 by default)", type=str) argsparser.add_argument("-k","--key",help="Redis key to update",default="0",type=str) args = argsparser.parse_args() key = args.key if args.verbose: verbose = True else: verbose = False if args.server: serverIP = args.server else: serverIP = "127.0.0.1" if args.port: wsPORT = args.port else: wsPORT = 9001 debug("") debug("tonano v0.1b") points0 = "[(150.0, 230.0, 65280), (170.0, 170.0, 65280), (230.0, 170.0, 65280), (210.0, 230.0, 65280), (150.0, 230.0, 65280)]" points1 = "[(180.0, 230.0, 65280), (200.0, 170.0, 65280), (180.0, 230.0, 65280)]" points2 = "[(170.0, 190.0, 65280), (200.0, 170.0, 65280), (230.0, 190.0, 65280), (230.0, 200.0, 65280), (170.0, 230.0, 65280), (230.0, 230.0, 65280)]" points3 = "[(170.0, 170.0, 65280), (200.0, 170.0, 65280), (230.0, 190.0, 65280), (200.0, 200.0, 65280), (230.0, 210.0, 65280), (200.0, 230.0, 65280), (170.0, 230.0, 65280)]" points = [points0, points1, points2, points3] LaserNumber = 1 SceneNumber = 0 Laser = 0 def sendbroadcast(): debug("Sending broadcast") cs = socket(AF_INET, SOCK_DGRAM) cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) cs.sendto("LJ tonano 0.1".encode(), ("255.255.255.255", 54545)) # # CLI websocket client -> WS server (nanoLJ) -> webpage # def on_message(ws, message): if random.randint(0,100)>95: sendbroadcast() #debug("CLI WS client received and dropped "+message) def on_error(ws, error): debug("CLI WS client got error :"+str(error)) def on_close(ws): debug("### CLI WS client WS closed ###") def on_open(ws): def run(*args): try: while True: line = sys.stdin.readline() if line == "": time.sleep(0.005) #debug("CLI string", line) line = line.rstrip('\n') line=line[1:-1] line = line.replace("[",'(') line = line.replace("]",')') #debug(line) line = "[{}]".format(line) debug("CLI proccess sending : /simul" +" "+ line) #sendWSall("/simul" +" "+ str(points[laserid].decode('ascii'))) ws.send("/simul "+line) #debug("exports::tosimuCLIent "+str(key)+" "+line) except EOFError: debug("tonano break")# no more information finally: ws.close() debug("tonano WS terminating...") thread.start_new_thread(run, ()) def handle_timeout(self): self.timed_out = True # # Launch WS CLI client # if __name__ == "__main__": try: # CLI Websocket client debug("Launching tosimu CLI websocket client...") #websocket.enableTrace(True) websocket.enableTrace(False) print("ws://"+str(serverIP)+":"+str(wsPORT)) ws = websocket.WebSocketApp("ws://"+str(serverIP)+":"+str(wsPORT), on_message = on_message, on_error = on_error, on_close = on_close) ws.on_open = on_open ws.run_forever() except Exception: debug("tonano Exception") traceback.print_exc()