diff --git a/server/server.py b/server/server.py new file mode 100644 index 0000000..a6a4aa6 --- /dev/null +++ b/server/server.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +import asyncio +import datetime +import websockets +import pprint + +#server config +ip = "127.0.0.1" +port = 8080 + +#global vars +clients = set() + +@asyncio.coroutine +def sendMsg(socket, msg): + print ("info>send>begin:\n" + msg + "\ninfo>send>end") + yield from socket.send(msg) + +@asyncio.coroutine +def broadcast(msg): + + command = msg.split("###"); + print("info>broadcasting msg(" + str(len(msg)) + ") command=" + command[0]) + + for client in clients: + + print("info>broadcast>send to" + str(client.remote_address)) + yield from client.send(msg) + +@asyncio.coroutine +def client_connect(websocket, path): + print("info>Client connected:" + str(websocket.remote_address)); + clients.add(websocket) + + try: + while True: + msg = yield from websocket.recv() + + command = msg.split("###"); + + pprint.pprint(command) + + if command[0] == "fileOp": + print("info>got filop"); + + if command[1] == "read": + print("info>fileop> got read") + print("info>fileop>read:" + command[2]) + + f = open(command[2], "r") + content = f.read() + f.close() + + print("reading done") + + #send content + #yield from sendMsg(websocket, "file###" + command[2] + "###" + content) + yield from broadcast("file###" + command[2] + "###" + content); + + elif command[1] == "write": + f = open(command[2], "w") + f.write(command[3]) + f.close() + + yield from broadcast("file###" + command[2] + "###" + command[3]) + + else: + yield from broadcast(msg) + + except: + print("info>client disconnected:" + path); + clients.remove(websocket) + #raise + +print("info>starting server " + ip + ":" + str(port)) +server = websockets.serve(client_connect, ip, port) + +print ("info>go into loop") +asyncio.get_event_loop().run_until_complete(server) +asyncio.get_event_loop().run_forever()