Ejemplo n.º 1
0
def start_server():
    """Starts the WebSocket server."""
    server = WebsocketServer(9001, host='0.0.0.0')
    server.set_fn_message_received(message_received)
    server.set_fn_client_left(client_left)
    print("Started")
    server.run_forever()
Ejemplo n.º 2
0
class WsServer(threading.Thread):
    def __init__(self, conf=None, controller=None):
        threading.Thread.__init__(self)
        if conf == None:
            self.conf = dict(port=4000, host='127.0.0.1')
        else:
            self.conf = conf
        self.server = WebsocketServer(self.conf["port"],
                                      host=self.conf["host"])
        self.server.set_fn_new_client(self.new_client)
        self.server.set_fn_client_left(self.client_left)
        self.server.set_fn_message_received(self.message_received)

    def run(self):
        self.server.run_forever()

    def new_client(client, server):
        logging.info("WS: New Client")
        self.server.send_message_to_all("Hey all, a new client has joined us")

    def client_left(client, server):
        logging.info("WS: Client left")
        self.server.send_message_to_all("Hey all, a new client has joined us")

    def message_received(client, server, message):
        logging.info("WS: New message " + message)

    def disconnect(self):
        logging.info("WS:Disconnect")
        self.server.shutdown()
Ejemplo n.º 3
0
def main(origin_png_filename, open_html=False, open_svg=False):
    global WS_SERVER
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    assert os.path.isfile(origin_png_filename), origin_png_filename
    dst_png_filename = os.path.join(TMP_DIR, 'origin.png')
    shutil.copyfile(origin_png_filename, dst_png_filename)

    svg_filename = render_templates(origin_png_filename, open_svg)
    on_observable_svg_changed(svg_filename, dst_png_filename, reload_view=False)

    print("Set change observer")
    event_handler = SVGModificationHandler(svg_filename, dst_png_filename)
    observer = Observer()
    observer.schedule(event_handler, WWW_DIR, recursive=True)
    observer.start()

    print("Start WebSocket server")
    WS_SERVER = WebsocketServer(**WS_SERVER_CONFIG)
    if open_html:
        args = ['open'] if sys.platform == 'darwin' else ['cmd.exe', '/c', 'start']
        args.append(HTML_URL)
        subprocess.check_call(args)
    WS_SERVER.run_forever()
    #
    observer.stop()
Ejemplo n.º 4
0
class Websocket_Server():

    def __init__(self, host, port):
        self.client_id_username_map = {}
        self.server = WebsocketServer(port, host = host, loglevel = logging.DEBUG)

    def new_client(self, client, server):
        print("new client connected and was given id {}".format(client['id']))
        self.server.send_message(client,"make connection : success!!")

    def client_left(self, client, server):
        print("client({}) disconnected".format(client['id']))

    def message_received(self, client, server, message):
        if message.startswith("init:username:"******"init:username:"******"")
            print(username)
            self.client_id_username_map[client["id"]] = username
            self.server.send_message_to_all(message)
        else:

            self.server.send_message_to_all(message)
    
    def run(self):
        self.server.set_fn_new_client(self.new_client)
        self.server.set_fn_client_left(self.client_left)
        self.server.set_fn_message_received(self.message_received) 
        self.server.run_forever()
Ejemplo n.º 5
0
def start_server(port):
    server = WebsocketServer(port)
    ws_log.debug("Server listening on port: %d" % port)
    server.set_fn_new_client(new_client)
    server.set_fn_client_left(client_left)
    server.set_fn_message_received(message_received)
    server.run_forever()
Ejemplo n.º 6
0
class IrWsServer():
    DEF_PORT = 9001

    def __init__(self, port=DEF_PORT, host="0.0.0.0",
                 svrhost='localhost', svrport=51001,
                 debug=False):
        self._dbg = debug
        self._log = get_logger(__class__.__name__, self._dbg)
        self._log.debug('host=%s, port=%s', host, port)
        self._log.debug('svrhost=%s, svrport=%s', svrhost, svrport)

        self.irsvr = IrSendCmdClient(svrhost, svrport, debug=self._dbg)
        self.server = WebsocketServer(port, host=host)

    def new_client(self, client, server):
        self._log.debug('client=%s', client)

    def client_left(self, client, server):
        self._log.debug('client=%s', client)
        self.irsvr.end()

    def message_received(self, client, server, msg):
        self._log.debug('client=%s, msg=%s', client, msg)
        self.msg = msg.encode('utf-8')
        self._log.info('msg=%s.', msg)
        self.irsvr.send_recv(msg.split())

    def run(self):
        self._log.debug('')
        self.server.set_fn_new_client(self.new_client)
        self.server.set_fn_client_left(self.client_left)
        self.server.set_fn_message_received(self.message_received)
        self.server.run_forever()
Ejemplo n.º 7
0
class WsSever:

   def __init__(self, host,port,connectCall,leftCall,messageCall):
     
     
      # day = time.strftime("%Y-%m-%d", time.localtime()) 
      # self.logger = logging.getLogger(__name__)
      # self.logger.setLevel(level = logging.DEBUG)
      # handler = logging.FileHandler("{}-{}.txt".format(day,port),encoding="utf-8")
      # handler.setLevel(logging.DEBUG)
      # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
      # handler.setFormatter(formatter)
      # self.logger.addHandler(handler)

      self.Server = WebsocketServer(host = host,port = port,loglevel=logging.INFO)
      self.Server.set_fn_new_client(connectCall)
      self.Server.set_fn_client_left(leftCall)
      self.Server.set_fn_message_received(messageCall)
      
     
   def startRun(self):
      self.Server.run_forever()

   def GetServer(self):
      return self.Server
  
   def loginfo(self,str):
      # self.logger.info(str)
      pass
Ejemplo n.º 8
0
def _track_logs(test_name, project_path):
    server = WebsocketServer(WS_PORT, host='0.0.0.0')

    def new_client(cli, svr):
        opened_files = {}
        try:
            while True:
                for root, dirs, files in os.walk(project_path):
                    for f in files:
                        if f.endswith('_color') and test_name in root:
                            if not opened_files.get(f):
                                opened_files[f] = open(join(root, f))
                            log_lines = [
                                convert(l)
                                for l in opened_files[f].readlines()
                            ]
                            if log_lines != []:
                                node = splitext(f)[0].split('_')
                                node_num = node[-1] if node[-1].isdigit(
                                ) else None
                                node_type = node[:-1] if node[-1].isdigit(
                                ) else node
                                svr.send_message_to_all(
                                    json.dumps({
                                        'node_type': '_'.join(node_type),
                                        'node_num': node_num,
                                        'log_lines': log_lines
                                    }))
                time.sleep(0.01)
        except:
            for f in opened_files:
                opened_files[f].close()

    server.set_fn_new_client(new_client)
    server.run_forever()
Ejemplo n.º 9
0
def startWebSocketServer():
    PORT = 8888
    server = WebsocketServer(PORT)
    server.set_fn_new_client(new_client)
    server.set_fn_client_left(client_left)
    server.set_fn_message_received(message_received)
    server.run_forever()
Ejemplo n.º 10
0
def main():
    server = WebsocketServer(1236, '0.0.0.0')
    server.set_fn_new_client(new_client_handler)
    server.set_fn_client_left(client_left_handler)
    server.set_fn_message_received(message_received_handler)

    server.run_forever()
Ejemplo n.º 11
0
def start_server(port):
	server = WebsocketServer(port)
	ws_log.debug("Server listening on port: %d" % port)
	server.set_fn_new_client(new_client)
	server.set_fn_client_left(client_left)
	server.set_fn_message_received(message_received)
	server.run_forever()
Ejemplo n.º 12
0
    def __init__(self):
        self.client = ''
        self.server = ''

        # Called for every client connecting (after handshake)
        def new_client(client, server):
            print("New client connected and was given id %d" % client['id'])
            self.client = client
            server.send_message_to_all("Hey all, a new client has joined us")

        # Called for every client disconnecting
        def client_left(client, server):
            print("Client(%d) disconnected" % client['id'])

        # Called when a client sends a message
        def message_received(client, server, message):
            if len(message) > 200:
                message = message[:200] + '..'
            print("Client(%d) said: %s" % (client['id'], message))

        PORT = 9001
        server = WebsocketServer(PORT)
        server.set_fn_new_client(new_client)
        server.set_fn_client_left(client_left)
        server.set_fn_message_received(message_received)
        server.run_forever()
        self.server = server
        make_template()
        os.system('open index.html')
Ejemplo n.º 13
0
def run_server_classic(ip_address, port):
    """run_server"""
    server = WebsocketServer(port, host=ip_address)
    server.set_fn_new_client(new_client)
    server.set_fn_client_left(client_diconnected)
    server.set_fn_message_received(std_message_received)
    server.run_forever()
Ejemplo n.º 14
0
def start_ws_server(args):
    """
    """

    server = WebsocketServer(args.port, host=args.host)

    def send(msg, client):
        try:
            message = json.dumps(msg)
            server.send_message(client, message)
        except:
            logger.exception(('ws send error'))

    def broadcast(msg):
        try:
            server.send_message_to_all(msg)
        except:
            #logger.exception(('ws send error'))
            pass

    def new_client(client, server):
        logger.info(('connected', client['id']))
        message = json.dumps({'message': 'connected', 'client': client['id']})
        broadcast(message)

    def client_left(client, server):
        logger.info(('disconnected', client['id']))
        message = json.dumps({
            'message': 'disconnected',
            'client': client['id']
        })
        broadcast(message)

    def message_received(client, server, message):
        logger.info(('message_received', len(message), message[:100]))

        try:
            msg = json.loads(message)
            new_message = json.dumps({
                'message': 'message',
                'client': client['id'],
                'content': msg
            })
            broadcast(new_message)
        except:
            logger.exception(('ws message handler error'))
            resp_message = json.dumps({
                'message': 'error',
                'description': 'server error'
            })
            send(resp_message, client)
            return

        resp_message = json.dumps({'message': 'result', 'description': 'ok'})
        send(resp_message, client)

    server.set_fn_new_client(new_client)
    server.set_fn_client_left(client_left)
    server.set_fn_message_received(message_received)
    server.run_forever()
Ejemplo n.º 15
0
 def startup_ws_server(self):
     WSPORT = 9001
     server = WebsocketServer(port=WSPORT, host="0.0.0.0")
     server.set_fn_new_client(self.new_client)
     server.set_fn_client_left(self.client_left)
     server.set_fn_message_received(self.message_received)
     server.run_forever()
Ejemplo n.º 16
0
def main(argv):
    host = ""
    port = ""
    try:
        opts, args = getopt.getopt(argv, "hs:p:", ["host=", "port="])
    except getopt.GetoptError:
        print("server.py -s <host> -p <port>")
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print("server.py -s <host> -p <port>")
            sys.exit()
        elif opt in ("-s", "--host"):
            host = arg
        elif opt in ("-p", "--port"):
            port = arg
    if host == "" or port == "":
        print("server.py -s <host> -p <port>")
        sys.exit(2)

    server = WebsocketServer(host=host, port=int(port))
    server.set_fn_new_client(new_client)
    server.set_fn_client_left(client_left)
    server.set_fn_message_received(message_received)
    server.run_forever()
Ejemplo n.º 17
0
 def run(self):
     server = WebsocketServer(self.port, host="0.0.0.0")
     server.set_fn_new_client(self.new_client)
     server.set_fn_client_left(self.client_left)
     server.set_fn_message_received(self.message_received)
     self.servers.append(server)
     server.run_forever()
Ejemplo n.º 18
0
class Websocket_Server():
    def __init__(self, host, port):
        self.server = WebsocketServer(port, host=host, loglevel=logging.DEBUG)

    # クライアント接続時に呼ばれる関数
    def new_client(self, client, server):
        print("new client connected and was given id {}".format(client['id']))
        # 全クライアントにメッセージを送信
        self.server.send_message_to_all("hey all, a new client has joined us")

    # クライアント切断時に呼ばれる関数
    def client_left(self, client, server):
        print("client({}) disconnected".format(client['id']))

    # クライアントからメッセージを受信したときに呼ばれる関数
    def message_received(self, client, server, message):
        print(message + "これはテストです")
        print("client({}) said: {}".format(client['id'], message + "これはテスト"))
        file = open('InputText.txt', 'w')
        file.write(message)
        print(message + "これはテストです")
        # 全クライアントにメッセージを送信
        self.server.send_message_to_all(message)

    # サーバーを起動する
    def run(self):
        # クライアント接続時のコールバック関数にself.new_client関数をセット
        self.server.set_fn_new_client(self.new_client)
        # クライアント切断時のコールバック関数にself.client_left関数をセット
        self.server.set_fn_client_left(self.client_left)
        # メッセージ受信時のコールバック関数にself.message_received関数をセット
        self.server.set_fn_message_received(self.message_received)
        self.server.run_forever()
Ejemplo n.º 19
0
class RpiServerWS():
    """docstring for WebsocketServer"""
    server = None

    def __init__(self, parent):
        self.parent = parent
        self.server = WebsocketServer(8050,
                                      host=hosthome,
                                      loglevel=logging.INFO)
        self.server.set_fn_new_client(self.new_client)
        self.server.set_fn_message_received(self.message_received)
        self.server.set_fn_client_left(self.client_left)
        print('Websocket Server started, waiting for clients to connect')
        self.server.run_forever()

    def new_client(self, client, server):
        #print('Connected by ', client)
        self.parent.clientSockets.append(client)
        greeting = '{"functionName":"connected", "args":{} }'
        self.server.send_message(client, greeting)

    def message_received(self, client, server, message):
        item = (message, self.server, client)
        #print('putting ', item, 'in the queue')
        self.parent.callbackQueue.put(item)
        #self.server.send_message(client, 'WS: Message put in queue')

    def client_left(self, client, server):
        self.parent.clientSockets.remove(client)
Ejemplo n.º 20
0
 def open(self):
     nw = self.newClientCallBack
     server = WebsocketServer(9001, "192.168.8.106")
     #server.set_fn_new_client(new_client)
     #server.set_fn_client_left(self.clientLeftCallBack)
     server.set_fn_message_received(self.newMessage)
     server.run_forever()
class WebSocketServer:

    if DebugLog.Debug:
        ip = '127.0.0.1'
        local_ip = '127.0.0.1'

    else:
        ip = '188.134.82.95'
        local_ip = '192.168.0.100'

    port = 11001

    def __init__(self):

        self.server = WebsocketServer(WebSocketServer.port,
                                      WebSocketServer.local_ip)
        self.server.set_fn_new_client(self.new_client)
        self.server.set_fn_client_left(self.client_left)
        self.server.set_fn_message_received(self.message_received)

        self.clients: Dict[int, VisualGithubClient] = {}

    def run(self):
        self.server.run_forever()

    # Called for every client connecting (after handshake)
    def new_client(self, client, _):
        DebugLog.connected(f'New client connected '
                           f'and was given id {client["id"]}')
        new_client = VisualGithubClient(client['id'], client['handler'])
        client['client'] = new_client
        self.clients[new_client.id] = new_client

    # Called for every client disconnecting
    def client_left(self, client, _):

        if client is None:
            return

        DebugLog.client_left(f'Client {client["id"]} disconnected')
        try:
            client['client'].left(self)
        except KeyError:
            DebugLog.error(f'Key error possibly double deleting '
                           f'in client left id = {client["id"]}')
        except ValueError:
            DebugLog.error(f'Value error possibly double deleting '
                           f'in client left id = {client["id"]}')

    # Called when a client sends a message
    def message_received(self, client, _, message):
        if client is None:
            return
        message = message.encode('ISO-8859-1').decode()
        client['client'].receive(self, message, client)

    def broadcast(self, message: dict):
        for client in list(self.clients.values()):
            if client.pass_filters(message):
                client.send(message)
Ejemplo n.º 22
0
def run_server():
    server = WebsocketServer(9288, host="0.0.0.0")
    server.set_fn_new_client(on_join)
    server.set_fn_client_left(on_leave)
    server.set_fn_message_received(on_message)
    print("Bridge server ready.")
    server.run_forever()
Ejemplo n.º 23
0
class GUI:
    # Initialization function
    # The actual initialization
    def __init__(self, host, console):
        t = threading.Thread(target=self.run_server)

        self.payload = {'canvas': None, 'image': '', 'shape': []}
        self.server = None
        self.client = None

        self.host = host

        self.payload_lock = threading.Lock()

        # Take the console object to set the same websocket and client
        self.console = console
        t.start()

    # Explicit initialization function
    # Class method, so user can call it without instantiation
    @classmethod
    def initGUI(self):
        # self.payload = {'image': '', 'shape': []}
        pass

    # Function for student to call
    # Encodes the image as a JSON string and sends through the WS
    def showImage(self, image):
        shape = image.shape
        frame = cv2.imencode('.JPEG', image)[1]
        encoded_image = base64.b64encode(frame)

        self.payload_lock.acquire()
        self.payload['image'] = encoded_image.decode('utf-8')
        self.payload['shape'] = shape
        self.payload_lock.release()

    # Function to get the client
    # Called when a new client is received
    def get_client(self, client, server):
        self.client = client
        self.console.set_websocket(self.server, self.client)

    # Update the gui
    def update_gui(self):
        self.payload_lock.acquire()
        message = "#img" + json.dumps(self.payload)
        self.payload_lock.release()

        try:
            self.server.send_message(self.client, message)
        except:
            pass

    # Activate the server
    def run_server(self):
        self.server = WebsocketServer(port=2303, host=self.host)
        self.server.set_fn_new_client(self.get_client)
        self.server.set_fn_message_received(self.console.prompt)
        self.server.run_forever()
Ejemplo n.º 24
0
 def start(self):
     al.log('Launch a server on port %d...' % self.port)
     server = WebsocketServer(self.port, host=self.host)
     server.set_fn_new_client(self.newClient)
     server.set_fn_client_left(self.clientLeft)
     server.set_fn_message_received(self.msgReceived)
     server.run_forever()
Ejemplo n.º 25
0
def main():
    print('\033[94m' + "Server Started" + '\033[0m')
    HTTP_PORT = 8000
    WEBSOCKET_PORT = 9001

    server = WebsocketServer(9001, host='0.0.0.0')
    server.set_fn_message_received(message_received)
    server.run_forever()
Ejemplo n.º 26
0
def websocket_server():
    global server

    logging.debug('Running websocket server')

    server = WebsocketServer(13254, host='127.0.0.1')
    server.set_fn_client_left(websocket_client_left)
    server.run_forever()
Ejemplo n.º 27
0
def run_server(i_ip_address, i_port, i_message_received, i_new_client,
               i_client_diconnected):
    """run_server"""
    server = WebsocketServer(i_port, host=i_ip_address)
    server.set_fn_new_client(i_new_client)
    server.set_fn_client_left(i_client_diconnected)
    server.set_fn_message_received(i_message_received)
    server.run_forever()
Ejemplo n.º 28
0
def start_server_task():
    ws = WebsocketServer(api_server_port)
    ws.set_fn_new_client(WebSoketAPIServerHandler.on_connected)
    ws.set_fn_client_left(WebSoketAPIServerHandler.on_disconnected)
    ws.set_fn_message_received(WebSoketAPIServerHandler.on_message)

    WebSoketAPIServerHandler.api_server = ws
    ws.run_forever()
Ejemplo n.º 29
0
def start_websocket():
    PORT=8020
    global server
    server = WebsocketServer(PORT)
    print('listenin websoket port:8020')
    server.set_fn_new_client(new_client)
    server.set_fn_client_left(client_left)
    server.run_forever()
Ejemplo n.º 30
0
 def start(self):
     logger.info("Starting WebSocket INDI server on %s:%s", self.address,
                 self.port)
     server = WebsocketServer(self.port, host=self.address)
     server.set_fn_new_client(self._new_client)
     server.set_fn_client_left(self._client_left)
     server.set_fn_message_received(self._message_received)
     server.run_forever()
Ejemplo n.º 31
0
class Server:
  """
  A Websocket server that polls a GSP's waitforchange RPC interface and
  pushes notifications to connected clients.
  """

  def __init__ (self, host, port, gspRpcUrl):
    self.srv = WebsocketServer (host=host, port=port, loglevel=logging.INFO)
    self.rpc = jsonrpclib.ServerProxy (gspRpcUrl)

  def run (self):
    """
    Starts the server, GSP polling thread and blocks forever while
    the server is running.
    """

    with self.pollingWorker ():
      self.srv.run_forever ()

  @contextmanager
  def pollingWorker (self):
    """
    Runs a new polling worker task in a managed context.  When the context
    is exited, the worker is stopped.
    """

    mut = threading.Lock ()
    shouldStop = False

    def loop ():
      knownBlock = ""
      while True:
        newBlock = self.rpc.waitforchange (knownBlock)
        if newBlock != knownBlock:
          self.pushNewBlock (newBlock)
          knownBlock = newBlock
        with mut:
          if shouldStop:
            return

    thread = threading.Thread (target=loop)
    thread.start ()

    try:
      yield
    finally:
      with mut:
        shouldStop = True
      thread.join ()

  def pushNewBlock (self, blockHash):
    data = {
      "jsonrpc": "2.0",
      "method": "newblock",
      "params": [blockHash],
    }
    msg = json.dumps (data, separators=(",", ":"))
    self.srv.send_message_to_all (msg)
Ejemplo n.º 32
0
def start_wss(port):
   "start the websocket test server"

   def reply_back(client, server, msg):
       server.send_message(client, "You sent: %s" % msg)

   server = WebsocketServer(port)
   server.set_fn_message_received(reply_back)
   server.run_forever()
Ejemplo n.º 33
0
def WsLapCounterServerLaunch():
	global wsLapCounterServer
	while 1:
		try:
			wsLapCounterServer = WebsocketServer( port=PORT_NUMBER + 2, host='' )
			wsLapCounterServer.set_fn_new_client( lap_counter_new_client )
			wsLapCounterServer.run_forever()
		except Exception as e:
			wsLapCounterServer = None
			time.sleep( 5 )
Ejemplo n.º 34
0
def WsServerLaunch():
	global wsServer
	while 1:
		try:
			wsServer = WebsocketServer( port=PORT_NUMBER + 1, host='' )
			wsServer.set_fn_message_received( message_received )
			wsServer.run_forever()
		except Exception as e:
			wsServer = None
			time.sleep( 5 )
Ejemplo n.º 35
0
def listen(courier, host, port):
    server = WebsocketServer(port)
    server.set_fn_new_client(notify_client)

    uthread = threading.Thread(target=updater, args=(courier, server))
    tthread = threading.Thread(target=v_timer, args=(server,))

    uthread.daemon = True
    tthread.daemon = True

    uthread.start()
    tthread.start()

    print("Starting WebSocket Server...")
    server.run_forever()
Ejemplo n.º 36
0
def start_server():
    """Start both the Game Manager and the Web Server"""

    # Prepare the web server with above functions
    logger.info("Init Web Socket Server")
    server = WebsocketServer(PORT, HOST)
    server.set_fn_new_client(onconnect)
    server.set_fn_client_left(ondisconnect)
    server.set_fn_message_received(onmessage)

    # Create a game manager
    logger.info("Init Game Manager")
    global manager
    manager = Manager(server)

    # Start the web server
    logger.info("Starting Server")
    server.run_forever()
    manager.safe_stop()
Ejemplo n.º 37
0
class IPCWebSocket(object):
    def __init__(self, ipc):
        self.ipc = ipc
        self.server = WebsocketServer(9000)
        self._set_callbacks(self.server)

        self.clients = []

    def start(self):
        from threading import Thread

        def run():
            self.server.run_forever()
        t = Thread(target=run)
        t.daemon = True
        t.start()

    def _set_callbacks(self, server):
        server.set_fn_new_client(self.on_connect)
        server.set_fn_client_left(self.on_disconnect)
        server.set_fn_message_received(self.on_message)

    def on_connect(self, client, server):
        print("New client connected")
        self.clients.append(client)

    def on_disconnect(self, client, server):
        print("Client disconnected")
        self.clients = [c for c in self.clients if c['id'] != client['id']]

    def on_message(self, client, server, message):
        message = json.loads(message)
        self.ipc.on_message(client, message)

    def broadcast(self, message):
        message = json.dumps(message)
        for c in self.clients:
            self.server.send_message(c, message)
        print("broadcasted message to {} clients".format(len(self.clients)))

    def send(self, client, message):
        self.server.send_message(client, json.dumps(message))
Ejemplo n.º 38
0
server = WebsocketServer(PORT)
manager = Manager(server)


# Called for every client connecting (after handshake)
def new_client(client, server):
    print("New client connected and was given id %d" % client['id'])


# Called for every client disconnecting
# @manager.user_logout
def client_left(client, server):
    manager.user_logout(client)
    print("Client disconnected")


# Called when a client sends a message
# @status_check
@manager.check_message
def message_received(client, server, message):
    print(message)


server.set_fn_new_client(new_client)
server.set_fn_client_left(client_left)
server.set_fn_message_received(message_received)
# clear all LoggedUsers
MenuUser.objects.all().delete()
# then run server
server.run_forever()
Ejemplo n.º 39
0
class websocketserver:

    cameras = {}
    tags = {}
    users = {}
    calibration = {}

    port=8001

    # Called for every client connecting (after handshake)
    def new_client_connection(self, client, server):
        print("New client connected and was given id %d" %  client['id'] +" and  address " + str(client['address']))
        server.send_message(client, "Client connected succesfully")


    # Called for every client disconnecting
    def client_left(self, client, server):
        print("Client(%d) disconnected" % client['id'])
        # Remove client from its list
        # TODO better delete (remove points etc...)

        if(str(client['address']) in self.cameras):
            print "Camera disconnected : " + str(client['address'])
            del self.cameras[str(client['address'])]

        elif(str(client['address']) in self.users):
            # Remove Tag assignement because User left
            print "User disconnected : " + str(client['address'])
            self.users[str(client['address'])].removeTag()
            del self.users[str(client['address'])]

        elif(str(client['address']) in self.calibration):
            print "Calibration disconnected : " + str(client['address'])
            del self.calibration[str(client['address'])]

        elif(str(client['address']) in self.tags):
            print "Tag disconnected : " + str(client['address'])
            # Remove Tag assignement to User because Tag left AND kill 3D point
            for key in self.users:
                if self.users[key].tag == self.tags[str(client['address'])]:
                    self.users[key].removeTag()
            del self.tags[str(client['address'])]


    # Called when a client sends a message
    def message_received(self, client, server, message):
        self.parseMessage(client, message)

    def __init__(self, host='127.0.0.1'):
        self.server = WebsocketServer(self.port, host)
        self.server.set_fn_new_client(self.new_client_connection)
        self.server.set_fn_client_left(self.client_left)
        self.server.set_fn_message_received(self.message_received)
        self.server.run_forever()


    def parseMessage(self, client, message):
        """
        Check who is the message from to redirect it to User / Tag / Camera / Calibration
        or create a new instance of User / Tag / Camera / Calibration
        :param client:
        :param message:
        :return:
        """
        if self.cameras.has_key(str(client['address'])):
            #print "Message from Camera"
            self.cameras[str(client['address'])].push(message)
            # Update all cameras counters
            #Todo: Change this method for checking all cameras for lost point (auto check inside point2D ?)
            for key in self.cameras.keys():
                self.cameras[key].update()

        elif self.users.has_key(str(client['address'])):
            print "Message from User"

        elif self.tags.has_key(str(client['address'])):
            print "Message from Tag"

        elif self.calibration.has_key(str(client['address'])):
            self.calibration[str(client['address'])].push(message)
            print "Message from Calibration"

        # This message is coming from an unknown client
        else:
            if message.split("-")[0] == "camera":
                self.cameras[str(client['address'])] = Camera(client, message.split("-")[1])
                # Add Observers linking every user to every camera's update
                for key in self.users:
                    if isinstance(self.users[key], User):
                        self.cameras[str(client['address'])].new2DPointNotifier.addObserver(self.users[key].position.newPoint2DObserver)
                        self.cameras[str(client['address'])].point2DdeletedNotifier.addObserver(self.users[key].position.point2DDeletedObserver)

            elif message.split("-")[0] == "tag":
                self.tags[str(client['address'])] = Tag(self.server, client, message.split("-")[1])
                for key in self.users:
                    if isinstance(self.users[key], User):
                        # Assign a Tag to User with no Tag
                        if self.users[key].tag == None:
                            self.users[key].setTag(self.tags[str(client['address'])])

            elif message.split("-")[0] == "user":
                user = User(self.server, client, message.split("-")[1])
                self.users[str(client['address'])] = user
                # Add Observers linking every user to every camera's update
                for key in self.cameras:
                    if isinstance(self.cameras[key], Camera):
                        self.cameras[key].new2DPointNotifier.addObserver(user.position.newPoint2DObserver)
                        self.cameras[key].point2DdeletedNotifier.addObserver(user.position.point2DDeletedObserver)

                for key in self.tags:
                    if isinstance(self.tags[key], Tag):
                        # Assign a Tag to new User
                        if self.tags[key].isAssigned() == False:
                            user.setTag(self.tags[key])

            elif message == "calibration":
                if(len(self.tags)>0):
                    self.calibration[str(client['address'])] = Calibration(self.server, client, self.cameras, self.tags.values()[0])
                else:
                    self.server.send_message(client, "Please connect a Tag first, and start Calibration again.")
Ejemplo n.º 40
0
def signal_handler(signal, frame):
	print('\nShutting down server..')

	global carIsConnected
	global runServer
	carConnectionSem.acquire()
	runServer = False

	# If car is not connected: connect to self as car then close connection
	# so thread will continue and check if it needs to stop
	if(not carIsConnected):
		s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
		s.connect(('127.0.0.1',carPort))
		s.close()

	carConnectionSem.release()

	sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)


# Start car communication thread
t = threading.Thread(target=communicateWithCar)
threads.append(t)
t.start()
print 'Listening on port', carPort, 'for car'

# Start websocket to communicate with client
websocket.run_forever()
Ejemplo n.º 41
0
def serve(port, host):
    from websocket_server import WebsocketServer
    from threading import Thread, Event
    import signal

    def message_received(client, server, message):
        print 'message_received:', message
        cmds = message.split('|')
        for cmd in cmds:
            if cmd.startswith('addr='):
                address = cmd[5:]
                if server.watched_addresses.has_key(address):
                    server.watched_addresses[address].append(client)
                else:
                    server.watched_addresses[address] = [client]
            if cmd == 'blocks':
                server.block_watchers.append(client)

    def client_left(client, server):
        print 'client_left:', client
        addrs = []
        for key in server.watched_addresses:
            if client in server.watched_addresses[key]:
                addrs.append(key)
        for addr in addrs:
            clients = server.watched_addresses[addr]
            clients.remove(client)
            if not clients:
                del server.watched_addresses[addr]
        if client in server.block_watchers:
            server.block_watchers.remove(client)

    def service_thread(ws_server, evt):
        from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
        from bitrisk.bitcoind_config import read_default_config
        import json
        import decimal
        config = read_default_config()
        testnet = ''
        if config.has_key('testnet'):
            testnet = config['testnet']
        rpc_user = config['rpcuser']
        rpc_password = config['rpcpassword']
        rpc_connection = AuthServiceProxy("http://%s:%s@%s:%s8332"%(rpc_user, rpc_password, host, testnet))
        
        conn = sqlite3.connect(db_filename)
        while not evt.wait(5):
            txs = get_db_txs(conn)
            for tx in txs:
                print 'tx:', tx
                tx = rpc_connection.gettransaction(tx)
                for details in tx['details']:
                    addr = details['address']
                    if ws_server.watched_addresses.has_key(addr):
                        def decimal_default(obj):
                            if isinstance(obj, decimal.Decimal):
                                return float(obj)
                            raise TypeError
                        msg = json.dumps(tx, default=decimal_default)
                        for client in ws_server.watched_addresses[addr]:
                            ws_server.send_message(client, msg)
            blocks = get_db_blocks(conn)
            for block in blocks:
                print 'block:', block
                for client in ws_server.block_watchers:
                    ws_server.send_message(client, block)

    server = WebsocketServer(port, host)
    server.watched_addresses = {}
    server.block_watchers = []
    server.set_fn_message_received(message_received)
    server.set_fn_client_left(client_left)
    evt = Event()
    thread = Thread(target=service_thread, args=(server, evt))

    thread.start()
    server.run_forever() # catches and exits on SIGINT
    evt.set() # stop service_thread
    thread.join()
Ejemplo n.º 42
0
class WSServer:
    def __init__(self, port=9007):
        self.port = port
        self.server = WebsocketServer(self.port, host='0.0.0.0')
        self.server.set_fn_new_client(self.on_connect)
        self.server.set_fn_message_received(self.on_msg)
        self.server.set_fn_client_left(self.on_disconnect)
        self.msg_lock = Lock()

    def ping(self):
        self.server.send_message_to_all(json.dumps({'action': 'ping'}))

        # pinging every 50 seconds to avoid disconnection
        t = Timer(50, self.ping)
        t.start()

    def on_connect(self, client, server):
        #server.send_message_to_all("Hey all, a new client has joined us")
        pass

    def on_disconnect(self, client, server):
        #server.send_message_to_all("Hey all, a new client has joined us")
        pass

    def on_msg(self, client, server, message):
        self.msg_lock.acquire()
        try:
            args = message.split(' ')
            command = args[0]
            args = args[1:]
            internal = 'internal_ws_' + command
            if hasattr(self, internal):
                getattr(self, internal)(client, *args)
            else:
                data = {'action': 'cmd', 'msg': 'not found'}
                self.server.send_message(client, json.dumps(data))
        except Exception as e:
            print("Error: ", e)

        connection.close()
        self.msg_lock.release()

    def run(self):
        self.ping()
        self.server.run_forever()

    def drop_seat(self, hold):
        session = hold.session
        layout = hold.layout

        row, col = hold.seat.split('-')
        data = {
            'action': 'drop',
            'session': session.id,
            'layout': layout.id,
            'row': row,
            'col': col,
        }

        hold.delete()

        confirmed = not session.is_seat_available(layout, row, col)
        if confirmed:
            data['action'] = 'confirm'

        self.server.send_message_to_all(json.dumps(data))

    def notify_confirmed(self):
        d = timezone.now()
        d = d - datetime.timedelta(seconds=80)
        holds = TicketSeatHold.objects.filter(date__gt=d, type="R")
        for h in holds:
            row, col = h.seat.split('-')
            data = {
                'action': 'confirm',
                'session': h.session.id,
                'layout': h.layout.id,
                'row': row,
                'col': col,
            }
            self.server.send_message_to_all(json.dumps(data))

    # Protocol definitions

    def internal_ws_autoseats(self, client, session, amount, user):
        session = Session.objects.get(id=session)
        seats = search_seats(session, int(amount))
        data = {
            'action': 'autoseat',
            'session': session.id,
            'seats': seats,
        }

        for s in seats:
            layout = SeatLayout.objects.get(id=s['layout'])
            seat = '{}-{}'.format(s['row'], s['col'])

            d2 = {
                'action': 'hold',
                'session': session.id,
                'layout': layout.id,
                'row': s['row'],
                'col': s['col'],
            }
            sh = TicketSeatHold(client=user,
                                layout=layout,
                                seat=seat,
                                session=session)
            sh.save()
            self.server.send_message_to_all(json.dumps(d2))

        if not seats:
            data['error'] = _('Not found contiguous seats, please, select manually using the green button')

        self.server.send_message(client, json.dumps(data))

    def internal_ws_get_events(self, client):
        events = serializers.serialize("json", Event.objects.all())
        self.server.send_message(client, events)

    def internal_ws_get_spaces(self, client, event):
        event = Event.objects.get(slug=event)
        spaces = serializers.serialize("json", event.spaces.all())
        self.server.send_message(client, spaces)

    def internal_ws_get_sessions(self, client, event, space):
        event = Event.objects.get(slug=event)
        space = event.spaces.get(slug=space)
        sessions = serializers.serialize("json", space.sessions.all())
        self.server.send_message(client, sessions)

    def internal_ws_hold_seat(self, client, session, layout, row, col, user):
        session = Session.objects.get(id=session)
        layout = SeatLayout.objects.get(id=layout)
        data = {
            'action': 'hold',
            'session': session.id,
            'layout': layout.id,
            'row': row,
            'col': col,
        }

        if not session.is_seat_holded(layout, row, col):
            seat = row + '-' + col
            sh = TicketSeatHold(client=user, layout=layout, seat=seat,
                                session=session)
            sh.save()
            self.server.send_message_to_all(json.dumps(data))
        else:
            data['action'] = 'holded'
            self.server.send_message(client, json.dumps(data))

    def internal_ws_drop_seat(self, client, session, layout, row, col, user):
        try:
            seat = row + '-' + col
            sh = TicketSeatHold.objects.get(client=user,
                                            type='H',
                                            layout=layout,
                                            seat=seat,
                                            session=session)
            self.drop_seat(sh)
        except:
            pass

    def internal_ws_add_ac(self, client, control, date, st):
        data = {
            'action': 'add_ac',
            'control': control,
            'date': date,
            'st': st,
        }
        log = LogAccessControl(access_control=AccessControl.objects.get(slug=control), status=st)
        log.save()
        self.server.send_message_to_all(json.dumps(data))

    def internal_ws_add_sale(self, client, window, date, payment, amount, price):
        data = {
            'action': 'add_sale',
            'window': window,
            'date': date,
            'payment': payment,
            'amount': amount,
            'price': price
        }
        self.server.send_message_to_all(json.dumps(data))

    def internal_ws_add_change(self, client, window, date, payment, amount, price):
        data = {
            'action': 'add_change',
            'window': window,
            'date': date,
            'payment': payment,
            'amount': amount,
            'price': price
        }
        self.server.send_message_to_all(json.dumps(data))
Ejemplo n.º 43
0
 def __init__(self, host='127.0.0.1'):
     server = WebsocketServer(self.port, host)
     server.set_fn_new_client(self.new_client_connection)
     server.set_fn_client_left(self.client_left)
     server.set_fn_message_received(self.message_received)
     server.run_forever()
Ejemplo n.º 44
0
class websocketserver:

    cameras = {}
    tags = {}
    users = {}
    calibration = {}

    port=8001

    # Called for every client connecting (after handshake)
    def new_client_connection(self, client, server):
        print("New client connected and was given id %d" %  client['id'] +" and  address " + str(client['address']))
        server.send_message(client, "Client connected succesfully")


    # Called for every client disconnecting
    def client_left(self, client, server):
        print("Client(%d) disconnected" % client['id'])
        #TODO : Remove from list

    # Called when a client sends a message
    def message_received(self, client, server, message):
#        print("Client(%d) said: %s" % (client['id'], message))
        self.parseMessage(client, message)

    def __init__(self, host='127.0.0.1'):
        self.server = WebsocketServer(self.port, host)
        self.server.set_fn_new_client(self.new_client_connection)
        self.server.set_fn_client_left(self.client_left)
        self.server.set_fn_message_received(self.message_received)
        self.server.run_forever()


    def parseMessage(self, client, message):
        """
        Check who is the message from to redirect it to User / Tag / Camera / Calibration
        or create a new instance of User / Tag / Camera / Calibration
        :param client:
        :param message:
        :return:
        """
        if self.cameras.has_key(str(client['address'])):
            #print "Message from Camera"
            self.cameras[str(client['address'])].push(message)

        elif self.users.has_key(str(client['address'])):
            print "Message from User"

        elif self.tags.has_key(str(client['address'])):
            print "Message from Tag"

        elif self.calibration.has_key(str(client['address'])):
            self.calibration[str(client['address'])].push(message)
            print "Message from Calibration"

        # This message is coming from an unknown client
        else:
            if message.split("-")[0] == "camera":
                self.cameras[str(client['address'])] = Camera(client, message.split("-")[1])
                # Add Observers linking every user to every camera's update
                for key in self.users:
                    if isinstance(self.users[key], User):
                        self.cameras[str(client['address'])].new2DPointNotifier.addObserver(self.users[key].position.newPoint2DObserver)
                        self.cameras[str(client['address'])].point2DdeletedNotifier.addObserver(self.users[key].position.point2DDeletedObserver)

            elif message.split("-")[0] == "tag":
                print "Hello TAG"
                # TODO

            elif message.split("-")[0] == "user":
                user = User(client, self.server, message.split("-")[1])
                self.users[str(client['address'])] = user
                # Add Observers linking every user to every camera's update
                for key in self.cameras:
                    if isinstance(self.cameras[key], Camera):
                        self.cameras[key].new2DPointNotifier.addObserver(user.position.newPoint2DObserver)
                        self.cameras[key].point2DdeletedNotifier.addObserver(user.position.point2DDeletedObserver)

            elif message == "calibration":
                self.calibration[str(client['address'])] = Calibration(self.cameras, self.server, client)
Ejemplo n.º 45
0
def webServer():
    
    usersfd = open("users.json", "r") 
    users = json.load(usersfd)
    usersfd.close()

    def new_client(client, server):
        print("New client connected and was given id %d" % client['id'])

    def client_left(client, server):
        print("Client(%d) disconnected" % client['id'])

    def message_received(client, server, message):
        #print("received message from client id %d " %  client['id'])
        #logging.info("received message from client id %d " %  client['id'])
        msg = json.loads(message)

        if msg["action"] == AUTHENTICATE:
            print 'msg is AUTHENTICATE' 
            resp = {"action": AUTHENTICATE, "data": None}
            username = msg["data"].get("username") if msg["data"].has_key("username") else None
            password = msg["data"].get("password") if msg["data"].has_key("password") else None

            if username and password and users.has_key(username) and password == users[username]:
                print "AUTHSUCCESS"
                resp["data"] = AUTHSUCCESS
            else:
                print "AUTHFAIL"
                resp["data"] = AUTHFAIL
                
            server.send_message(client, json.dumps(resp) )
            
        elif msg["action"] == GETBANNEDIPs:
            #print 'msg is GETBANNEDIPs' 
            #logging.info('msg is GETBANNEDIPs')
            resp = {"action": GETBANNEDIPs, "data": []}
            username = msg["data"].get("username") if msg["data"].has_key("username") else None
            password = msg["data"].get("password") if msg["data"].has_key("password") else None

            if username and password and users.has_key(username) and password == users[username]:
                for bannedIP in bannedIPs.values():
                    ip = {}
                    ip["IP"] = bannedIP.IP
                    ip["time"] = time.strftime("%b %d %H:%M:%S", time.localtime(bannedIP.time))
                    ip["timer"] = bannedIP.timer - (time.time() - bannedIP.time)
                    ip["service"] = bannedIP.service
                    resp["data"].append(ip)
                server.send_message(client, json.dumps(resp))
            else:
                print "AUTHFAIL"
                resp["data"] = AUTHFAIL
                server.send_message(client, json.dumps(resp))
        
        elif msg["action"] == GETFAILEDATTEMPTs:
            print 'msg is GETFAILEDATTEMPTs' 
            resp = {"action": GETFAILEDATTEMPTs, "data": []}
            username = msg["data"].get("username") if msg["data"].has_key("username") else None
            password = msg["data"].get("password") if msg["data"].has_key("password") else None
            if username and password and users.has_key(username) and password == users[username]:
                for failedAttempt in failedAttempts:
                    print "in FA"
                    print "FA=" + str(failedAttempt)
                    ip = {}
                    ip["IP"] = failedAttempt[0]
                    ip["attempts"] = []
                    ip["service"] = failedAttempt[1] 
                    for attempt in failedAttempts[failedAttempt]:
                        ip["attempts"].append(time.strftime("%b %d %H:%M:%S", time.localtime(attempt.time)))
                        
                    resp["data"].append(ip)

                server.send_message(client, json.dumps(resp))
            else:
                print "AUTHFAIL"
                resp["data"] = AUTHFAIL
                server.send_message(client, json.dumps(resp))

        elif msg["action"] == UNBANIPs:
            print 'msg is UNBANIPs'
            resp = {"action": UNBANIPs, "data": {}}
            username = msg["data"].get("username") if msg["data"].has_key("username") else None
            password = msg["data"].get("password") if msg["data"].has_key("password") else None
            if username and password and users.has_key(username) and password == users[username]:
	        unbanIP(msg["data"]["IP"], msg["data"]["service"])
	        resp["data"]["IP"] = msg["data"]["IP"]
	        resp["data"]["service"] = msg["data"]["service"]
                server.send_message(client, json.dumps(resp))
            else:
                print "AUTHFAIL"
                resp["data"] = AUTHFAIL
                server.send_message(client, json.dumps(resp))
	elif msg["action"] == CHANGECONFIG:
	    print 'msg is CHANGECONFIG'
            #changeconfig(bantimer,nofailedattempts,failinterval)
            data = msg["data"]
            for service in services.values():
                if service.name.lower() == data.get("service").lower():
                    changeConfig(data.get("bantimer"), data.get("threshold"), data.get("interval"), service)
            #server.send_message(client, json.dumps(resp))
	    


    
    global server        
    PORT=9001
    server = WebsocketServer(PORT, host='0.0.0.0')
    server.set_fn_new_client(new_client)
    server.set_fn_client_left(client_left)
    server.set_fn_message_received(message_received)
    server.run_forever()
Ejemplo n.º 46
0
ws_server.set_fn_new_client(new_client)
ws_server.set_fn_message_received(message_received)

class ConnectionListener:
    def __init__(self):
        self._first_disconnect = True # we want to ignore the first disconnect event as it's always disconnected at init

    def connected(self, table):
        print("NetworksTables connected to", table)
        shared_dict["robot_status"] = "connected"
        ws_server.send_message_to_all(json.dumps(shared_dict))

        # we may have form data to send to the table while we were disconnected, so update it
        for key, value in shared_dict["form"].items():
            table.putValue(key, value)

    def disconnected(self, table):
        if self._first_disconnect:
            self._first_disconnect = False
            return

        print("NetworkTabes disconnected from", table)
        shared_dict["robot_status"] = "disconnected"
        ws_server.send_message_to_all(json.dumps(shared_dict))

networktable = networktables_client.setup(config["robot_ip"], config["networktable"], ConnectionListener)

ws_server.run_forever() # we could throw this off to a seperate thread too, but then the main thread would have nothing to do

print("Exiting")