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)
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
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')
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
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' )