debug:初步可以传一个文件(有BUG)
This commit is contained in:
parent
edbd3400a8
commit
7250279ce0
@ -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: {
|
||||
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<TransInfomation> 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<CFrameBuffer> buf = std::make_shared<CFrameBuffer>();
|
||||
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);
|
||||
}
|
||||
|
@ -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<spdlog::logger> logger_;
|
||||
@ -62,4 +62,5 @@ private:
|
||||
std::map<std::string, std::shared_ptr<TransInfomation>> up_;
|
||||
std::mutex mutex_;
|
||||
std::shared_ptr<CThreadPool> send_pool_;
|
||||
std::string work_key_;
|
||||
};
|
@ -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<std::mutex> lock(cli_mut_);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user