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")
def setComment(self, comment): log.debug("Setting comment to: " + comment) us = UserState() us.session = self.session us.comment = comment self.sendMessage(MessageType.UserState, us)
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))