示例#1
0
 def end(self):
     if self.ended:
         return
     notification_center = NotificationCenter()
     if self._xmpp_muc_session is not None:
         notification_center.remove_observer(self,
                                             sender=self._xmpp_muc_session)
         # Send indication that the user has been kicked from the room
         sender = Identity(
             FrozenURI(self.sip_identity.uri.user,
                       self.sip_identity.uri.host, self.nickname))
         stanza = MUCAvailabilityPresence(sender,
                                          self.xmpp_identity,
                                          available=False)
         stanza.jid = self.xmpp_identity
         stanza.muc_statuses.append('307')
         xmpp_manager = XMPPManager()
         xmpp_manager.send_muc_stanza(stanza)
         self._xmpp_muc_session.end()
         self._xmpp_muc_session = None
     if self._sip_session is not None:
         notification_center.remove_observer(self, sender=self._sip_session)
         self._sip_session.end()
         self._sip_session = None
     self.ended = True
     notification_center.post_notification('X2SMucHandlerDidEnd',
                                           sender=self)
示例#2
0
 def unavailableReceived(self, stanza):
     sender_uri = FrozenURI.parse('xmpp:'+stanza.element['from'])
     sender = Identity(sender_uri)
     recipient_uri = FrozenURI.parse('xmpp:'+stanza.element['to'])
     recipient = Identity(recipient_uri)
     id = stanza.element.getAttribute('id')
     presence_stanza = MUCAvailabilityPresence(sender, recipient, available=False, id=id)
     NotificationCenter().post_notification('XMPPMucGotPresenceAvailability', sender=self.parent, data=NotificationData(presence_stanza=presence_stanza))
示例#3
0
 def _NH_SIPSessionGotConferenceInfo(self, notification):
     # Translate to XMPP payload
     xmpp_manager = XMPPManager()
     own_uri = FrozenURI(self.xmpp_identity.uri.user,
                         self.xmpp_identity.uri.host)
     conference_info = notification.data.conference_info
     new_participants = set()
     for user in conference_info.users:
         user_uri = FrozenURI.parse(user.entity if user.entity.startswith((
             'sip:', 'sips:')) else 'sip:' + user.entity)
         nickname = user.display_text.value if user.display_text else user.entity
         new_participants.add((user_uri, nickname))
     # Remove participants that are no longer in the room
     for uri, nickname in self._participants - new_participants:
         sender = Identity(
             FrozenURI(self.sip_identity.uri.user,
                       self.sip_identity.uri.host, nickname))
         stanza = MUCAvailabilityPresence(sender,
                                          self.xmpp_identity,
                                          available=False)
         xmpp_manager.send_muc_stanza(stanza)
     # Send presence for current participants
     for uri, nickname in new_participants:
         if uri == own_uri:
             continue
         sender = Identity(
             FrozenURI(self.sip_identity.uri.user,
                       self.sip_identity.uri.host, nickname))
         stanza = MUCAvailabilityPresence(sender,
                                          self.xmpp_identity,
                                          available=True)
         stanza.jid = Identity(uri)
         xmpp_manager.send_muc_stanza(stanza)
     self._participants = new_participants
     # Send own status last
     sender = Identity(
         FrozenURI(self.sip_identity.uri.user, self.sip_identity.uri.host,
                   self.nickname))
     stanza = MUCAvailabilityPresence(sender,
                                      self.xmpp_identity,
                                      available=True)
     stanza.jid = self.xmpp_identity
     stanza.muc_statuses.append('110')
     xmpp_manager.send_muc_stanza(stanza)