importtime,sysfromapscheduler.schedulerimportSchedulerimportthreadingimportsocketfromtwisted.internetimportreactorfromtwisted.pythonimportlogfromtwisted.web.serverimportSitefromtwisted.web.staticimportFilefromautobahn.websocketimportWebSocketServerFactory,\WebSocketServerProtocol,\
listenWSclassprocess(threading.Thread):def__init__(self,buffer3):threading.Thread.__init__(self)self.setDaemon(True)self.buffer3=buffer3defrun(self):factory.broadcast("I don't know what I'm doing!")classBroadcastServerProtocol(WebSocketServerProtocol):defonOpen(self):self.factory.register(self)defonMessage(self,msg,binary):ifnotbinary:self.factory.broadcast("'%s' from %s"%(msg,self.peerstr))defconnectionLost(self,reason):WebSocketServerProtocol.connectionLost(self,reason)self.factory.unregister(self)classBroadcastServerFactory(WebSocketServerFactory):"""
Simple broadcast server broadcasting any message it receives to all
currently connected clients.
"""def__init__(self,url,debug=False,debugCodePaths=False):WebSocketServerFactory.__init__(self,url,debug=debug,debugCodePaths=debugCodePaths)self.clients=[]self.tickcount=0self.tick()deftick(self):self.tickcount+=1self.broadcast("'tick %d' from server"%self.tickcount)reactor.callLater(1,self.tick)defregister(self,client):ifnotclientinself.clients:print"registered client "+client.peerstr
self.clients.append(client)defunregister(self,client):ifclientinself.clients:print"unregistered client "+client.peerstr
self.clients.remove(client)defbroadcast(self,msg):print"broadcasting message '%s' .."%msgforcinself.clients:c.sendMessage(msg)print"message sent to "+c.peerstrclassBroadcastPreparedServerFactory(BroadcastServerFactory):"""
Functionally same as above, but optimized broadcast using
prepareMessage and sendPreparedMessage.
"""defbroadcast(self,msg):print"broadcasting prepared message '%s' .."%msg
preparedMsg=self.prepareMessage(msg)forcinself.clients:c.sendPreparedMessage(preparedMsg)print"prepared message sent to "+c.peerstrdeftesting():buffer2-"hello"myDisplay=process(buffer2)myDisplay.start()if__name__=='__main__':iflen(sys.argv)>1andsys.argv[1]=='debug':log.startLogging(sys.stdout)debug=Trueelse:debug=Falselevel_scheduler=Scheduler()level_scheduler.add_interval_job(testing,seconds=5)level_scheduler.start()#ServerFactory = BroadcastServerFactoryServerFactory=BroadcastPreparedServerFactoryfactory=ServerFactory("ws://localhost:9000",debug=debug,debugCodePaths=debug)factory.protocol=BroadcastServerProtocolfactory.setProtocolOptions(allowHixie76=True)listenWS(factory)webdir=File(".")web=Site(webdir)reactor.listenTCP(8080,web)reactor.run()