test init request包 序列化的字符串 会多出字节 浮点型server解析不出来。
This commit is contained in:
parent
ba80c3954d
commit
c11a292f51
@ -5,8 +5,13 @@ include_directories(${CMAKE_SOURCE_DIR}/include/mp)
|
||||
|
||||
link_directories(${CMAKE_SOURCE_DIR}/lib/libevent)
|
||||
|
||||
aux_source_directory(user DIR_USER)
|
||||
aux_source_directory(core DIR_CORE)
|
||||
|
||||
add_executable(MC main.cpp)
|
||||
add_executable(MC main.cpp
|
||||
${DIR_USER}
|
||||
${DIR_CORE}
|
||||
)
|
||||
|
||||
target_link_libraries(MC
|
||||
event
|
||||
|
130
MC/api/core/Client.cpp
Normal file
130
MC/api/core/Client.cpp
Normal file
@ -0,0 +1,130 @@
|
||||
//
|
||||
// Created by dongl on 23-5-10.
|
||||
//
|
||||
|
||||
#include <cstring>
|
||||
#include <thread>
|
||||
#include "Client.h"
|
||||
#include "Mph.h"
|
||||
#include "Response.h"
|
||||
|
||||
|
||||
Client::Client(const std::string& ip, int port) {
|
||||
std::thread thread([&]() {
|
||||
init(ip, port);
|
||||
});
|
||||
thread.join();
|
||||
}
|
||||
|
||||
void Client::init(const std::string &ip, int port) {
|
||||
// 初始化时间集合
|
||||
base = event_base_new();
|
||||
// init socket 初始化socket
|
||||
bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
|
||||
|
||||
// 添加事件
|
||||
bufferevent_setcb(bev, readcb, writecb, eventcb, base);
|
||||
// 启用事件
|
||||
bufferevent_enable(bev, EV_READ | EV_WRITE);
|
||||
|
||||
// 服务器地址
|
||||
auto c_sin = addr(ip, port);
|
||||
// 连接
|
||||
int ret = bufferevent_socket_connect(bev, (sockaddr *)&c_sin, sizeof(c_sin));
|
||||
// 是否链接成功
|
||||
if (ret == 0) {
|
||||
printf("server connected success!\n");
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
sockaddr_in Client::addr(const std::string &ip, int port) {
|
||||
sockaddr_in c_sin = {0};
|
||||
memset(&c_sin, 0, sizeof(c_sin));
|
||||
c_sin = {
|
||||
AF_INET,
|
||||
htons(port),
|
||||
|
||||
};
|
||||
evutil_inet_pton(AF_INET, ip.c_str(), &c_sin.sin_addr.s_addr);
|
||||
return c_sin;
|
||||
}
|
||||
|
||||
void Client::run() {
|
||||
event_base_dispatch(base);
|
||||
}
|
||||
|
||||
|
||||
Client::~Client() {
|
||||
bufferevent_free(bev);
|
||||
event_base_free(base);
|
||||
}
|
||||
|
||||
void Client::send_data(const std::string &data) {
|
||||
bufferevent_write(bev, data.c_str(), data.size());
|
||||
}
|
||||
|
||||
/// ************ 三个回调 **************////
|
||||
void Client::readcb(struct bufferevent *bev, void *ctx) {
|
||||
printf("[read]: ");
|
||||
// read L 读包长度
|
||||
uint8_t packetLen;
|
||||
bufferevent_read(bev, &packetLen, 1);
|
||||
// read V 读包头
|
||||
char data_h[256] = {0};
|
||||
bufferevent_read(bev, data_h, packetLen);
|
||||
|
||||
auto mph = std::make_shared<mp::mph>(mp::mph());
|
||||
mph->ParseFromString(data_h);
|
||||
printf("mph->mpb_size: %d\n", mph->mpb_size());
|
||||
|
||||
|
||||
// read V 读包体 包头内含有包体长度
|
||||
char data_b[256] = {0};
|
||||
bufferevent_read(bev, data_b, mph->mpb_size());
|
||||
printf("data_b: %s\n", data_b);
|
||||
|
||||
mp::response* resp = new mp::response();
|
||||
resp->ParseFromString(data_b);
|
||||
printf("%s\n", resp->sri().sri_msg().c_str());
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
void Client::writecb(struct bufferevent *bev, void *ctx) {
|
||||
printf("[write]: %p\n", ctx);
|
||||
}
|
||||
|
||||
void Client::eventcb(struct bufferevent *bev, short what, void *ctx) {
|
||||
printf("[event]: %p\n", ctx);
|
||||
|
||||
if (what == BEV_EVENT_ERROR) {
|
||||
printf("[BEV_EVENT_ERROR]: %p\n", ctx);
|
||||
}
|
||||
else if (what == BEV_EVENT_EOF) {
|
||||
printf("[BEV_EVENT_ERROR]\n");
|
||||
}
|
||||
else if (what == BEV_EVENT_CONNECTED) {
|
||||
printf("[BEV_EVENT_ERROR]\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
39
MC/api/core/Client.h
Normal file
39
MC/api/core/Client.h
Normal file
@ -0,0 +1,39 @@
|
||||
//
|
||||
// Created by dongl on 23-5-10.
|
||||
//
|
||||
|
||||
#ifndef IM2_CLIENT_H
|
||||
#define IM2_CLIENT_H
|
||||
|
||||
#include <string>
|
||||
#include <oneapi/tbb/task_group.h>
|
||||
#include "event2/event.h"
|
||||
#include "event2/bufferevent.h"
|
||||
|
||||
class Client {
|
||||
public:
|
||||
Client(const std::string& ip, int port);
|
||||
virtual ~Client();
|
||||
void run();
|
||||
private:
|
||||
void init(const std::string& ip, int port);
|
||||
sockaddr_in addr(const std::string& ip, int port);
|
||||
|
||||
/// 用户操作函数
|
||||
public:
|
||||
void send_data(const std::string& data);
|
||||
|
||||
// 三个回调
|
||||
public:
|
||||
static void readcb(struct bufferevent *bev, void *ctx);
|
||||
static void writecb(struct bufferevent *bev, void *ctx);
|
||||
static void eventcb(struct bufferevent *bev, short what, void *ctx);
|
||||
|
||||
private:
|
||||
event_base* base;
|
||||
bufferevent* bev;
|
||||
event* ev;
|
||||
};
|
||||
|
||||
|
||||
#endif //IM2_CLIENT_H
|
@ -2,6 +2,24 @@
|
||||
// Created by dongl on 23-4-15.
|
||||
//
|
||||
|
||||
//#include "core/Client.h"
|
||||
//#include "user/UserOperation.h"
|
||||
//
|
||||
//int main() {
|
||||
// auto client = Client("127.0.0.1", 9999);
|
||||
// client.run();
|
||||
//
|
||||
// auto user = new UserOperation(&client);
|
||||
// user->login("783556037", "Aa316216");
|
||||
//
|
||||
//
|
||||
//}
|
||||
|
||||
|
||||
//
|
||||
// Created by dongl on 23-4-15.
|
||||
//
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include "Request.h"
|
||||
@ -11,6 +29,7 @@
|
||||
|
||||
void client_read_cb(struct bufferevent *bev, void *ctx);
|
||||
void client_write_cb(struct bufferevent *bev, void *ctx);
|
||||
void event_cb(struct bufferevent *bev, short what, void *ctx);
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
event_base *base = event_base_new();
|
||||
@ -25,7 +44,7 @@ int main(int argc, char **argv) {
|
||||
evutil_inet_pton(AF_INET, "127.0.0.1", &c_sin.sin_addr.s_addr);
|
||||
|
||||
|
||||
bufferevent_setcb(bev, client_read_cb, client_write_cb, nullptr, nullptr);
|
||||
bufferevent_setcb(bev, client_read_cb, client_write_cb, event_cb, nullptr);
|
||||
bufferevent_enable(bev, EV_READ | EV_WRITE);
|
||||
int ret = bufferevent_socket_connect(bev, (sockaddr *) &c_sin, sizeof(c_sin));
|
||||
if (ret == 0) {
|
||||
@ -34,20 +53,31 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
auto request = new Request(mp::MP_REQUEST_LOGIN, mp::MP_REQUEST_LOGIN_ACCOUNT, "783556037", "Aa316216");
|
||||
auto packet = request->operator()();
|
||||
auto packet = request->packet();
|
||||
|
||||
bufferevent_write(bev, packet.c_str(), packet.size());
|
||||
|
||||
delete request;
|
||||
|
||||
uint8_t l;
|
||||
memcpy(&l, packet.c_str(), 1);
|
||||
memcpy((void *) packet.c_str(), packet.c_str() + 1, packet.size() - 1);
|
||||
|
||||
std::string h;
|
||||
memcpy((void *) h.c_str(), packet.c_str(), l);
|
||||
char h[256];
|
||||
memcpy(h, packet.c_str(), l);
|
||||
char b[257];
|
||||
strncpy(b, packet.c_str() + strlen(h), packet.size() - strlen(h));
|
||||
|
||||
auto mph = new mp::mph();
|
||||
mph->ParseFromString(h);
|
||||
printf("packet size: %u\n", mph->mpb_size());
|
||||
printf("packet size: %zu\n", packet.size());
|
||||
printf("h size: %hhu\n", l);
|
||||
printf("b size: %hhu\n", mph->mpb_size());
|
||||
printf("total size: %hhu\n", 1 + l + mph->mpb_size());
|
||||
printf("str size: %zu\n", packet.size());
|
||||
|
||||
std::string temp;
|
||||
temp.assign(packet.c_str(), packet.length());
|
||||
printf("temp str: %s\n", packet.c_str());
|
||||
|
||||
|
||||
fflush(stdout);
|
||||
@ -57,26 +87,31 @@ int main(int argc, char **argv) {
|
||||
|
||||
void client_read_cb(struct bufferevent *bev, void *ctx) {
|
||||
printf("[read]: ");
|
||||
// read L 读包长度
|
||||
uint8_t packetLen;
|
||||
bufferevent_read(bev, &packetLen, 1);
|
||||
// read V 读包头
|
||||
char data_h[256] = {0};
|
||||
bufferevent_read(bev, data_h, packetLen);
|
||||
int i = 0;
|
||||
while (i < 3) {
|
||||
i++;
|
||||
// read L 读包长度
|
||||
uint8_t packetLen;
|
||||
size_t len = bufferevent_read(bev, &packetLen, 1);
|
||||
|
||||
auto mph = std::make_shared<mp::mph>(mp::mph());
|
||||
mph->ParseFromString(data_h);
|
||||
printf("mph->mpb_size: %d\n", mph->mpb_size());
|
||||
// read V 读包头
|
||||
char data_h[256] = {0};
|
||||
bufferevent_read(bev, data_h, packetLen);
|
||||
|
||||
auto mph = std::make_shared<mp::mph>(mp::mph());
|
||||
mph->ParseFromString(data_h);
|
||||
printf("mph->mpb_size: %d\n", mph->mpb_size());
|
||||
|
||||
|
||||
// read V 读包体 包头内含有包体长度
|
||||
char data_b[256] = {0};
|
||||
bufferevent_read(bev, data_b, mph->mpb_size());
|
||||
printf("data_b: %s\n", data_b);
|
||||
// read V 读包体 包头内含有包体长度
|
||||
char data_b[256] = {0};
|
||||
bufferevent_read(bev, data_b, mph->mpb_size());
|
||||
printf("data_b: %s\n", data_b);
|
||||
|
||||
mp::response* resp = new mp::response();
|
||||
resp->ParseFromString(data_b);
|
||||
printf("%s\n", resp->sri().sri_msg().c_str());
|
||||
mp::response* resp = new mp::response();
|
||||
resp->ParseFromString(data_b);
|
||||
printf("%s\n", resp->sri().sri_msg().c_str());
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
@ -86,4 +121,18 @@ void client_write_cb(struct bufferevent *bev, void *ctx) {
|
||||
// uint32_t len = login(2725096176, "Aa316216", data, sizeof(data));
|
||||
// bufferevent_write(bev, data, len);
|
||||
// sleep(3);
|
||||
}
|
||||
|
||||
void event_cb(struct bufferevent *bev, short what, void *ctx) {
|
||||
printf("[event]\n");
|
||||
|
||||
if (what == BEV_EVENT_ERROR) {
|
||||
printf("[BEV_EVENT_ERROR]: %p\n", ctx);
|
||||
}
|
||||
else if (what == BEV_EVENT_EOF) {
|
||||
printf("[BEV_EVENT_ERROR]: %s\n",/* strerror(EVUTIL_SOCKET_ERROR())*/ "xx");
|
||||
}
|
||||
else if (what == BEV_EVENT_CONNECTED) {
|
||||
printf("[BEV_EVENT_ERROR]\n");
|
||||
}
|
||||
}
|
58
MC/api/user/UserOperation.cpp
Normal file
58
MC/api/user/UserOperation.cpp
Normal file
@ -0,0 +1,58 @@
|
||||
//
|
||||
// Created by dongl on 23-5-10.
|
||||
//
|
||||
|
||||
#include <regex>
|
||||
#include "UserOperation.h"
|
||||
|
||||
UserOperation::UserOperation(Client *client) {
|
||||
this->client = client;
|
||||
}
|
||||
|
||||
UserOperation::~UserOperation() {
|
||||
|
||||
}
|
||||
|
||||
//// packet
|
||||
std::string UserOperation::packet_base(mp::MP_TYPE type, mp::MP_SUB_TYPE subType, const std::string &account, const std::string &password) {
|
||||
auto request = new Request(type, subType, account, password);
|
||||
std::string temp = request->packet();
|
||||
delete request;
|
||||
return temp;
|
||||
}
|
||||
|
||||
//// login
|
||||
std::string UserOperation::login_packet(mp::MP_SUB_TYPE subType, const std::string &account, const std::string &password) {
|
||||
return packet_base(mp::MP_REQUEST_LOGIN, subType, account, password);
|
||||
}
|
||||
|
||||
std::optional<std::string> UserOperation::login(const std::string &account, const std::string &password) {
|
||||
std::regex pattern_email(R"(\w+@(\w+\.)+\w+)");
|
||||
std::regex pattern_account("[1-9](\\d{5,11})");
|
||||
std::regex pattern_phone("1(3\\d|47|5([0-3]|[5-9])|8(0|2|[5-9]))\\d{8}$");
|
||||
|
||||
std::string packet;
|
||||
if (std::regex_match(account, pattern_email)) {
|
||||
packet = login_packet(LOGIN_EMAIL, account, password);
|
||||
} else if (std::regex_match(account, pattern_account)) {
|
||||
packet = login_packet(LOGIN_ACCOUNT, account, password);
|
||||
} else if (std::regex_match(account, pattern_phone)) {
|
||||
packet = login_packet(LOGIN_PHONE, account, password);
|
||||
} else {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
client->send_data(packet);
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
|
||||
//// login
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
38
MC/api/user/UserOperation.h
Normal file
38
MC/api/user/UserOperation.h
Normal file
@ -0,0 +1,38 @@
|
||||
//
|
||||
// Created by dongl on 23-5-10.
|
||||
//
|
||||
|
||||
#ifndef IM2_USEROPERATION_H
|
||||
#define IM2_USEROPERATION_H
|
||||
|
||||
|
||||
#include <string>
|
||||
#include <optional>
|
||||
#include "Request.h"
|
||||
#include "event2/bufferevent.h"
|
||||
#include "../core/Client.h"
|
||||
|
||||
|
||||
#define LOGIN_ACCOUNT mp::MP_REQUEST_LOGIN_ACCOUNT
|
||||
#define LOGIN_PHONE mp::MP_REQUEST_LOGIN_PHONE
|
||||
#define LOGIN_EMAIL mp::MP_REQUEST_LOGIN_EMAIL
|
||||
|
||||
|
||||
class UserOperation {
|
||||
public:
|
||||
explicit UserOperation(Client* bev);
|
||||
virtual ~UserOperation();
|
||||
|
||||
public:
|
||||
std::optional<std::string> login(const std::string& account, const std::string& password);
|
||||
|
||||
private:
|
||||
std::string packet_base(mp::MP_TYPE, mp::MP_SUB_TYPE, const std::string &account, const std::string &password);
|
||||
std::string login_packet(mp::MP_SUB_TYPE subType, const std::string &account, const std::string &password);
|
||||
|
||||
private:
|
||||
Client* client;
|
||||
};
|
||||
|
||||
|
||||
#endif //IM2_USEROPERATION_H
|
@ -16,30 +16,34 @@ Mph(type), Body(target, source, data), Cqi() {
|
||||
|
||||
}
|
||||
|
||||
Request::~Request() {
|
||||
delete request;
|
||||
}
|
||||
|
||||
void Request::init() {
|
||||
memset(temp, 0 , 256);
|
||||
request = new mp::request();
|
||||
request->set_allocated_body(body);
|
||||
request->set_allocated_cqi(cqi);
|
||||
mph->set_mpb_size(body->ByteSizeLong() + cqi->ByteSizeLong());
|
||||
}
|
||||
|
||||
std::string Request::operator()() {
|
||||
std::string Request::packet() {
|
||||
init();
|
||||
std::string temp_mph;
|
||||
std::string temp_request;
|
||||
mph->SerializeToString(&temp_mph);
|
||||
request->SerializeToString(&temp_request);
|
||||
std::string temp;
|
||||
|
||||
temp.push_back(mph->ByteSizeLong());
|
||||
std::cout << temp << std::endl;
|
||||
mph->AppendToString(&temp);
|
||||
std::cout << temp << std::endl;
|
||||
request->AppendToString(&temp);
|
||||
std::cout << temp << std::endl;
|
||||
|
||||
auto L = (uint8_t )temp_mph.size();
|
||||
sprintf(temp, "%c", L);
|
||||
sprintf(temp, "%s%s%s", temp, temp_mph.c_str(), temp_request.c_str());
|
||||
return temp;
|
||||
}
|
||||
|
||||
Request::~Request() {
|
||||
delete request;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -14,38 +14,27 @@ Response::~Response() {
|
||||
}
|
||||
|
||||
void Response::init() {
|
||||
memset(temp, 0 , 256);
|
||||
response = new mp::response();
|
||||
response->set_allocated_sri(sri);
|
||||
mph->set_mpb_size( response->ByteSizeLong());
|
||||
}
|
||||
|
||||
std::string Response::operator()() {
|
||||
init();
|
||||
std::string temp_mph;
|
||||
std::string temp_request;
|
||||
|
||||
mph->SerializeToString(&temp_mph);
|
||||
response->SerializeToString(&temp_request);
|
||||
|
||||
uint8_t size = mph->ByteSizeLong();
|
||||
sprintf(temp, "%c", size);
|
||||
sprintf(temp, "%s%s%s", temp, temp_mph.c_str(), temp_request.c_str());
|
||||
// time: 0426 19:54 debug return 这里反复执行 然后temp 字符串就乱了 变了 ? 原因不明确
|
||||
return temp;
|
||||
}
|
||||
|
||||
std::string Response::packet () {
|
||||
init();
|
||||
std::string temp_mph;
|
||||
std::string temp_request;
|
||||
std::string temp;
|
||||
|
||||
mph->SerializeToString(&temp_mph);
|
||||
response->SerializeToString(&temp_request);
|
||||
temp.push_back(mph->ByteSizeLong());
|
||||
std::cout << temp << std::endl;
|
||||
mph->AppendToString(&temp);
|
||||
std::cout << temp << std::endl;
|
||||
response->AppendToString(&temp);
|
||||
std::cout << temp << std::endl;
|
||||
|
||||
uint8_t size = mph->ByteSizeLong();
|
||||
sprintf(temp, "%c", size);
|
||||
sprintf(temp, "%s%s%s", temp, temp_mph.c_str(), temp_request.c_str());
|
||||
|
||||
printf("h size: %zu\n", mph->ByteSizeLong());
|
||||
printf("b size: %hhu\n", mph->mpb_size());
|
||||
printf("total size: %zu\n", 1 + mph->ByteSizeLong() + mph->mpb_size());
|
||||
printf("str size: %zu\n", temp.size());
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
@ -50,8 +50,6 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_mp_2ebody_2eproto::offsets[] P
|
||||
PROTOBUF_FIELD_OFFSET(::mp::body, target_),
|
||||
PROTOBUF_FIELD_OFFSET(::mp::body, source_),
|
||||
PROTOBUF_FIELD_OFFSET(::mp::body, data_),
|
||||
PROTOBUF_FIELD_OFFSET(::mp::body, email_),
|
||||
PROTOBUF_FIELD_OFFSET(::mp::body, phone_),
|
||||
};
|
||||
static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
|
||||
{ 0, -1, sizeof(::mp::body)},
|
||||
@ -62,11 +60,11 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
|
||||
};
|
||||
|
||||
const char descriptor_table_protodef_mp_2ebody_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
|
||||
"\n\rmp.body.proto\022\002mp\032\014mp.mph.proto\"\232\001\n\004bo"
|
||||
"dy\022#\n\nsubcommand\030\001 \001(\0162\017.mp.MP_SUB_TYPE\022"
|
||||
"\017\n\007account\030\002 \001(\t\022\020\n\010password\030\003 \001(\t\022\016\n\006ta"
|
||||
"rget\030\004 \001(\004\022\016\n\006source\030\005 \001(\004\022\014\n\004data\030\006 \001(\t"
|
||||
"\022\r\n\005email\030\007 \001(\t\022\r\n\005phone\030\010 \001(\004b\006proto3"
|
||||
"\n\rmp.body.proto\022\002mp\032\014mp.mph.proto\"|\n\004bod"
|
||||
"y\022#\n\nsubcommand\030\001 \001(\0162\017.mp.MP_SUB_TYPE\022\017"
|
||||
"\n\007account\030\002 \001(\t\022\020\n\010password\030\003 \001(\t\022\016\n\006tar"
|
||||
"get\030\004 \001(\004\022\016\n\006source\030\005 \001(\004\022\014\n\004data\030\006 \001(\tb"
|
||||
"\006proto3"
|
||||
;
|
||||
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_mp_2ebody_2eproto_deps[1] = {
|
||||
&::descriptor_table_mp_2emph_2eproto,
|
||||
@ -76,7 +74,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_mp_
|
||||
};
|
||||
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_mp_2ebody_2eproto_once;
|
||||
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_mp_2ebody_2eproto = {
|
||||
false, false, descriptor_table_protodef_mp_2ebody_2eproto, "mp.body.proto", 198,
|
||||
false, false, descriptor_table_protodef_mp_2ebody_2eproto, "mp.body.proto", 167,
|
||||
&descriptor_table_mp_2ebody_2eproto_once, descriptor_table_mp_2ebody_2eproto_sccs, descriptor_table_mp_2ebody_2eproto_deps, 1, 1,
|
||||
schemas, file_default_instances, TableStruct_mp_2ebody_2eproto::offsets,
|
||||
file_level_metadata_mp_2ebody_2eproto, 1, file_level_enum_descriptors_mp_2ebody_2eproto, file_level_service_descriptors_mp_2ebody_2eproto,
|
||||
@ -118,11 +116,6 @@ body::body(const body& from)
|
||||
data_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_data(),
|
||||
GetArena());
|
||||
}
|
||||
email_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
if (!from._internal_email().empty()) {
|
||||
email_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from._internal_email(),
|
||||
GetArena());
|
||||
}
|
||||
::memcpy(&target_, &from.target_,
|
||||
static_cast<size_t>(reinterpret_cast<char*>(&subcommand_) -
|
||||
reinterpret_cast<char*>(&target_)) + sizeof(subcommand_));
|
||||
@ -134,7 +127,6 @@ void body::SharedCtor() {
|
||||
account_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
password_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
data_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
email_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
::memset(&target_, 0, static_cast<size_t>(
|
||||
reinterpret_cast<char*>(&subcommand_) -
|
||||
reinterpret_cast<char*>(&target_)) + sizeof(subcommand_));
|
||||
@ -151,7 +143,6 @@ void body::SharedDtor() {
|
||||
account_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
password_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
data_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
email_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
|
||||
}
|
||||
|
||||
void body::ArenaDtor(void* object) {
|
||||
@ -178,7 +169,6 @@ void body::Clear() {
|
||||
account_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
password_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
data_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
email_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
::memset(&target_, 0, static_cast<size_t>(
|
||||
reinterpret_cast<char*>(&subcommand_) -
|
||||
reinterpret_cast<char*>(&target_)) + sizeof(subcommand_));
|
||||
@ -242,22 +232,6 @@ const char* body::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::inter
|
||||
CHK_(ptr);
|
||||
} else goto handle_unusual;
|
||||
continue;
|
||||
// string email = 7;
|
||||
case 7:
|
||||
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 58)) {
|
||||
auto str = _internal_mutable_email();
|
||||
ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
|
||||
CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "mp.body.email"));
|
||||
CHK_(ptr);
|
||||
} else goto handle_unusual;
|
||||
continue;
|
||||
// uint64 phone = 8;
|
||||
case 8:
|
||||
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 64)) {
|
||||
phone_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
|
||||
CHK_(ptr);
|
||||
} else goto handle_unusual;
|
||||
continue;
|
||||
default: {
|
||||
handle_unusual:
|
||||
if ((tag & 7) == 4 || tag == 0) {
|
||||
@ -335,22 +309,6 @@ failure:
|
||||
6, this->_internal_data(), target);
|
||||
}
|
||||
|
||||
// string email = 7;
|
||||
if (this->email().size() > 0) {
|
||||
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
|
||||
this->_internal_email().data(), static_cast<int>(this->_internal_email().length()),
|
||||
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
|
||||
"mp.body.email");
|
||||
target = stream->WriteStringMaybeAliased(
|
||||
7, this->_internal_email(), target);
|
||||
}
|
||||
|
||||
// uint64 phone = 8;
|
||||
if (this->phone() != 0) {
|
||||
target = stream->EnsureSpace(target);
|
||||
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt64ToArray(8, this->_internal_phone(), target);
|
||||
}
|
||||
|
||||
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
|
||||
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
|
||||
_internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
|
||||
@ -388,13 +346,6 @@ size_t body::ByteSizeLong() const {
|
||||
this->_internal_data());
|
||||
}
|
||||
|
||||
// string email = 7;
|
||||
if (this->email().size() > 0) {
|
||||
total_size += 1 +
|
||||
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
|
||||
this->_internal_email());
|
||||
}
|
||||
|
||||
// uint64 target = 4;
|
||||
if (this->target() != 0) {
|
||||
total_size += 1 +
|
||||
@ -409,13 +360,6 @@ size_t body::ByteSizeLong() const {
|
||||
this->_internal_source());
|
||||
}
|
||||
|
||||
// uint64 phone = 8;
|
||||
if (this->phone() != 0) {
|
||||
total_size += 1 +
|
||||
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt64Size(
|
||||
this->_internal_phone());
|
||||
}
|
||||
|
||||
// .mp.MP_SUB_TYPE subcommand = 1;
|
||||
if (this->subcommand() != 0) {
|
||||
total_size += 1 +
|
||||
@ -462,18 +406,12 @@ void body::MergeFrom(const body& from) {
|
||||
if (from.data().size() > 0) {
|
||||
_internal_set_data(from._internal_data());
|
||||
}
|
||||
if (from.email().size() > 0) {
|
||||
_internal_set_email(from._internal_email());
|
||||
}
|
||||
if (from.target() != 0) {
|
||||
_internal_set_target(from._internal_target());
|
||||
}
|
||||
if (from.source() != 0) {
|
||||
_internal_set_source(from._internal_source());
|
||||
}
|
||||
if (from.phone() != 0) {
|
||||
_internal_set_phone(from._internal_phone());
|
||||
}
|
||||
if (from.subcommand() != 0) {
|
||||
_internal_set_subcommand(from._internal_subcommand());
|
||||
}
|
||||
@ -503,7 +441,6 @@ void body::InternalSwap(body* other) {
|
||||
account_.Swap(&other->account_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
password_.Swap(&other->password_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
data_.Swap(&other->data_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
email_.Swap(&other->email_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
::PROTOBUF_NAMESPACE_ID::internal::memswap<
|
||||
PROTOBUF_FIELD_OFFSET(body, subcommand_)
|
||||
+ sizeof(body::subcommand_)
|
||||
|
@ -1,7 +1,7 @@
|
||||
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
// source: mp.request.proto
|
||||
|
||||
#include "mp.request.pb.h"
|
||||
#include "proto/mp.request.pb.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@ -61,8 +61,8 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
|
||||
|
||||
const char descriptor_table_protodef_mp_2erequest_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
|
||||
"\n\020mp.request.proto\022\002mp\032\rmp.body.proto\032\014m"
|
||||
"p.cqi.proto\"7\n\007request\022\026\n\004body\030\002 \001(\0132\010.m"
|
||||
"p.body\022\024\n\003cqi\030\003 \001(\0132\007.mp.cqib\006proto3"
|
||||
"p.cqi.proto\"7\n\007request\022\026\n\004body\030\001 \001(\0132\010.m"
|
||||
"p.body\022\024\n\003cqi\030\002 \001(\0132\007.mp.cqib\006proto3"
|
||||
;
|
||||
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_mp_2erequest_2eproto_deps[2] = {
|
||||
&::descriptor_table_mp_2ebody_2eproto,
|
||||
@ -198,16 +198,16 @@ const char* request::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::in
|
||||
ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
|
||||
CHK_(ptr);
|
||||
switch (tag >> 3) {
|
||||
// .mp.body body = 2;
|
||||
case 2:
|
||||
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
|
||||
// .mp.body body = 1;
|
||||
case 1:
|
||||
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
|
||||
ptr = ctx->ParseMessage(_internal_mutable_body(), ptr);
|
||||
CHK_(ptr);
|
||||
} else goto handle_unusual;
|
||||
continue;
|
||||
// .mp.cqi cqi = 3;
|
||||
case 3:
|
||||
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
|
||||
// .mp.cqi cqi = 2;
|
||||
case 2:
|
||||
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
|
||||
ptr = ctx->ParseMessage(_internal_mutable_cqi(), ptr);
|
||||
CHK_(ptr);
|
||||
} else goto handle_unusual;
|
||||
@ -240,20 +240,20 @@ failure:
|
||||
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
|
||||
(void) cached_has_bits;
|
||||
|
||||
// .mp.body body = 2;
|
||||
// .mp.body body = 1;
|
||||
if (this->has_body()) {
|
||||
target = stream->EnsureSpace(target);
|
||||
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
|
||||
InternalWriteMessage(
|
||||
2, _Internal::body(this), target, stream);
|
||||
1, _Internal::body(this), target, stream);
|
||||
}
|
||||
|
||||
// .mp.cqi cqi = 3;
|
||||
// .mp.cqi cqi = 2;
|
||||
if (this->has_cqi()) {
|
||||
target = stream->EnsureSpace(target);
|
||||
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
|
||||
InternalWriteMessage(
|
||||
3, _Internal::cqi(this), target, stream);
|
||||
2, _Internal::cqi(this), target, stream);
|
||||
}
|
||||
|
||||
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
|
||||
@ -272,14 +272,14 @@ size_t request::ByteSizeLong() const {
|
||||
// Prevent compiler warnings about cached_has_bits being unused
|
||||
(void) cached_has_bits;
|
||||
|
||||
// .mp.body body = 2;
|
||||
// .mp.body body = 1;
|
||||
if (this->has_body()) {
|
||||
total_size += 1 +
|
||||
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
|
||||
*body_);
|
||||
}
|
||||
|
||||
// .mp.cqi cqi = 3;
|
||||
// .mp.cqi cqi = 2;
|
||||
if (this->has_cqi()) {
|
||||
total_size += 1 +
|
||||
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
|
||||
|
@ -58,7 +58,7 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
|
||||
|
||||
const char descriptor_table_protodef_mp_2eresponse_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
|
||||
"\n\021mp.response.proto\022\002mp\032\014mp.sri.proto\" \n"
|
||||
"\010response\022\024\n\003sri\030\003 \001(\0132\007.mp.srib\006proto3"
|
||||
"\010response\022\024\n\003sri\030\001 \001(\0132\007.mp.srib\006proto3"
|
||||
;
|
||||
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_mp_2eresponse_2eproto_deps[1] = {
|
||||
&::descriptor_table_mp_2esri_2eproto,
|
||||
@ -168,9 +168,9 @@ const char* response::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::i
|
||||
ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
|
||||
CHK_(ptr);
|
||||
switch (tag >> 3) {
|
||||
// .mp.sri sri = 3;
|
||||
case 3:
|
||||
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
|
||||
// .mp.sri sri = 1;
|
||||
case 1:
|
||||
if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
|
||||
ptr = ctx->ParseMessage(_internal_mutable_sri(), ptr);
|
||||
CHK_(ptr);
|
||||
} else goto handle_unusual;
|
||||
@ -203,12 +203,12 @@ failure:
|
||||
::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
|
||||
(void) cached_has_bits;
|
||||
|
||||
// .mp.sri sri = 3;
|
||||
// .mp.sri sri = 1;
|
||||
if (this->has_sri()) {
|
||||
target = stream->EnsureSpace(target);
|
||||
target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
|
||||
InternalWriteMessage(
|
||||
3, _Internal::sri(this), target, stream);
|
||||
1, _Internal::sri(this), target, stream);
|
||||
}
|
||||
|
||||
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
|
||||
@ -227,7 +227,7 @@ size_t response::ByteSizeLong() const {
|
||||
// Prevent compiler warnings about cached_has_bits being unused
|
||||
(void) cached_has_bits;
|
||||
|
||||
// .mp.sri sri = 3;
|
||||
// .mp.sri sri = 1;
|
||||
if (this->has_sri()) {
|
||||
total_size += 1 +
|
||||
::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
|
||||
|
@ -57,7 +57,6 @@ void MS::link(struct evconnlistener *e, int fd, struct sockaddr *addr, int sockl
|
||||
printf("listen_cb\n");
|
||||
pool->add_buffer_event(fd, read_cb, write_cb, event_cb,
|
||||
BEV_OPT_CLOSE_ON_FREE, (sockaddr_in*)addr);
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
@ -85,12 +84,15 @@ void MS::write_cb(struct bufferevent *bev, void *ctx) {
|
||||
}
|
||||
|
||||
void MS::event_cb(struct bufferevent *bev, short what, void *ctx) {
|
||||
printf("[event]: %p\n", ctx);
|
||||
BBCA* bbca = (BBCA*) ctx;
|
||||
auto addr = bbca->addr;
|
||||
auto base = bbca->base;
|
||||
|
||||
printf("[event]: %p\n", base);
|
||||
if (what == BEV_EVENT_EOF || BEV_EVENT_ERROR || BEV_EVENT_TIMEOUT) {
|
||||
printf("客户端退出\n");
|
||||
handler::remove_user(bev);
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
|
@ -19,11 +19,11 @@ public:
|
||||
|
||||
std::shared_ptr<agreement_request> operator () (bufferevent* bev, sockaddr_in* addr) {
|
||||
// agreement_request
|
||||
auto type = m_mph->mp_type();
|
||||
auto agreementRequest = std::make_shared<agreement_request>(agreement_request());
|
||||
|
||||
// request
|
||||
auto request = std::make_shared<mp::request>(mp::request());
|
||||
|
||||
request->ParseFromString(m_data);
|
||||
agreementRequest->set(m_mph, request, bev, addr);
|
||||
|
||||
@ -31,7 +31,7 @@ public:
|
||||
}
|
||||
private:
|
||||
std::shared_ptr<mp::mph> m_mph;
|
||||
char* m_data = nullptr;
|
||||
char* m_data;
|
||||
};
|
||||
|
||||
|
||||
|
@ -2,12 +2,11 @@
|
||||
// Created by dongl on 23-4-28.
|
||||
//
|
||||
|
||||
#include <arpa/inet.h>
|
||||
#include "handler.h"
|
||||
#include "Response.h"
|
||||
|
||||
// handler 保有 session
|
||||
session* handler::g_session = new session();
|
||||
session* handler::session = new class session();
|
||||
|
||||
/// resp im
|
||||
void handler::resp(const std::shared_ptr<agreement_request>& request,
|
||||
@ -15,8 +14,8 @@ void handler::resp(const std::shared_ptr<agreement_request>& request,
|
||||
/// 用户操作逻辑包
|
||||
// 定义100序号一下的为操作逻辑业务逻辑 请求与响应 +20 就能一一对应
|
||||
// 例如 login包类型为 request login==0 那么响应这个登陆信息就是 response login==0+20
|
||||
// 100 以上 为im msg 通讯的包类型序号
|
||||
if (request->m_mph->mp_type() < 100) {
|
||||
// 200 以上 为im msg 通讯的包类型序号
|
||||
if (request->m_mph->mp_type() < 200) {
|
||||
auto resp = new Response((mp::MP_TYPE) (request->m_mph->mp_type() + 20),
|
||||
response->m_sri.sri_code(), response->m_sri.sri_username(),
|
||||
response->m_sri.sri_msg(), response->m_sri.sri_token());
|
||||
@ -31,10 +30,11 @@ void handler::resp(const std::shared_ptr<agreement_request>& request,
|
||||
}
|
||||
}
|
||||
/// end resp im
|
||||
|
||||
// 聊天消息包
|
||||
void handler::send(const std::shared_ptr<agreement_request> &request, const std::shared_ptr<agreement_response> &response) {
|
||||
// 查询在线的用户信息
|
||||
auto ret = g_session->find_user_fd(request->m_body.target());
|
||||
auto ret = session->find_user_fd(request->m_body.target());
|
||||
// 用户信息结构体
|
||||
userinfo *user;
|
||||
if (ret.has_value()) {
|
||||
@ -50,6 +50,10 @@ handler::ccp2p(const std::shared_ptr<agreement_request> &request, const std::sha
|
||||
|
||||
}
|
||||
|
||||
void handler::remove_user(bufferevent* bev) {
|
||||
session->remove_user(bev);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -20,8 +20,11 @@ public:
|
||||
static void send(const std::shared_ptr<agreement_request>& request, const std::shared_ptr<agreement_response>& response);
|
||||
static void ccp2p(const std::shared_ptr<agreement_request>& request, const std::shared_ptr<agreement_response>& response);
|
||||
|
||||
public:
|
||||
static void remove_user(bufferevent* bev);
|
||||
|
||||
protected:
|
||||
static session* g_session;
|
||||
static class session* session;
|
||||
};
|
||||
|
||||
|
||||
|
@ -6,7 +6,6 @@
|
||||
#include "Response.h"
|
||||
|
||||
|
||||
|
||||
management::management() {
|
||||
|
||||
}
|
||||
@ -20,29 +19,96 @@ void management::send_packet(bufferevent *bev) {
|
||||
|
||||
}
|
||||
|
||||
void management::read_packet(bufferevent *bev, sockaddr_in* addr) {
|
||||
// read L 读包长度
|
||||
uint8_t packetLen;
|
||||
bufferevent_read(bev, &packetLen, 1);
|
||||
// read V 读包头
|
||||
char data_h[256] = {0};
|
||||
bufferevent_read(bev, data_h, packetLen);
|
||||
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);
|
||||
// }
|
||||
|
||||
auto mph = std::make_shared<mp::mph>(mp::mph());
|
||||
mph->ParseFromString(data_h);
|
||||
char buff[2048] = {0};
|
||||
std::atomic<long> len_index = bufferevent_read(bev, buff, 2048);
|
||||
|
||||
// read V 读包体 包头内含有包体长度
|
||||
char data_b[256] = {0};
|
||||
bufferevent_read(bev, data_b, mph->mpb_size());
|
||||
// 处理粘包
|
||||
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));
|
||||
|
||||
// 请求
|
||||
auto request = analysis(mph, data_b)(bev, addr);
|
||||
// 响应
|
||||
auto response= std::make_shared<agreement_response>(agreement_response());
|
||||
// 执行逻辑 自定义
|
||||
mapping::run(mph->mp_type(), request, response);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -36,9 +36,9 @@ void mapping::run(const mp::MP_TYPE mpTYpe, std::shared_ptr<agreement_request>&
|
||||
printf("[packet type]:%s\n", myenumToString(mpTYpe));
|
||||
// 取出需要的执行对象
|
||||
auto fun = map.find(mpTYpe)->second;
|
||||
// 开始执行 请求
|
||||
// 开始执行 处理请求的数据
|
||||
fun->run(request, response);
|
||||
// 发送 响应
|
||||
// 发送 响应数据
|
||||
handler::resp(request, response);
|
||||
}
|
||||
|
||||
|
@ -30,11 +30,12 @@ void session::remove_user(bufferevent *bev) {
|
||||
}
|
||||
|
||||
user_fd.erase(target_ele);
|
||||
bufferevent_free(bev);
|
||||
}
|
||||
|
||||
void session::remove_user(const std::shared_ptr<agreement_request>& request) {
|
||||
bufferevent_free(request->m_bev);
|
||||
user_fd.erase(strtol(request->m_body.account().c_str(), nullptr, 0));
|
||||
bufferevent_free(request->m_bev);
|
||||
}
|
||||
|
||||
bool session::is_user(const std::string& account) {
|
||||
|
@ -51,13 +51,27 @@ void read(evutil_socket_t, short, void *) {
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
void ev_pool::add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb,
|
||||
bufferevent* ev_pool::add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb,
|
||||
bufferevent_event_cb eventcb, short events, sockaddr_in* addr) {
|
||||
// 调度一个base集合;
|
||||
event_base* base = dispatching();
|
||||
// 创建socket链接监听
|
||||
bufferevent* bev = bufferevent_socket_new(base, fd, events);
|
||||
|
||||
/// 设置水位
|
||||
// 读取缓冲水位
|
||||
bufferevent_setwatermark(bev,
|
||||
EV_READ,
|
||||
1, // 低水位 0 就是无限制 最小取出量
|
||||
10240 // 高水位 0 就是无限制 当前最大容量 直接取出
|
||||
);
|
||||
// 输出缓冲区水位
|
||||
bufferevent_setwatermark(bev,
|
||||
EV_WRITE,
|
||||
39, // 低水位 输出缓冲区数据低于1024 才会继续向缓冲写入数据 写入回调被发送 设置 输出缓冲区的大小 就是?
|
||||
0 // 高水位无效
|
||||
);
|
||||
|
||||
BBCA* bbca = new BBCA();
|
||||
bbca->base = base;
|
||||
bbca->addr = addr;
|
||||
@ -68,6 +82,8 @@ void ev_pool::add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, b
|
||||
bufferevent_enable(bev, EV_READ | EV_WRITE);
|
||||
m_bevs.insert(std::pair<event_base*, bufferevent*>(base, bev));
|
||||
printf("event_base: %p, fd: %d\n", base, fd);
|
||||
|
||||
return bev;
|
||||
}
|
||||
|
||||
void ev_pool::add_event(evutil_socket_t fd, short events, event_callback_fn callback, void *callback_arg) {
|
||||
|
@ -23,7 +23,7 @@ public:
|
||||
void add_event_base(const std::function<void()>& function);
|
||||
void add_event_bases(int num);
|
||||
bool polling(bool poll = false);
|
||||
void add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb,
|
||||
bufferevent* add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb,
|
||||
bufferevent_event_cb eventcb, short events, sockaddr_in* addr);
|
||||
void add_event(evutil_socket_t fd, short events, event_callback_fn callback, void *callback_arg);
|
||||
event_base* dispatching();
|
||||
|
@ -13,7 +13,7 @@ void PEVerifCodeController::run(std::shared_ptr<agreement_request> request, std:
|
||||
// 发送验证码至邮
|
||||
bool state = peVerifCodeService.send_email(request->m_body.account(), code);
|
||||
// 设置session 字段
|
||||
g_session->set_session(request->m_bev, "code", code);
|
||||
session->set_session(request->m_bev, "code", code);
|
||||
|
||||
if (state) {
|
||||
sri->set_sri_code(mp::MP_PE_CODE_SUCCESS);
|
||||
|
@ -15,8 +15,8 @@ public:
|
||||
|
||||
private:
|
||||
PEVerifCodeService peVerifCodeService = PEVerifCodeService();
|
||||
static std::map<bufferevent*, std::string> session; // 客户端 fd 与 code 绑定的 session
|
||||
static std::map<uint64_t, bufferevent*> time_wheel; // 时间轮定时容器 看验证码超时的
|
||||
// static std::map<bufferevent*, std::string> session; // 客户端 fd 与 code 绑定的 session
|
||||
// static std::map<uint64_t, bufferevent*> time_wheel; // 时间轮定时容器 看验证码超时的
|
||||
};
|
||||
|
||||
|
||||
|
@ -5,6 +5,9 @@
|
||||
#include "UserProveController.h"
|
||||
|
||||
void UserProveController::run(std::shared_ptr<agreement_request> request, std::shared_ptr<agreement_response> response) {
|
||||
printf("客户端版本:%f", request->m_cqi.cqi_version());
|
||||
printf("account:%s", request->m_body.account().c_str());
|
||||
|
||||
// 登陆
|
||||
if (request->m_mph->mp_type() == mp::MP_REQUEST_LOGIN) {
|
||||
auto sri = service.login(request->m_body.subcommand(),
|
||||
@ -12,22 +15,22 @@ void UserProveController::run(std::shared_ptr<agreement_request> request, std::s
|
||||
response->set(sri, request->m_bev);
|
||||
|
||||
// 登陆的用户 直接在全局 注册 在map中 直接存入服务器内存
|
||||
handler::add_user(sri, request);
|
||||
session->add_user(sri, request);
|
||||
}
|
||||
// 注册
|
||||
else if (request->m_mph->mp_type() == mp::MP_REQUEST_REGISTER) {
|
||||
auto sri = service.register_(request->m_body.subcommand(),
|
||||
request->m_body.email(), request->m_body.password());
|
||||
request->m_body.account(), request->m_body.password());
|
||||
response->set(sri, request->m_bev);
|
||||
}
|
||||
// 退出登陆
|
||||
else if (request->m_mph->mp_type() == mp::MP_REQUEST_LOGOUT) {
|
||||
// 查看当前用户是否在线
|
||||
bool state = handler::is_user(request->m_body.account());
|
||||
bool state = session->is_user(request->m_body.account());
|
||||
|
||||
// current user list used redis 在优化
|
||||
if (state) {
|
||||
handler::remove_user(request);
|
||||
session->remove_user(request);
|
||||
auto sri = service.logout(request->m_body.account(), state);
|
||||
response->set(sri, request->m_bev);
|
||||
} else {
|
||||
|
@ -41,7 +41,7 @@ public:
|
||||
}
|
||||
|
||||
virtual ~Body() {
|
||||
delete body;
|
||||
|
||||
}
|
||||
|
||||
protected:
|
||||
|
@ -17,11 +17,11 @@ public:
|
||||
#else
|
||||
cqi->set_cqi_type(mp::MC_TYPE_LINUX);
|
||||
#endif
|
||||
cqi->set_cqi_version(0.01);
|
||||
cqi->set_cqi_version(3.01);
|
||||
}
|
||||
|
||||
virtual ~Cqi() {
|
||||
delete cqi;
|
||||
|
||||
}
|
||||
|
||||
protected:
|
||||
|
@ -18,12 +18,11 @@ public:
|
||||
|
||||
~Request() override;
|
||||
public:
|
||||
std::string operator ()();
|
||||
std::string packet();
|
||||
private:
|
||||
void init();
|
||||
private:
|
||||
mp::request* request = nullptr;
|
||||
char temp[256]{};
|
||||
};
|
||||
|
||||
|
||||
|
@ -18,14 +18,12 @@ public:
|
||||
|
||||
~Response() override;
|
||||
|
||||
std::string operator () ();
|
||||
std::string packet ();
|
||||
|
||||
private:
|
||||
void init();
|
||||
private:
|
||||
mp::response* response = nullptr;
|
||||
char temp[256]{};
|
||||
};
|
||||
|
||||
|
||||
|
@ -20,6 +20,10 @@ public:
|
||||
|
||||
Sri() {}
|
||||
|
||||
virtual ~Sri() {
|
||||
|
||||
}
|
||||
|
||||
public:
|
||||
mp::sri* sri = nullptr;
|
||||
};
|
||||
|
@ -183,10 +183,8 @@ class body PROTOBUF_FINAL :
|
||||
kAccountFieldNumber = 2,
|
||||
kPasswordFieldNumber = 3,
|
||||
kDataFieldNumber = 6,
|
||||
kEmailFieldNumber = 7,
|
||||
kTargetFieldNumber = 4,
|
||||
kSourceFieldNumber = 5,
|
||||
kPhoneFieldNumber = 8,
|
||||
kSubcommandFieldNumber = 1,
|
||||
};
|
||||
// string account = 2;
|
||||
@ -264,31 +262,6 @@ class body PROTOBUF_FINAL :
|
||||
std::string* _internal_mutable_data();
|
||||
public:
|
||||
|
||||
// string email = 7;
|
||||
void clear_email();
|
||||
const std::string& email() const;
|
||||
void set_email(const std::string& value);
|
||||
void set_email(std::string&& value);
|
||||
void set_email(const char* value);
|
||||
void set_email(const char* value, size_t size);
|
||||
std::string* mutable_email();
|
||||
std::string* release_email();
|
||||
void set_allocated_email(std::string* email);
|
||||
GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
|
||||
" string fields are deprecated and will be removed in a"
|
||||
" future release.")
|
||||
std::string* unsafe_arena_release_email();
|
||||
GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
|
||||
" string fields are deprecated and will be removed in a"
|
||||
" future release.")
|
||||
void unsafe_arena_set_allocated_email(
|
||||
std::string* email);
|
||||
private:
|
||||
const std::string& _internal_email() const;
|
||||
void _internal_set_email(const std::string& value);
|
||||
std::string* _internal_mutable_email();
|
||||
public:
|
||||
|
||||
// uint64 target = 4;
|
||||
void clear_target();
|
||||
::PROTOBUF_NAMESPACE_ID::uint64 target() const;
|
||||
@ -307,15 +280,6 @@ class body PROTOBUF_FINAL :
|
||||
void _internal_set_source(::PROTOBUF_NAMESPACE_ID::uint64 value);
|
||||
public:
|
||||
|
||||
// uint64 phone = 8;
|
||||
void clear_phone();
|
||||
::PROTOBUF_NAMESPACE_ID::uint64 phone() const;
|
||||
void set_phone(::PROTOBUF_NAMESPACE_ID::uint64 value);
|
||||
private:
|
||||
::PROTOBUF_NAMESPACE_ID::uint64 _internal_phone() const;
|
||||
void _internal_set_phone(::PROTOBUF_NAMESPACE_ID::uint64 value);
|
||||
public:
|
||||
|
||||
// .mp.MP_SUB_TYPE subcommand = 1;
|
||||
void clear_subcommand();
|
||||
::mp::MP_SUB_TYPE subcommand() const;
|
||||
@ -335,10 +299,8 @@ class body PROTOBUF_FINAL :
|
||||
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr account_;
|
||||
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr password_;
|
||||
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr data_;
|
||||
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr email_;
|
||||
::PROTOBUF_NAMESPACE_ID::uint64 target_;
|
||||
::PROTOBUF_NAMESPACE_ID::uint64 source_;
|
||||
::PROTOBUF_NAMESPACE_ID::uint64 phone_;
|
||||
int subcommand_;
|
||||
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
|
||||
friend struct ::TableStruct_mp_2ebody_2eproto;
|
||||
@ -657,107 +619,6 @@ inline void body::unsafe_arena_set_allocated_data(
|
||||
// @@protoc_insertion_point(field_unsafe_arena_set_allocated:mp.body.data)
|
||||
}
|
||||
|
||||
// string email = 7;
|
||||
inline void body::clear_email() {
|
||||
email_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
}
|
||||
inline const std::string& body::email() const {
|
||||
// @@protoc_insertion_point(field_get:mp.body.email)
|
||||
return _internal_email();
|
||||
}
|
||||
inline void body::set_email(const std::string& value) {
|
||||
_internal_set_email(value);
|
||||
// @@protoc_insertion_point(field_set:mp.body.email)
|
||||
}
|
||||
inline std::string* body::mutable_email() {
|
||||
// @@protoc_insertion_point(field_mutable:mp.body.email)
|
||||
return _internal_mutable_email();
|
||||
}
|
||||
inline const std::string& body::_internal_email() const {
|
||||
return email_.Get();
|
||||
}
|
||||
inline void body::_internal_set_email(const std::string& value) {
|
||||
|
||||
email_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value, GetArena());
|
||||
}
|
||||
inline void body::set_email(std::string&& value) {
|
||||
|
||||
email_.Set(
|
||||
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value), GetArena());
|
||||
// @@protoc_insertion_point(field_set_rvalue:mp.body.email)
|
||||
}
|
||||
inline void body::set_email(const char* value) {
|
||||
GOOGLE_DCHECK(value != nullptr);
|
||||
|
||||
email_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value),
|
||||
GetArena());
|
||||
// @@protoc_insertion_point(field_set_char:mp.body.email)
|
||||
}
|
||||
inline void body::set_email(const char* value,
|
||||
size_t size) {
|
||||
|
||||
email_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
|
||||
reinterpret_cast<const char*>(value), size), GetArena());
|
||||
// @@protoc_insertion_point(field_set_pointer:mp.body.email)
|
||||
}
|
||||
inline std::string* body::_internal_mutable_email() {
|
||||
|
||||
return email_.Mutable(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
}
|
||||
inline std::string* body::release_email() {
|
||||
// @@protoc_insertion_point(field_release:mp.body.email)
|
||||
return email_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
|
||||
}
|
||||
inline void body::set_allocated_email(std::string* email) {
|
||||
if (email != nullptr) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
email_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), email,
|
||||
GetArena());
|
||||
// @@protoc_insertion_point(field_set_allocated:mp.body.email)
|
||||
}
|
||||
inline std::string* body::unsafe_arena_release_email() {
|
||||
// @@protoc_insertion_point(field_unsafe_arena_release:mp.body.email)
|
||||
GOOGLE_DCHECK(GetArena() != nullptr);
|
||||
|
||||
return email_.UnsafeArenaRelease(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
|
||||
GetArena());
|
||||
}
|
||||
inline void body::unsafe_arena_set_allocated_email(
|
||||
std::string* email) {
|
||||
GOOGLE_DCHECK(GetArena() != nullptr);
|
||||
if (email != nullptr) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
email_.UnsafeArenaSetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
|
||||
email, GetArena());
|
||||
// @@protoc_insertion_point(field_unsafe_arena_set_allocated:mp.body.email)
|
||||
}
|
||||
|
||||
// uint64 phone = 8;
|
||||
inline void body::clear_phone() {
|
||||
phone_ = PROTOBUF_ULONGLONG(0);
|
||||
}
|
||||
inline ::PROTOBUF_NAMESPACE_ID::uint64 body::_internal_phone() const {
|
||||
return phone_;
|
||||
}
|
||||
inline ::PROTOBUF_NAMESPACE_ID::uint64 body::phone() const {
|
||||
// @@protoc_insertion_point(field_get:mp.body.phone)
|
||||
return _internal_phone();
|
||||
}
|
||||
inline void body::_internal_set_phone(::PROTOBUF_NAMESPACE_ID::uint64 value) {
|
||||
|
||||
phone_ = value;
|
||||
}
|
||||
inline void body::set_phone(::PROTOBUF_NAMESPACE_ID::uint64 value) {
|
||||
_internal_set_phone(value);
|
||||
// @@protoc_insertion_point(field_set:mp.body.phone)
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif // __GNUC__
|
||||
|
@ -181,10 +181,10 @@ class request PROTOBUF_FINAL :
|
||||
// accessors -------------------------------------------------------
|
||||
|
||||
enum : int {
|
||||
kBodyFieldNumber = 2,
|
||||
kCqiFieldNumber = 3,
|
||||
kBodyFieldNumber = 1,
|
||||
kCqiFieldNumber = 2,
|
||||
};
|
||||
// .mp.body body = 2;
|
||||
// .mp.body body = 1;
|
||||
bool has_body() const;
|
||||
private:
|
||||
bool _internal_has_body() const;
|
||||
@ -202,7 +202,7 @@ class request PROTOBUF_FINAL :
|
||||
::mp::body* body);
|
||||
::mp::body* unsafe_arena_release_body();
|
||||
|
||||
// .mp.cqi cqi = 3;
|
||||
// .mp.cqi cqi = 2;
|
||||
bool has_cqi() const;
|
||||
private:
|
||||
bool _internal_has_cqi() const;
|
||||
@ -243,7 +243,7 @@ class request PROTOBUF_FINAL :
|
||||
#endif // __GNUC__
|
||||
// request
|
||||
|
||||
// .mp.body body = 2;
|
||||
// .mp.body body = 1;
|
||||
inline bool request::_internal_has_body() const {
|
||||
return this != internal_default_instance() && body_ != nullptr;
|
||||
}
|
||||
@ -318,7 +318,7 @@ inline void request::set_allocated_body(::mp::body* body) {
|
||||
// @@protoc_insertion_point(field_set_allocated:mp.request.body)
|
||||
}
|
||||
|
||||
// .mp.cqi cqi = 3;
|
||||
// .mp.cqi cqi = 2;
|
||||
inline bool request::_internal_has_cqi() const {
|
||||
return this != internal_default_instance() && cqi_ != nullptr;
|
||||
}
|
||||
|
@ -180,9 +180,9 @@ class response PROTOBUF_FINAL :
|
||||
// accessors -------------------------------------------------------
|
||||
|
||||
enum : int {
|
||||
kSriFieldNumber = 3,
|
||||
kSriFieldNumber = 1,
|
||||
};
|
||||
// .mp.sri sri = 3;
|
||||
// .mp.sri sri = 1;
|
||||
bool has_sri() const;
|
||||
private:
|
||||
bool _internal_has_sri() const;
|
||||
@ -222,7 +222,7 @@ class response PROTOBUF_FINAL :
|
||||
#endif // __GNUC__
|
||||
// response
|
||||
|
||||
// .mp.sri sri = 3;
|
||||
// .mp.sri sri = 1;
|
||||
inline bool response::_internal_has_sri() const {
|
||||
return this != internal_default_instance() && sri_ != nullptr;
|
||||
}
|
||||
|
@ -10,6 +10,4 @@ message body {
|
||||
uint64 target = 4;
|
||||
uint64 source = 5;
|
||||
string data = 6;
|
||||
string email = 7;
|
||||
uint64 phone = 8;
|
||||
}
|
@ -5,6 +5,6 @@ import "mp.body.proto";
|
||||
import "mp.cqi.proto";
|
||||
|
||||
message request {
|
||||
body body = 2;
|
||||
cqi cqi = 3;
|
||||
body body = 1;
|
||||
cqi cqi = 2;
|
||||
}
|
@ -4,5 +4,5 @@ package mp;
|
||||
import "mp.sri.proto";
|
||||
|
||||
message response {
|
||||
sri sri = 3;
|
||||
sri sri = 1;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user