class ServicoClienteMensageiro(ServicoConversaCliente):
    listaClientesAtualizada = pyqtSignal(list)
    dadosUsuarioAtualizado = pyqtSignal(Usuario)
    conectado = pyqtSignal(bool)
    def __init__(self, portaReceber=45455, portaResponder=45456, parent=None):
        super().__init__(portaReceber=portaReceber, portaResponder=portaResponder, ipServidor=conf.IP_SERVIDOR, parent=parent)
        
        self._servicoConexao = ServicoConexaoCliente(self)
        self._servicoConexao.conectadoServidor.connect(self._emitirConectadoEAtualizarUsuarios)

        self._usuarioAtual = Usuario()
        self._usuarioAtual.load()

        self._enviarInformacaoUsuario()

    def _receberInformacaoTipoValor(self, de, tipo, valor):
        if tipo == _ServicoMensageiro.LISTA_USUARIOS:
            self.listaClientesAtualizada.emit(valor)
        elif tipo == _ServicoMensageiro.USUARIO_ALTERADO:
            self.dadosUsuarioAtualizado.emit(valor.copy())
        elif tipo == _ServicoMensageiro.PEDIR_DADOS:
            self._enviarInformacaoUsuario()

        super()._receberInformacaoTipoValor(de, tipo, valor)

    def _emitirConectadoEAtualizarUsuarios(self, con):
        self.conectado.emit(con)
        if con:
            self.atualizarDadosUsuarios()

    def atualizarDadosUsuarios(self):
        self._enviarInformacaoServidor(_ServicoMensageiro.PEDIR_DADOS)

    def estaConectado(self):
        return self._servicoConexao.estaConectado()

    def _enviarInformacaoUsuario(self):
        if self._servicoConexao.estaConectado():
            self._enviarInformacaoServidor(_ServicoMensageiro.DADOS_USUARIO, self._usuarioAtual)

    def setNome(self, nome):
        if nome != self.getNome():
            self._usuarioAtual.setNome(nome)
            self._usuarioAtual.save()
            self._enviarInformacaoUsuario()

    def getNome(self):
        return self._usuarioAtual.getNome()

    def setStatus(self, status):
        if status != self.getStatus():
            self._usuarioAtual.setStatus(status)
            self._usuarioAtual.save()
            self._enviarInformacaoUsuario()

    def getStatus(self):
        return self._usuarioAtual.getStatus()
    def __init__(self, portaReceber=45455, portaResponder=45456, parent=None):
        super().__init__(portaReceber=portaReceber, portaResponder=portaResponder, ipServidor=conf.IP_SERVIDOR, parent=parent)
        
        self._servicoConexao = ServicoConexaoCliente(self)
        self._servicoConexao.conectadoServidor.connect(self._emitirConectadoEAtualizarUsuarios)

        self._usuarioAtual = Usuario()
        self._usuarioAtual.load()

        self._enviarInformacaoUsuario()