IM/MS/mmm/management.cpp

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);
}
}