Anders and Briegel in Python
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
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()