def __init__(self, master_ip, master_port, max_clients): self.authentication_model = AuthenticationModel() self.servers_model = ServersModel() self.punitive_model = PunitiveModel() self.stats_model = StatsModel() self.socket_manager = SocketManager(master_ip, master_port, max_clients) ####################################### # connect up our signals ####################################### # SocketManager self.socket_manager.started.connect(self.on_started) self.socket_manager.stopped.connect(self.on_stopped) self.socket_manager.connect.connect(self.on_connect) self.socket_manager.request.connect(self.on_request) self.socket_manager.disconnect.connect(self.on_disconnect) # ServersModel self.servers_model.challenge.connect(self.on_challenge) self.servers_model.accept.connect(self.on_accept) self.servers_model.deny.connect(self.on_deny) # AuthenticationModel self.authentication_model.challenge.connect(self.on_auth_challenge) self.authentication_model.accept.connect(self.on_auth_accept) self.authentication_model.deny.connect(self.on_auth_deny) # PunitiveModel self.punitive_model.update.connect(self.on_punitive_effect_update) self.punitive_model.remove.connect(self.on_punitive_effect_remove) ####################################### # start up the socket_manager ####################################### self.socket_manager.run()
class Controller(object): def __init__(self, master_ip, master_port, max_clients): self.authentication_model = AuthenticationModel() self.servers_model = ServersModel() self.punitive_model = PunitiveModel() self.stats_model = StatsModel() self.socket_manager = SocketManager(master_ip, master_port, max_clients) ####################################### # connect up our signals ####################################### # SocketManager self.socket_manager.started.connect(self.on_started) self.socket_manager.stopped.connect(self.on_stopped) self.socket_manager.connect.connect(self.on_connect) self.socket_manager.request.connect(self.on_request) self.socket_manager.disconnect.connect(self.on_disconnect) # ServersModel self.servers_model.challenge.connect(self.on_challenge) self.servers_model.accept.connect(self.on_accept) self.servers_model.deny.connect(self.on_deny) # AuthenticationModel self.authentication_model.challenge.connect(self.on_auth_challenge) self.authentication_model.accept.connect(self.on_auth_accept) self.authentication_model.deny.connect(self.on_auth_deny) # PunitiveModel self.punitive_model.update.connect(self.on_punitive_effect_update) self.punitive_model.remove.connect(self.on_punitive_effect_remove) ####################################### # start up the socket_manager ####################################### self.socket_manager.run() def on_started(self, ip, port): print "Master server started." print "Listening on (%s, %s)." % (str(ip), str(port)) print "Press Ctrl-c to exit." def on_stopped(self): print "\nMaster server stopped." def on_connect(self, client): print "client connected %s" % str(client.address) def on_request(self, client, data): print "client request %s:" % str(client.address), data """ #inbound messages list = list servers sr = server registration sc = server confirmation ar = authentication request ac = authentication confirmation eu = effect update er = effect remove sd = stats data #outbound messages rc = registration challenge rs = registration success rf = registration failure ac = authentication challenge as = authentication success af = authentication failure na = names add nr = names remove eu = effect update er = effect remove """ if data[0] == "list": servers_list = self.servers_model.get_server_list() client.send(servers_list) if data[0] == "sr": self.servers_model.register_server(client, data[1], data[2]) elif data[0] == "sc": self.servers_model.confirm_server(client, data[1]) elif not self.servers_model.is_server_confirmed(client): client.disconnect() return else: if data[0] == "ar": self.authentication_model.request_authentication(client, data[1], data[2]) elif data[0] == "ac": self.authentication_model.confirm_authentication(client, data[1], data[2]) elif data[0] == "ec": self.punitive_model.create_effect(client, *data[1:]) elif data[0] == "sd": self.punitive_model.add_data(client, data) def on_disconnect(self, client): print "client disconnected %s" % str(client.address) def on_challenge(self, client, challenge): message = "rc %s\n" % challenge client.send(message) def on_accept(self, client): client.unlimit() effect_list = self.punitive_model.get_effect_list() names_list = self.authentication_model.get_name_list() message = "".join(("rs\n", effect_list, names_list)) client.send(message) def on_deny(self, client): client.send("rf\n") client.disconnect() def on_auth_challenge(self, client, authid, challenge): message = "ac %s %s\n" % (authid, challenge) client.send(message) def on_auth_accept(self, client, authid, userid, groups, names): message = "as %d %d %s %s\n" % (authid, userid, ",".join(groups), ",".join(names)) client.send(message) def on_auth_deny(self, client, authid): message = "af %s\n" % authid client.send(message) def on_punitive_effect_update(self, effect_id, effect_type, target_ip, target_mask, reason): message = "eu %d %d %s %s %s\n" % (effect_id, effect_type, target_ip, target_mask, reason) self.servers_model.broadcast(message) def on_punitive_effect_remove(self, effect_id): message = "er %d\n" % effect_id self.server_model.broadcast(message)