From 7250279ce040c984f2dd59c006dd532e3f36efbd Mon Sep 17 00:00:00 2001 From: taynpg Date: Sat, 14 Dec 2024 18:20:58 +0800 Subject: [PATCH] =?UTF-8?q?debug=EF=BC=9A=E5=88=9D=E6=AD=A5=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=BC=A0=E4=B8=80=E4=B8=AA=E6=96=87=E4=BB=B6=EF=BC=88?= =?UTF-8?q?=E6=9C=89BUG=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/client.cpp | 21 +++++++++++++-------- client/client.h | 3 ++- server/server.cpp | 3 +++ util/util.cpp | 1 + 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/client/client.cpp b/client/client.cpp index ee31e4a..5bb1c43 100644 --- a/client/client.cpp +++ b/client/client.cpp @@ -241,9 +241,8 @@ void CClient::handle_frame(CFrameBuffer* buf) if (buf->mark_ != 0) { break; } - std::string* key = new std::string(); - key->append(buf->fid_); - send_pool_->submit([&]() { send_file_data_th(key); }); + work_key_ = buf->fid_; + send_pool_->submit([&]() { send_file_data_th(); }); break; } // 能接收到 TRANS 一定是客户端(这里不是指Server) @@ -283,7 +282,11 @@ void CClient::handle_frame(CFrameBuffer* buf) break; } case TYPE_TRANS_DONE: { - fclose(down_->file_); + logger_->warn("Trans done, close file {}.", down_->cur_file_); + if (down_->file_) { + fclose(down_->file_); + down_->file_ = nullptr; + } down_->trans_state_ = TRANS_DONE; break; } @@ -292,9 +295,9 @@ void CClient::handle_frame(CFrameBuffer* buf) } } -void CClient::send_file_data_th(std::string* key) +void CClient::send_file_data_th() { - std::string str_key = *key; + std::string str_key = work_key_; std::shared_ptr t = nullptr; { @@ -306,15 +309,16 @@ void CClient::send_file_data_th(std::string* key) t = up_[str_key]; } + logger_->info("Start Trans File {} To {}", t->cur_file_, str_key); std::shared_ptr buf = std::make_shared(); buf->type_ = TYPE_TRANS_FILE; buf->tid_ = str_key; buf->data_ = new char[1024]{}; + buf->mark_ = 1; while (!feof(t->file_)) { buf->len_ = fread(buf->data_, 1, 1024, t->file_); if (!send_frame(buf.get())) { logger_->error("send_file_data_th send failed."); - delete key; return; } } @@ -323,5 +327,6 @@ void CClient::send_file_data_th(std::string* key) if (!send_frame(buf.get())) { logger_->error("send_file_data_th send DONE failed."); } - delete key; + cancel_trans_file(str_key); + logger_->debug("Trans File {} To {} Done !!!", t->cur_file_, str_key); } diff --git a/client/client.h b/client/client.h index a6dcb47..5e300eb 100644 --- a/client/client.h +++ b/client/client.h @@ -50,7 +50,7 @@ private: private: void handle_frame(CFrameBuffer* buf); - void send_file_data_th(std::string* key); + void send_file_data_th(); private: std::shared_ptr logger_; @@ -62,4 +62,5 @@ private: std::map> up_; std::mutex mutex_; std::shared_ptr send_pool_; + std::string work_key_; }; \ No newline at end of file diff --git a/server/server.cpp b/server/server.cpp index 935652f..13db00c 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -169,12 +169,15 @@ void CTcpServer::handle_frame() } if (client_map_.count(buf->fid_)) { auto& cli = client_map_[buf->fid_]; + buf->mark_ = 1; + buf->fid_ = buf->tid_; if (!send_frame(cli->socket_, buf)) { logger_->error("[{}] turn fid_ failed to {}", buf->fid_, buf->tid_); } } break; }; + case TYPE_TRANS_DONE: case TYPE_READY_TRANS: case TYPE_TRANS_FILE: { std::lock_guard lock(cli_mut_); diff --git a/util/util.cpp b/util/util.cpp index 35cefad..851372f 100644 --- a/util/util.cpp +++ b/util/util.cpp @@ -59,6 +59,7 @@ CFrameBuffer* CTransProtocal::parse(CMutBuffer& buffer) } result = new CFrameBuffer(); result->data_ = new char[len]; + std::memset(result->data_, 0x0, len); result->len_ = len; result->fid_ = std::string(buffer.get_data() + find + 2 + 2 + 1); result->tid_ = std::string(buffer.get_data() + find + 2 + 2 + 1 + 32);