summaryrefslogblamecommitdiff
path: root/server.py
blob: caa77e4f11551fcb86f2617b6e4fd8b2e745cc95 (plain) (tree)






































































































                                                                           
#!/usr/bin/python3

import threading, time, json, ssl
#from simple_websocket_server import WebSocketServer, WebSocket
from websock import WebSocketServer, WebSocket
#from endpoint import MainEndpoint

###############################################################
# Configuration
f=open("pass.json", "r")
p=json.load(f)
f.close()

PORT=p["PORT"]
clients = []

###############################################################
# Main Class
class WebSocketConn(WebSocket):
    def handle(self):
        global clients
        """
          Called when websocket frame is received.
          To access the frame data call self.data.
          i.e. The client sent us a message \o/

          If the frame is Text then self.data is a unicode object.
          If the frame is Binary then self.data is a bytearray object.
        """
        for client in clients:
            if client != self:
                client.send_message(self.address[0] + u' - ' + self.data)

    def connected(self):
        global clients
        """
          Called when a websocket client connects to the server.
        """
        print(self.address, 'connected')
        for client in clients:
            print(repr(client))
            client.send_message(self.address[0] + u' - connected')

        if (False):
            close(self, status=1000, reason='Unrecognized')
        else:
            clients.append(self)

    def handle_close(self):
        global clients
        """
          Called when a websocket server gets a Close frame from a client.
        """
        clients.remove(self)
        print(self.address, 'closed')
        for client in clients:
            client.send_message(self.address[0] + u' - disconnected')

    ##########################
    # Useful functions:
    # send_message()
    # send_fragment_start() / send_fragment() / send_fragment_end()
    #  
    ##########################


def MainWebsocket():
    server = WebSocketServer('', PORT, WebSocketConn,
                             certfile="certificate.pem", keyfile="key.pem")
    print("Begin Secure Websocket at %d" % PORT)


    t = threading.Thread(target=server.serve_forever)
    t.daemon = True # Main server should not be a daemon?
    t.start()
    return
    #while True:
    #    time.sleep(86400)

# Broadcast function
def sendmsg(m, t="raw"):
    global clients
    # Format message according to type
    if t == "ping":
        msg="pong"
    else:
        msg=u"%s" % m

    # Send message
    for c in clients:
        c.send_message(msg)
    return

###############################################################
# Begin stuff
print("Starting...")
MainWebsocket()
print("Please wait...")
time.sleep(15)
print("Terminating!")