Anders and Briegel in Python
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.

73 lignes
2.2KB

  1. '''
  2. The MIT License (MIT)
  3. Copyright (c) 2013 Dave P.
  4. '''
  5. import signal
  6. import sys
  7. import ssl
  8. from SimpleWebSocketServer import WebSocket, SimpleWebSocketServer, SimpleSSLWebSocketServer
  9. from optparse import OptionParser
  10. class SimpleEcho(WebSocket):
  11. def handleMessage(self):
  12. print self.data
  13. self.sendMessage(self.data)
  14. def handleConnected(self):
  15. pass
  16. def handleClose(self):
  17. pass
  18. clients = []
  19. class SimpleChat(WebSocket):
  20. def handleMessage(self):
  21. for client in clients:
  22. if client != self:
  23. client.sendMessage(self.address[0] + u' - ' + self.data)
  24. def handleConnected(self):
  25. print (self.address, 'connected')
  26. for client in clients:
  27. client.sendMessage(self.address[0] + u' - connected')
  28. clients.append(self)
  29. def handleClose(self):
  30. clients.remove(self)
  31. print (self.address, 'closed')
  32. for client in clients:
  33. client.sendMessage(self.address[0] + u' - disconnected')
  34. if __name__ == "__main__":
  35. parser = OptionParser(usage="usage: %prog [options]", version="%prog 1.0")
  36. parser.add_option("--host", default='', type='string', action="store", dest="host", help="hostname (localhost)")
  37. parser.add_option("--port", default=8000, type='int', action="store", dest="port", help="port (8000)")
  38. parser.add_option("--example", default='echo', type='string', action="store", dest="example", help="echo, chat")
  39. parser.add_option("--ssl", default=0, type='int', action="store", dest="ssl", help="ssl (1: on, 0: off (default))")
  40. parser.add_option("--cert", default='./cert.pem', type='string', action="store", dest="cert", help="cert (./cert.pem)")
  41. parser.add_option("--ver", default=ssl.PROTOCOL_TLSv1, type=int, action="store", dest="ver", help="ssl version")
  42. (options, args) = parser.parse_args()
  43. cls = SimpleEcho
  44. if options.example == 'chat':
  45. cls = SimpleChat
  46. if options.ssl == 1:
  47. server = SimpleSSLWebSocketServer(options.host, options.port, cls, options.cert, options.cert, version=options.ver)
  48. else:
  49. server = SimpleWebSocketServer(options.host, options.port, cls)
  50. def close_sig_handler(signal, frame):
  51. server.close()
  52. sys.exit()
  53. signal.signal(signal.SIGINT, close_sig_handler)
  54. server.serveforever()