Ok, een korte vervolgblog. Als je de "on_connect" en "on_disconnect" niet override van "miniboa", dan houdt hij zelf de clients bij in een dictionary "clients" en via een functie "client_list". Ik heb mijn servertje dus aangepast om deze lijsten zelf aan te beheren. Ik vind deze versie van de code beter.
from miniboa import TelnetServer
class Server(TelnetServer): def __init__(self): TelnetServer.__init__(self) def shutdown(self): self.server_socket.close() def run(self): while True: self.poll() def poll(self): TelnetServer.poll(self) for client in self.client_list(): if client.active and client.cmd_ready: self.on_command(client) def broadcast(self, msg): for client in self.client_list(): client.send(msg + "n") def register_client(self, client): self.client_list().append(client) def unregister_client(self, client): self.client_list().remove(client)
def RunServer(): server = CreateServer() try: server.run() except KeyboardInterrupt: pass finally: server.shutdown()
def CreateServer(): server = Server() server.on_connect = lambda client: my_on_connect (server, client) server.on_disconnect = lambda client: my_on_disconnect(server, client) server.on_command = lambda client: my_on_command (server, client) return server
def my_on_connect(server, client): server.register_client(client)
def my_on_disconnect(server, client): server.unregister_client(client)
def my_on_command(server, client): cmd = client.get_command() server.broadcast(msg=cmd)
RunServer()
07-03-2012, 00:00
Geschreven door Fibergeek 
|