broadcast.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import socket
  2. import threading
  3. import config as cfg
  4. LenFunc = cfg.LenFunc
  5. class Broadcast():
  6. def __init__(self, parser, socket,child):
  7. """ ,broadcast """ # TODO Broadcast
  8. self.socket = socket
  9. self.parser = parser
  10. self.child = child
  11. t1 = threading.Thread(target=self.listen)
  12. t1.start()
  13. print("Broadcast created")
  14. def listen(self):
  15. while True:
  16. data, addr = self.socket.recvfrom(1024)
  17. d = self.parser.toJSON(data.decode("utf-8")[LenFunc:])
  18. print("\033[92m \n \treceive",d," \n\tfrom",addr,"\n\033[0m")
  19. self.parser.parser(d,addr,self.child)
  20. def send(self, message, addr):
  21. self.socket.sendto(bytes(message,'utf-8'), addr )
  22. print("\033[95m \n \tsended to ",addr,"\n\tdata: ",message,"\n\033[0m")
  23. class BroadcastServer(Broadcast):
  24. def __init__(self, broadcastPort, parser,id):
  25. """ ,broadcast """ # TODO Broadcast
  26. self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  27. self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  28. self.socket.bind(('', broadcastPort)) # TODO Broadcast
  29. self.id = id
  30. super().__init__(parser,self.socket,self)
  31. class BroadcastClient(Broadcast):
  32. def __init__(self,broadcast, broadcastPort, parser,id):
  33. self.addr = (broadcast,broadcastPort)
  34. self.onlineOracles=[]
  35. self.id = id
  36. self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  37. self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  38. super().__init__(parser,self.socket,self)