Python-ELMO is a Python library which offers an encapsulation of the binary tool ELMO, in order to manipulate it easily in Python and SageMath script.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

servicethread.py 2.5KB

  1. import threading
  2. from protocol import Protocol, ClosureException
  3. import socket
  4. class ServiceThread(threading.Thread):
  5. def run(self):
  6. self.execute()
  7. def execute(self):
  8. # Method where the service runs
  9. pass
  10. class OneShotServiceThread(ServiceThread):
  11. def __init__(self, ip, port, clientsocket):
  12. threading.Thread.__init__(self)
  13. self.ip = ip
  14. self.port = port
  15. self.clientsocket = clientsocket
  16. self.protocol = Protocol(clientsocket)
  17. def run(self):
  18. try:
  19. self.execute()
  20. except ClosureException:
  21. return
  22. def execute(self):
  23. # Method where the service runs
  24. pass
  25. class PermanentServiceThread(ServiceThread):
  26. def __init__(self):
  27. threading.Thread.__init__(self)
  28. self._is_running = True
  29. def is_running(self):
  30. return self._is_running
  31. def stop(self):
  32. self._is_running = False
  33. class ListeningThread(PermanentServiceThread):
  34. def __init__(self, host, port, threadclass, **kwargs):
  35. super().__init__()
  36. self.hostname = host
  37. self.port = port
  38. self.threadclass = threadclass
  39. self.kwargs = kwargs
  40. def execute(self):
  41. self.tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  42. self.tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  43. self.tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
  44. # self.tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_ATTACH_REUSEPORT_CBPF, 1)
  45. self.tcpsock.bind((self.hostname, self.port))
  46. self.tcpsock.listen(5)
  47. print('[port][%s] Listening' % self.port)
  48. while self.is_running():
  49. try:
  50. (clientsocket, (ip, port)) = self.tcpsock.accept()
  51. print('[port][{}] Accepted: {} <=> {}'.format(
  52. self.port,
  53. clientsocket.getsockname(),
  54. clientsocket.getpeername(),
  55. ))
  56. newthread = self.threadclass(ip, port, clientsocket, **self.kwargs)
  57. newthread.start()
  58. except socket.timeout:
  59. pass
  60. def stop(self):
  61. super().stop()
  62. clientsocker = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  63. clientsocker.connect( (self.hostname, self.port) )
  64. self.tcpsock.close()
  65. print('[port][%s] Stop listening' % self.port)