From f0778e045b8d002807f988fd0429f8a7acf8490c Mon Sep 17 00:00:00 2001 From: taynpg Date: Tue, 21 Jan 2025 22:10:15 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=AD=A3Unix=E7=BC=96?= =?UTF-8?q?=E8=AF=91=EF=BC=8C=E6=A3=80=E6=B5=8Bupdate=20busy=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/client.cpp | 22 +++++++++++++++++----- util/util.h | 5 +++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/client/client.cpp b/client/client.cpp index 231a20c..d60c9f8 100644 --- a/client/client.cpp +++ b/client/client.cpp @@ -448,7 +448,11 @@ bool CClient::check_update_list(const std::string& content, std::mapdata_, buf->len_); std::map files; - if (check_update_list(content, files)) { - buf->type_ = TYPE_CONFIRM_UPDATE_LIST; + if (down_ && down_->trans_state_ == TRANS_REDAY) { + buf->type_ = TYPE_BUSY_UPDATE_LIST; } else { - buf->type_ = TYPE_UNCONFIRM_UPDATE_LIST; + std::string content(buf->data_, buf->len_); + if (check_update_list(content, files)) { + buf->type_ = TYPE_CONFIRM_UPDATE_LIST; + } else { + buf->type_ = TYPE_UNCONFIRM_UPDATE_LIST; + } } std::swap(buf->tid_, buf->fid_); if (!send_frame(buf)) { mperror("Send Failed {}.", __LINE__); break; } - if (buf->type_ == TYPE_UNCONFIRM_UPDATE_LIST) { + if (buf->type_ != TYPE_CONFIRM_UPDATE_LIST) { break; } list_serve_id_ = buf->tid_; @@ -658,6 +666,10 @@ void CClient::handle_frame(CFrameBuffer* buf) mpinfo("remote {} do task {} failed!", buf->fid_, list_file_); break; } + case TYPE_BUSY_UPDATE_LIST: { + mpinfo("remote {} are busy, will not exec task {}", buf->fid_, list_file_); + break; + } case TYPE_FILE_SIZE: { std::string str_size(buf->data_, buf->len_); long long size = std::stoll(str_size); diff --git a/util/util.h b/util/util.h index 2fad040..ba98657 100644 --- a/util/util.h +++ b/util/util.h @@ -17,6 +17,7 @@ enum FrameType : int16_t { TYPE_UP_LIST, TYPE_CANCEL_LIST, TYPE_OPEN_FILE, + TYPE_OPEN_FAILED, TYPE_TRANS_FILE, TYPE_TRANS_DONE, TYPE_INTERRUPT, @@ -29,10 +30,10 @@ enum FrameType : int16_t { TYPE_CONFIRM_UPDATE_LIST, TYPE_UNCONFIRM_UPDATE_LIST, TYPE_DONE_UPDATE_LIST, + TYPE_BUSY_UPDATE_LIST, TYPE_FAILED_UPDATE_LIST, TYPE_GET_ID, - TYPE_FILE_SIZE, - TYPE_OPEN_FAILED, + TYPE_FILE_SIZE }; using namespace ofen;