add:添加异常发送失败时,关闭打开的文件,添加退出时关闭打开的文件。
This commit is contained in:
parent
0cafcaf643
commit
c3fde429ad
@ -17,6 +17,17 @@ CClient::CClient(const std::shared_ptr<spdlog::logger>& logger) : logger_(logger
|
|||||||
|
|
||||||
CClient::~CClient()
|
CClient::~CClient()
|
||||||
{
|
{
|
||||||
|
if (down_->file_) {
|
||||||
|
fclose(down_->file_);
|
||||||
|
down_->file_ = nullptr;
|
||||||
|
}
|
||||||
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
|
for (const auto& item : up_) {
|
||||||
|
if (item.second->file_) {
|
||||||
|
fclose(item.second->file_);
|
||||||
|
item.second->file_ = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::run(const std::string& ip, const std::string& port)
|
void CClient::run(const std::string& ip, const std::string& port)
|
||||||
@ -169,7 +180,7 @@ bool CClient::down_one_file(const std::string& id, const std::string& file)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::cancel_trans_file(const std::string& key)
|
void CClient::report_trans_ret(TransState state, const std::string& key)
|
||||||
{
|
{
|
||||||
std::shared_ptr<TransInfomation> t = nullptr;
|
std::shared_ptr<TransInfomation> t = nullptr;
|
||||||
if (key.empty()) {
|
if (key.empty()) {
|
||||||
@ -180,15 +191,14 @@ void CClient::cancel_trans_file(const std::string& key)
|
|||||||
t = up_[key];
|
t = up_[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (t == nullptr) {
|
if (t == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
t->trans_state_ = state;
|
||||||
t->trans_state_ = TRANS_FAILE;
|
|
||||||
if (t->file_) {
|
if (t->file_) {
|
||||||
fclose(t->file_);
|
fclose(t->file_);
|
||||||
if (key.empty()) {
|
t->file_ = nullptr;
|
||||||
|
if (key.empty() && t->trans_state_ == TRANS_FAILED) {
|
||||||
fs::remove(t->cur_file_);
|
fs::remove(t->cur_file_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -296,7 +306,7 @@ void CClient::handle_frame(CFrameBuffer* buf)
|
|||||||
}
|
}
|
||||||
if (t->file_ == nullptr) {
|
if (t->file_ == nullptr) {
|
||||||
logger_->error("open file {} failed.", t->cur_file_);
|
logger_->error("open file {} failed.", t->cur_file_);
|
||||||
cancel_trans_file(buf->mark_ == 0 ? id : "");
|
report_trans_ret(TRANS_FAILED, buf->mark_ == 0 ? id : "");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
std::shared_ptr<CFrameBuffer> tmp = std::make_shared<CFrameBuffer>();
|
std::shared_ptr<CFrameBuffer> tmp = std::make_shared<CFrameBuffer>();
|
||||||
@ -305,7 +315,7 @@ void CClient::handle_frame(CFrameBuffer* buf)
|
|||||||
tmp->tid_ = buf->fid_;
|
tmp->tid_ = buf->fid_;
|
||||||
if (!send_frame(tmp.get())) {
|
if (!send_frame(tmp.get())) {
|
||||||
logger_->error("TYPE_OPEN_FILE send ready failed.");
|
logger_->error("TYPE_OPEN_FILE send ready failed.");
|
||||||
cancel_trans_file(buf->mark_ == 0 ? id : "");
|
report_trans_ret(TRANS_FAILED, buf->mark_ == 0 ? id : "");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -346,6 +356,7 @@ void CClient::send_file_data_th()
|
|||||||
while (!feof(t->file_)) {
|
while (!feof(t->file_)) {
|
||||||
buf->len_ = fread(buf->data_, 1, g_BuffSize, t->file_);
|
buf->len_ = fread(buf->data_, 1, g_BuffSize, t->file_);
|
||||||
if (!send_frame(buf.get())) {
|
if (!send_frame(buf.get())) {
|
||||||
|
report_trans_ret(TRANS_FAILED, str_key);
|
||||||
logger_->error("send_file_data_th send failed.");
|
logger_->error("send_file_data_th send failed.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -355,6 +366,6 @@ void CClient::send_file_data_th()
|
|||||||
if (!send_frame(buf.get())) {
|
if (!send_frame(buf.get())) {
|
||||||
logger_->error("send_file_data_th send DONE failed.");
|
logger_->error("send_file_data_th send DONE failed.");
|
||||||
}
|
}
|
||||||
cancel_trans_file(str_key);
|
report_trans_ret(TRANS_DONE, str_key);
|
||||||
logger_->debug("Trans File {} To {} Done !!!", t->cur_file_, str_key);
|
logger_->debug("Trans File {} To {} Done !!!", t->cur_file_, str_key);
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ struct DownClientInfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum TransState {
|
enum TransState {
|
||||||
TRANS_FAILE,
|
TRANS_FAILED,
|
||||||
TRANS_ING,
|
TRANS_ING,
|
||||||
TRANS_REDAY,
|
TRANS_REDAY,
|
||||||
TRANS_DONE
|
TRANS_DONE
|
||||||
@ -25,7 +25,7 @@ struct TransInfomation {
|
|||||||
std::string cur_remote_file_;
|
std::string cur_remote_file_;
|
||||||
std::string cur_file_;
|
std::string cur_file_;
|
||||||
FILE* file_{};
|
FILE* file_{};
|
||||||
TransState trans_state_{TRANS_FAILE};
|
TransState trans_state_{TRANS_FAILED};
|
||||||
};
|
};
|
||||||
|
|
||||||
class CClient
|
class CClient
|
||||||
@ -43,7 +43,7 @@ public:
|
|||||||
bool up_task(const std::string& cmd);
|
bool up_task(const std::string& cmd);
|
||||||
bool cancel_task();
|
bool cancel_task();
|
||||||
bool down_one_file(const std::string& id, const std::string& file);
|
bool down_one_file(const std::string& id, const std::string& file);
|
||||||
void cancel_trans_file(const std::string& key = "");
|
void report_trans_ret(TransState state, const std::string& key = "");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool send_frame(CFrameBuffer* buf);
|
bool send_frame(CFrameBuffer* buf);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <of_util.h>
|
#include <of_util.h>
|
||||||
|
|
||||||
using namespace ofen;
|
using namespace ofen;
|
||||||
|
constexpr int g_MaxCacheLen = 1024 * 1024 * 50;
|
||||||
constexpr int g_ParseThreadNum = 1;
|
constexpr int g_ParseThreadNum = 1;
|
||||||
CTcpServer::CTcpServer(asio::io_context& io_context, const std::shared_ptr<spdlog::logger>& logger)
|
CTcpServer::CTcpServer(asio::io_context& io_context, const std::shared_ptr<spdlog::logger>& logger)
|
||||||
: io_context_(io_context), logger_(logger), acceptor_(io_context)
|
: io_context_(io_context), logger_(logger), acceptor_(io_context)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user