115 lines
2.8 KiB
C++
115 lines
2.8 KiB
C++
//
|
|
// Created by dongl on 23-4-21.
|
|
//
|
|
|
|
#include "management.h"
|
|
#include "Response.h"
|
|
|
|
|
|
management::management() {
|
|
|
|
}
|
|
|
|
management::~management() {
|
|
|
|
}
|
|
|
|
|
|
void management::send_packet(bufferevent *bev) {
|
|
|
|
}
|
|
|
|
void management::read_packet(bufferevent *bev, sockaddr_in *addr) {
|
|
// while (true) {
|
|
// // read L 读包长度
|
|
// uint8_t packetLen;
|
|
// size_t len1 = bufferevent_read(bev, &packetLen, 1);
|
|
// if (len1 == 0) {
|
|
// break;
|
|
// }
|
|
//
|
|
// // read V 读包头
|
|
// char data_h[256] = {0};
|
|
// size_t len2 = bufferevent_read(bev, data_h, packetLen);
|
|
// if (len2 == 0) {
|
|
// break;
|
|
// }
|
|
//
|
|
// auto mph = std::make_shared<mp::mph>(mp::mph());
|
|
// mph->ParseFromString(data_h);
|
|
//
|
|
// // read V 读包体 包头内含有包体长度
|
|
// char data_b[256] = {0};
|
|
// size_t len3 = bufferevent_read(bev, data_b, mph->mpb_size());
|
|
// if (len3 == 0) {
|
|
// break;
|
|
// }
|
|
//
|
|
// // 请求
|
|
// auto request = analysis(mph, data_b)(bev, addr);
|
|
// // 响应
|
|
// auto response= std::make_shared<agreement_response>(agreement_response());
|
|
// // 执行逻辑 自定义
|
|
// mapping::run(mph->mp_type(), request, response);
|
|
// }
|
|
|
|
char buff[2048] = {0};
|
|
std::atomic<long> len_index = bufferevent_read(bev, buff, 2048);
|
|
|
|
// 处理粘包
|
|
char packet_h[50] = {0};
|
|
char packet_b[256] = {0};
|
|
while (len_index > 0) {
|
|
memset(packet_h, 0, sizeof(packet_h));
|
|
memset(packet_b, 0, sizeof(packet_b));
|
|
|
|
std::cout << len_index << std::endl;
|
|
std::cout << buff << std::endl;
|
|
|
|
/// read L 读包长度
|
|
uint8_t packetLen;
|
|
// 取包长度
|
|
memcpy(&packetLen, buff, 1);
|
|
// 更新buffer
|
|
memcpy(buff, buff + 1, strlen(buff) - 1);
|
|
// 更新buffer长度
|
|
len_index -= 1;
|
|
|
|
/// read V 读包头
|
|
// 取包头
|
|
memcpy(packet_h, buff, packetLen);
|
|
// 更新buffer
|
|
memcpy(buff, buff + packetLen, strlen(buff) - packetLen);
|
|
// 更新buffer长度
|
|
len_index -= packetLen;
|
|
|
|
// 解包
|
|
auto mph = std::make_shared<mp::mph>(mp::mph());
|
|
mph->ParseFromString(packet_h);
|
|
|
|
/// read V 读包体 包头内含有包体长度
|
|
// 取包体
|
|
memcpy(packet_b, buff, mph->mpb_size());
|
|
// 更新buffer
|
|
memcpy(buff, buff + mph->mpb_size(), strlen(buff) - mph->mpb_size());
|
|
// 更新buffer长度
|
|
len_index -= mph->mpb_size();
|
|
|
|
std::cout << buff << std::endl;
|
|
|
|
// 请求
|
|
auto request = analysis(mph, packet_b)(bev, addr);
|
|
// 响应
|
|
auto response = std::make_shared<agreement_response>(agreement_response());
|
|
// 执行逻辑 自定义
|
|
mapping::run(mph->mp_type(), request, response);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|