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
예제 #2
0
    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)
예제 #3
0
 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)