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;