| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import socket, sys, datetime, threading, json
-
- class Server:
- def __init__(self):
- self.version = 1.0
- print("Server version: {}".format(self.version))
- self.motd = "cubey"
- self.color = 0xe973ea
- self.users = []
-
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- print("Created socket object")
-
- self.ip = "0.0.0.0"
- self.port = 1337
- self.address = (self.ip, self.port)
- self.sock.bind(self.address)
- print("Server started up on {}".format(self.address))
-
- def send(self, data, client):
- data = json.dumps(data).encode()
- self.sock.sendto(data, client)
-
- def send_all(self, data):
- for user in self.users:
- self.send(data, user)
-
- def connection(self, address, connecting_client_name):
- print("New connection from {}".format(address))
- a = {"header":"connection",
- "motd":self.motd,
- "color":self.color,
- "client name":connecting_client_name}
- print(">> " + connecting_client_name + " <<")
- self.users.append(address)
- self.send_all(a)
-
- def run(self):
- while True:
- try:
- data, addr = self.sock.recvfrom(65507)
- a = json.loads(data)
- header = a["header"]
- client_name = a["client name"]
-
- if header == "connection":
- self.connection(addr, client_name)
- elif header == "message":
- message = a["message"]
- print(client_name + " >> " + message)
- response = {"header":"response",
- "message":message,
- "color":0xffffff,
- "client name":client_name}
- if addr not in self.users:
- self.users.append(addr)
- self.send_all(response)
- except OSError:
- return
-
- class Commands:
- def __init__(self):
- self.commands={"test":self.test,
- "stop":self.stop}
- self.running = True
-
- def test(self):
- print("this is a test command")
-
- def stop(self):
- print("Stopping server...")
- server.sock.close()
- server_thread.join()
- self.running = False
-
- def run(self):
- while self.running:
- command = input()
- if command in self.commands:
- self.commands[command]()
- else:
- print("Unknown command")
-
- server = Server()
- commands = Commands()
-
- server_thread = threading.Thread(target = server.run)
- commands_thread = threading.Thread(target = commands.run)
-
- server_thread.start()
- commands_thread.start()
|