// // 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()); // 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()); // // 执行逻辑 自定义 // mapping::run(mph->mp_type(), request, response); // } char buff[2048] = {0}; std::atomic 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()); 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()); // 执行逻辑 自定义 mapping::run(mph->mp_type(), request, response); } }