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)