示例#1
0
 def remove_queued_interaction(self, interaction):
     if not interaction.visible:
         return
     for (index, cur_info) in enumerate(self._queued_interactions):
         while interaction.id == cur_info.interaction_id:
             logger.debug('SimId:{}, Interaction Remove(from queue) is being removed from queued list:{}', self._sim.id, interaction)
             if interaction.user_canceled:
                 with telemetry_helper.begin_hook(writer, TELEMETRY_HOOK_INTERACTION_CANCEL, sim=self._sim) as hook:
                     hook.write_int('idit', interaction.id)
                     hook.write_int('queu', index)
             int_info = self._queued_interactions.pop(index)
             interaction_messages.send_interactions_remove_msg(self._sim, (int_info,), int_info.ui_state == Sims_pb2.IQ_QUEUED)
             return
     for int_info in self._running_interactions:
         while interaction.id == int_info.interaction_id and int_info.ui_state == Sims_pb2.IQ_TRANSITIONING:
             previous_visible_group_info_id = self._get_visible_grouped_interaction_id(int_info.interaction_id)
             group_interactions = self._remove_running_interactions(int_info)
             self._remove_routing_interaction_info(int_info)
             if group_interactions:
                 new_visible_interaction_info = group_interactions.pop()
                 if previous_visible_group_info_id == new_visible_interaction_info.interaction_id:
                     return
                 if new_visible_interaction_info.ui_state == Sims_pb2.IQ_RUNNING:
                     interaction_messages.send_interaction_replace_message(self._sim, int_info.interaction_id, new_visible_interaction_info, self._should_msg_be_immediate(self.QueueType.Super))
                 else:
                     interaction_messages.send_interactions_add_msg(self._sim, (new_visible_interaction_info,), self._should_msg_be_immediate(self.QueueType.Super))
             else:
                 interaction_messages.send_interactions_remove_msg(self._sim, (int_info,), immediate=interaction.collapsible)
             return
     for (index, cur_info) in enumerate(self._continuation_interactions):
         while interaction.id == cur_info.interaction_id:
             logger.debug('SimId:{}, Interaction Remove(from queue) is being removed from continuation list:{}', self._sim.id, interaction)
             self._continuation_interactions.pop(index)
             return
     logger.debug('Interaction Remove(from Queue) requested on an interaction not in the ui_manager:{}', interaction)
 def remove_queued_interaction(self, interaction):
     if not interaction.visible:
         return
     for (index, cur_info) in enumerate(self._queued_interactions):
         while interaction.id == cur_info.interaction_id:
             logger.debug(
                 'SimId:{}, Interaction Remove(from queue) is being removed from queued list:{}',
                 self._sim.id, interaction)
             if interaction.user_canceled:
                 with telemetry_helper.begin_hook(
                         writer,
                         TELEMETRY_HOOK_INTERACTION_CANCEL,
                         sim=self._sim) as hook:
                     hook.write_int('idit', interaction.id)
                     hook.write_int('queu', index)
             int_info = self._queued_interactions.pop(index)
             interaction_messages.send_interactions_remove_msg(
                 self._sim, (int_info, ),
                 int_info.ui_state == Sims_pb2.IQ_QUEUED)
             return
     for int_info in self._running_interactions:
         while interaction.id == int_info.interaction_id and int_info.ui_state == Sims_pb2.IQ_TRANSITIONING:
             previous_visible_group_info_id = self._get_visible_grouped_interaction_id(
                 int_info.interaction_id)
             group_interactions = self._remove_running_interactions(
                 int_info)
             self._remove_routing_interaction_info(int_info)
             if group_interactions:
                 new_visible_interaction_info = group_interactions.pop()
                 if previous_visible_group_info_id == new_visible_interaction_info.interaction_id:
                     return
                 if new_visible_interaction_info.ui_state == Sims_pb2.IQ_RUNNING:
                     interaction_messages.send_interaction_replace_message(
                         self._sim, int_info.interaction_id,
                         new_visible_interaction_info,
                         self._should_msg_be_immediate(
                             self.QueueType.Super))
                 else:
                     interaction_messages.send_interactions_add_msg(
                         self._sim, (new_visible_interaction_info, ),
                         self._should_msg_be_immediate(
                             self.QueueType.Super))
             else:
                 interaction_messages.send_interactions_remove_msg(
                     self._sim, (int_info, ),
                     immediate=interaction.collapsible)
             return
     for (index, cur_info) in enumerate(self._continuation_interactions):
         while interaction.id == cur_info.interaction_id:
             logger.debug(
                 'SimId:{}, Interaction Remove(from queue) is being removed from continuation list:{}',
                 self._sim.id, interaction)
             self._continuation_interactions.pop(index)
             return
     logger.debug(
         'Interaction Remove(from Queue) requested on an interaction not in the ui_manager:{}',
         interaction)
示例#3
0
 def running_transition(self, interaction):
     if not interaction.visible:
         return
     interaction_id = interaction.id
     for int_info in self._continuation_interactions:
         if int_info.interaction_id != interaction_id:
             continue
         int_info.ui_state = Sims_pb2.IQ_TRANSITIONING
         return
     int_info = None
     running_info_for_group = None
     previous_visible_group_info_id = None
     for (i, int_info) in enumerate(self._queued_interactions):
         if int_info.interaction_id != interaction_id:
             continue
         int_info.ui_state = Sims_pb2.IQ_TRANSITIONING
         next_index = i + 1
         if next_index < len(self._queued_interactions):
             self._queued_interactions[next_index].insert_after_id = 0
         previous_visible_group_info_id = self._get_visible_grouped_interaction_id(
             int_info.interaction_id)
         self._queued_interactions.remove(int_info)
         running_info_for_group = self._add_running_interaction(int_info)
         break
     else:
         logger.debug(
             'SimId:{}, Interaction being marked as transitioning is not in queued interaction:{}',
             self._sim.id, interaction)
         return
     logger.debug('SimId:{}, Interaction being marked as transitioning:{}',
                  self._sim.id, interaction)
     should_be_immediate = self._should_msg_be_immediate(
         self.QueueType.Super)
     if running_info_for_group is None or previous_visible_group_info_id is None:
         self._add_routing_interaction_info(int_info)
         if int_info.client_notified:
             interaction_messages.send_interactions_update_msg(
                 self._sim, (int_info, ), should_be_immediate)
         else:
             interaction_messages.send_interactions_add_msg(
                 self._sim, (int_info, ), should_be_immediate)
             int_info.client_notified = True
     else:
         visible_int_info = running_info_for_group.pop()
         if int_info.client_notified:
             if visible_int_info is int_info:
                 self._update_mixers(previous_visible_group_info_id,
                                     visible_int_info.interaction_id)
             interaction_messages.send_interactions_remove_msg(
                 self._sim, (int_info, ), should_be_immediate)
         if visible_int_info is int_info:
             interaction_messages.send_interaction_replace_message(
                 self._sim, previous_visible_group_info_id, int_info,
                 should_be_immediate)
             int_info.client_notified = True
示例#4
0
 def remove_from_si_state(self, interaction):
     self._update_skillbar_info(interaction, from_remove=True)
     interaction_id = interaction.id
     if not interaction.visible:
         return
     logger.debug('SimId:{}, Interaction Remove From SI State attempting to remove:{}', self._sim.id, interaction)
     for cur_info in self._running_interactions:
         if interaction_id != cur_info.interaction_id:
             pass
         int_info = cur_info
         group_interactions = self._remove_running_interactions(int_info)
         continuation_info = self._find_continuation(int_info.interaction_id)
         if continuation_info:
             logger.debug('=== Continuation Replace In Remove: ({0} => {1})', int_info.interaction_id, continuation_info.interaction_id)
             if continuation_info.client_notified:
                 logger.error('Trying to replace an interaction that client is already notified. {}, {}', int_info, continuation_info)
             else:
                 if continuation_info.ui_state == Sims_pb2.IQ_TRANSITIONING:
                     self._add_running_interaction(int_info)
                 else:
                     self._queued_interactions.insert(0, continuation_info)
                 interaction = self._sim.queue.find_interaction_by_id(continuation_info.interaction_id)
                 if interaction is not None and not interaction.get_sims_with_invalid_paths():
                     continuation_info.ui_state = Sims_pb2.IQ_TRANSITIONING
                     interaction_messages.send_interaction_replace_message(self._sim, int_info.interaction_id, continuation_info, self._should_msg_be_immediate(self.QueueType.Super))
                 else:
                     interaction_messages.send_interactions_remove_msg(self._sim, (int_info,), self._should_msg_be_immediate(self.QueueType.Super))
                     interaction_messages.send_interactions_add_msg(self._sim, (continuation_info,), self._should_msg_be_immediate(self.QueueType.Super))
                 continuation_info.client_notified = True
                 for interaction_info in tuple(self._continuation_interactions):
                     while interaction_info.source_id == interaction_id:
                         if interaction_info.ui_state == Sims_pb2.IQ_TRANSITIONING:
                             self._add_running_interaction(interaction_info)
                         else:
                             self._queued_interactions.insert(0, interaction_info)
                             interaction_info.ui_state = Sims_pb2.IQ_TRANSITIONING
                         self._continuation_interactions.remove(interaction_info)
                         interaction_messages.send_interactions_add_msg(self._sim, (interaction_info,), self._should_msg_be_immediate(self.QueueType.Super))
                         interaction_info.client_notified = True
         else:
             logger.debug('=== SimId:{}, Sending Remove MSG for:{}', self._sim.id, interaction)
             self._remove_routing_interaction_info(int_info)
             self._update_routing_interaction_info(int_info)
             if self._last_running_interaction_id == int_info.interaction_id:
                 self._last_running_interaction_id = 0
             interaction_messages.send_interactions_remove_msg(self._sim, (int_info,), self._should_msg_be_immediate(self.QueueType.Super))
             if group_interactions:
                 interaction_messages.send_interactions_add_msg(self._sim, (group_interactions.pop(),), self._should_msg_be_immediate(self.QueueType.Super))
     logger.debug('=== Interaction Remove(from SI state) requested on an interaction not in the running interaction list')
示例#5
0
 def running_transition(self, interaction):
     if not interaction.visible:
         return
     interaction_id = interaction.id
     for int_info in self._continuation_interactions:
         if int_info.interaction_id != interaction_id:
             pass
         int_info.ui_state = Sims_pb2.IQ_TRANSITIONING
     int_info = None
     running_info_for_group = None
     previous_visible_group_info_id = None
     for (i, int_info) in enumerate(self._queued_interactions):
         if int_info.interaction_id != interaction_id:
             pass
         int_info.ui_state = Sims_pb2.IQ_TRANSITIONING
         next_index = i + 1
         if next_index < len(self._queued_interactions):
             self._queued_interactions[next_index].insert_after_id = 0
         previous_visible_group_info_id = self._get_visible_grouped_interaction_id(int_info.interaction_id)
         self._queued_interactions.remove(int_info)
         running_info_for_group = self._add_running_interaction(int_info)
         break
     logger.debug('SimId:{}, Interaction being marked as transitioning is not in queued interaction:{}', self._sim.id, interaction)
     return
     logger.debug('SimId:{}, Interaction being marked as transitioning:{}', self._sim.id, interaction)
     should_be_immediate = self._should_msg_be_immediate(self.QueueType.Super)
     if running_info_for_group is None or previous_visible_group_info_id is None:
         self._add_routing_interaction_info(int_info)
         if int_info.client_notified:
             interaction_messages.send_interactions_update_msg(self._sim, (int_info,), should_be_immediate)
         else:
             interaction_messages.send_interactions_add_msg(self._sim, (int_info,), should_be_immediate)
             int_info.client_notified = True
     else:
         visible_int_info = running_info_for_group.pop()
         if int_info.client_notified:
             if visible_int_info is int_info:
                 self._update_mixers(previous_visible_group_info_id, visible_int_info.interaction_id)
             interaction_messages.send_interactions_remove_msg(self._sim, (int_info,), should_be_immediate)
         if visible_int_info is int_info:
             interaction_messages.send_interaction_replace_message(self._sim, previous_visible_group_info_id, int_info, should_be_immediate)
             int_info.client_notified = True
示例#6
0
 def remove_from_si_state(self, interaction):
     self._update_skillbar_info(interaction, from_remove=True)
     interaction_id = interaction.id
     if not interaction.visible:
         return
     logger.debug(
         'SimId:{}, Interaction Remove From SI State attempting to remove:{}',
         self._sim.id, interaction)
     for cur_info in self._running_interactions:
         if interaction_id != cur_info.interaction_id:
             continue
         int_info = cur_info
         replace_id = self._get_visible_grouped_interaction_id(
             int_info.interaction_id) or int_info.interaction_id
         group_interactions = self._remove_running_interactions(int_info)
         continuation_info = self._find_continuation(
             int_info.interaction_id)
         if continuation_info:
             logger.debug(
                 '=== Continuation Replace In Remove: ({0} => {1})',
                 int_info.interaction_id, continuation_info.interaction_id)
             if continuation_info.client_notified:
                 logger.error(
                     'Trying to replace an interaction that client is already notified. {}, {}',
                     int_info, continuation_info)
             else:
                 if continuation_info.ui_state == Sims_pb2.IQ_TRANSITIONING:
                     self._add_running_interaction(continuation_info)
                 else:
                     self._queued_interactions.insert(0, continuation_info)
                 interaction = self._sim.queue.find_interaction_by_id(
                     continuation_info.interaction_id)
                 if interaction is not None and not interaction.get_sims_with_invalid_paths(
                 ):
                     continuation_info.ui_state = Sims_pb2.IQ_TRANSITIONING
                     interaction_messages.send_interaction_replace_message(
                         self._sim, replace_id, continuation_info,
                         self._should_msg_be_immediate(
                             self.QueueType.Super))
                 continuation_info.client_notified = True
                 for interaction_info in tuple(
                         self._continuation_interactions):
                     if interaction_info.source_id == interaction_id:
                         if interaction_info.ui_state == Sims_pb2.IQ_TRANSITIONING:
                             self._add_running_interaction(interaction_info)
                         else:
                             self._queued_interactions.insert(
                                 0, interaction_info)
                             interaction_info.ui_state = Sims_pb2.IQ_TRANSITIONING
                         self._continuation_interactions.remove(
                             interaction_info)
                         interaction_messages.send_interactions_add_msg(
                             self._sim, (interaction_info, ),
                             self._should_msg_be_immediate(
                                 self.QueueType.Super))
                         interaction_info.client_notified = True
         else:
             logger.debug('=== SimId:{}, Sending Remove MSG for:{}',
                          self._sim.id, interaction)
             self._remove_routing_interaction_info(int_info)
             self._update_routing_interaction_info(int_info)
             if self._last_running_interaction_id == int_info.interaction_id:
                 self._last_running_interaction_id = 0
             interaction_messages.send_interactions_remove_msg(
                 self._sim, (int_info, ),
                 self._should_msg_be_immediate(self.QueueType.Super))
             if group_interactions:
                 interaction_messages.send_interactions_add_msg(
                     self._sim, (group_interactions.pop(), ),
                     self._should_msg_be_immediate(self.QueueType.Super))
         return
     if self._remove_continuation_interaction(interaction.id):
         logger.debug(
             'SimId:{}, Interaction Remove(from si_state) is being removed from continuation list:{}',
             self._sim.id, interaction)
         return
     logger.debug(
         '=== Interaction Remove(from SI state) requested on an interaction not in the running interaction list'
     )