boilerplate

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import socket, sys, datetime, threading, json
  2. class Client:
  3. def __init__(self):
  4. self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  5. print("Created socket object")
  6. self.client_name = "CLI"
  7. self.server_ip = "cubes.link"
  8. self.server_port = 1337
  9. self.server_address = (self.server_ip, self.server_port)
  10. a = {"header":"connection",
  11. "client name":self.client_name}
  12. self.send(a, self.server_address)
  13. def send(self, data, addr):
  14. data = json.dumps(data).encode()
  15. self.sock.sendto(data, addr)
  16. def run(self):
  17. while True:
  18. data, addr = self.sock.recvfrom(65507)
  19. a = json.loads(data)
  20. header = a["header"]
  21. if header == "response":
  22. message = a["message"]
  23. client_name = a["client name"]
  24. print(client_name + " >> " + message)
  25. elif header == "connection":
  26. motd = a["motd"]
  27. client_name = a["client name"]
  28. print(">> " + client_name + " <<")
  29. class Commands:
  30. def __init__(self):
  31. self.commands={"test":self.test,
  32. "stop":self.stop}
  33. self.running = True
  34. def test(self, params):
  35. print("this is a test command")
  36. def stop(self, params):
  37. print("this doesn't do anything rn")
  38. def run(self):
  39. while self.running:
  40. text = input()
  41. if text[0] == "/":
  42. parts = text.split(" ")
  43. command = parts[0].strip("/")
  44. params = parts.pop(0)
  45. if command in self.commands:
  46. self.commands[command](params)
  47. else:
  48. a = {"header":"message",
  49. "message":text,
  50. "client name":client.client_name}
  51. client.send(a, client.server_address)
  52. client = Client()
  53. commands = Commands()
  54. client_thread = threading.Thread(target = client.run)
  55. commands_thread = threading.Thread(target = commands.run)
  56. client_thread.start()
  57. commands_thread.start()