def enviar_serealizado(conn,
                       message,
                       tipo='text',
                       destinatario='',
                       comando='MESSAGE',
                       user=''):

    obj_enviar = Message()
    obj_enviar.user = user
    obj_enviar.command = comando
    obj_enviar.message = message
    obj_enviar.type = tipo
    obj_enviar.destinatario = destinatario
    conn.send(pickle.dumps(obj_enviar))
def server_receive_save_file(client, message, threadId):
    global the_file
    destinatario = None
    received_file_name = message  # recebe o nome do arquivo enviado
    saved_file_name = f'{threadId}.jpg'  # gera nome único para salvar o arquivo recebido

    # se não existir, cria o diretório onde será salvo os arquivos no servidor
    if not path.isdir('server_files'):
        try:
            os.mkdir('server_files', 777)
        except:
            pass

    # abre um arquio para salvar no servidor
    arq = open(f'server_files{os.path.sep}{saved_file_name}', 'wb')

    # inicia a escrita do novo arquivo
    cont = 0
    while message:
        if cont > 0:
            # na primeria iteração pula, pois é onde recebeu o nome do arquivo
            # ao receber a flag b'done' finaliza a escrita
            if cont == 1:
                destinatario = message.decode()
            elif message == b'done':
                break
            else:
                arq.write(message)
            message = client.recv(1024)
        else:
            # pulo a primeira msg (no do arquivo)
            message = client.recv(1024)
        cont = cont + 1

    # fecha o arquivo
    arq.close()
    time.sleep(.5)

    # após salvar o arquivo no servidor, notifica os destinatários
    # para que os mesmos setem onde querem salvar lá no ambiente deles
    # o cliente notificará após isso, para que o servidor possa prosseguir

    message = Message()

    if destinatario != None and destinatario != 'None':
        message.destinatario = destinatario
    message.command = 'REQUEST_PATH'

    message.message = f'{received_file_name.decode()}'

    message.user = get_login_by_client(client)

    #print(message.message)
    broadcast(client,
              message.message,
              destinatario=destinatario,
              comando=message.command,
              user=message.user)

    # salva globalmente o nome do arquivo enviado e o nome do arquivo salvo no servidor
    # essa informação será usada no próximo passo (ao enviar para os destinatários)

    the_file = [saved_file_name, received_file_name]

    # log envio de arquivo
    server_log(client, f'Arquivo: {received_file_name.decode()}', destinatario)