Beispiel #1
0
 def joinChannel(self, channelId):
   log.debug("Joining channel " + str(channelId))
   us = UserState()
   us.session=self.session
   us.channel_id=channelId
   try:
     self.sendMessage(MessageType.UserState, us)
     self.currentChannel=channelId
   except:
     log.error("Could not join channel")
Beispiel #2
0
 def setComment(self, comment):
   log.debug("Setting comment to: " + comment)
   us = UserState()
   us.session = self.session
   us.comment = comment
   self.sendMessage(MessageType.UserState, us)
Beispiel #3
0
  def __processMessage(self, msgType, message):
    '''A message was received from the server, so process it.
       The msgType is the type of message that was received.
       The message is a ProtoBuf message that was received.
    '''

    log.debug("Processing Message...")
    log.debug(MessageType.StringLookupTable[msgType])
    if msgType == MessageType.UDPTunnel or msgType == MessageType.Ping:
      log.debug("Got Ping or UDPTunnel. Ignoring")
      return
    if msgType == MessageType.CodecVersion:
      oldCanSpeak = self.canSpeak
      cv = CodecVersion()
      cv.ParseFromString(message)   
      log.debug("alpha = " + str(cv.alpha))
      log.debug("beta = " + str(cv.beta))
      if cv.alpha != None and cv.alpha == supportedCodec:
        self.codec = CODEC_ALPHA
      elif cv.beta != None and cv.beta == supportedCodec:
        self.codec = CODEC_BETA
      self.canSpeak = self.canSpeak and (self.codec != CODEC_NOCODEC)
      if self.canSpeak != oldCanSpeak:
        self.connectionObserver.currentUserUpdated()
    elif msgType == MessageType.ServerSync:
      ss = ServerSync()
      ss.ParseFromString(message)
      self.session=ss.session
      self.authenticated = True
      u = self.__findUser(self.session)
      self.currentChannel = u['channel_id']
      self.pingThread = PingThread(self)
      self.pingThread.start()
      us = UserState()
      us.session=self.session
      self.connectionObserver.setConnectionState(ConnectionState.Connected)
      self.connectionObserver.serverSyncCompleted()
    elif msgType == MessageType.ChannelState:
      cs = ChannelState()
      cs.ParseFromString(message)
      c = self.findChannel(cs.channel_id)
      if c != None:
        c['name'] = cs.name
        return
      self.channelList.append({'channel_id':cs.channel_id,'name':cs.name})
    elif msgType == MessageType.ChannelRemove:
      cr = ChannelRemove()
      cr.ParseFromString(message)
      # to do
    elif msgType == MessageType.UserState:
      us = UserState()
      us.ParseFromString(message)
      u = self.__findUser(us.session)
      if u != None:
        if us.channel_id != None:
          u['channel_id'] = us.channel_id
          if us.session == self.session:
            self.currentChannel = u['channel_id']
        if us.session == self.session:
          if us.mute != None:
            self.canSpeak = not us.mute
          if us.suppress != None:
            self.canSpeak = not us.suppress
        return
      self.userList.append({'session_id':us.session,'name':us.name,'channel_id':us.channel_id})
    elif msgType == MessageType.UserRemove:
      pass
    elif msgType == MessageType.TextMessage:
      pass
    elif msgType == MessageType.Version:
      pass
    elif msgType == MessageType.ServerConfig:
      sc = ServerConfig()
      sc.ParseFromString(message)
      msgLength = sc.message_length
      if msgLength > 0:
        welcome_msg = self.__readFully(msgLength)
        log.debug(welcome_msg)
      imageMsgLength = sc.image_message_length
      if imageMsgLength > 0:
        welcome_image = self.__readFully(imageMsgLength)
    elif msgType == MessageType.CryptSetup:
      cs = CryptSetup()
      cs.ParseFromString(message)
      self.key = cs.key
      self.encrypt_iv = cs.server_nonce
      self.decrypt_iv = cs.client_nonce 
      if self.key != None and self.encrypt_iv != None and self.decrypt_iv != None:
        self.CryptState.setKey(self.key, self.encrypt_iv, self.decrypt_iv)
    else:
      log.debug("unhandled message type: " + str(msgType))