Anders and Briegel in Python
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

73 líneas
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()