def _single_event_notify(self, event): """ returns False if game is over, True otherwise """ is_game_over = False clients_to_remove = [] if not isinstance(event, e.TickEvent): for client in self.clients: try: client.root_obj.callRemote("notify", event) except pb.DeadReferenceError: # if isinstance(event, e.BeginTurnEvent) and client.client_id == event.client_id: # end_of_turn_event = e.EndTurnEvent(client.client_id,event.time_left) # end_of_turn_event.name = end_of_turn_event.name + " DEAD CLIENT, saw begin turn" # event_to_launch = end_of_turn_event # else: #incase it was the clients turn when they left. # end_of_turn_event = e.EndTurnEvent(client.client_id, 30) # end_of_turn_event.name = end_of_turn_event.name + " DEAD CLIENT, No begin turn" # event_to_launch = end_of_turn_event clients_to_remove.append(client) self.game_stack.notify(event) #let it generate begin event for client in clients_to_remove: print "removing client:", client.client_id, client.nickname self.clients.remove(client) self.model.players_order.remove_player(client.client_id) self.post(e.EndTurnEvent(client.client_id, 30)) if self.clients == []: self.game_over_callback() self.looping_call_clients.stop() self.looping_call_self.stop() print "GAME OVER" is_game_over = True return is_game_over
def _single_event_notify(self, event): """ Notifies clients of a single event. Removes clients if they are dead and updates game appropriately. """ clients_to_remove = [] if not isinstance( event, e.TickEvent ): #I shouldn't be seeing any tick events, can remove later for client in self.clients: try: client.root_obj.callRemote("notify", event) except pb.DeadReferenceError: clients_to_remove.append(client) if isinstance(event, e.QuitEvent): print event.client_id, " is quitting" #f**k effeciency, get readability! for client in self.clients: if client.client_id == event.client_id and client not in clients_to_remove: clients_to_remove.append(client) self.game_stack.notify( event) #let it generate begin event (if it was going to) for client in clients_to_remove: print "removing", client.client_id, client.nickname self.clients.remove(client) print "before self.model.players_order", self.model.players_order._order self.model.players_order.remove_all_item(client.client_id) print "after self.model.players_order", self.model.players_order._order ev = e.EndTurnEvent(client.client_id, self.model.time_left) ev.penis = True self.post(ev) self.obs_notify(event)
def callRemote(self,crap,event): print event.name if isinstance(event, e.BeginTurnEvent): sleep(.5) print " Player: ", event.player, " /// word: ", event.word time_used = float(randint(3,8)) print " I had: ", event.time_left, "s. After going I have: ", str(event.time_left - time_used) fun = evm.post value = e.EndTurnEvent(event.player, event.time_left - time_used) reactor.callLater(1.5, fun, value)