89 lines
2.5 KiB
C++
89 lines
2.5 KiB
C++
//
|
|
// Created by dongl on 23-4-15.
|
|
//
|
|
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
#include "Request.h"
|
|
#include "Response.h"
|
|
#include "event2/event.h"
|
|
#include "event2/bufferevent.h"
|
|
|
|
void client_read_cb(struct bufferevent *bev, void *ctx);
|
|
void client_write_cb(struct bufferevent *bev, void *ctx);
|
|
|
|
int main(int argc, char **argv) {
|
|
event_base *base = event_base_new();
|
|
bufferevent* bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
|
|
sockaddr_in c_sin = {0};
|
|
memset(&c_sin, 0, sizeof(c_sin));
|
|
c_sin = {
|
|
AF_INET,
|
|
htons(9999),
|
|
|
|
};
|
|
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_enable(bev, EV_READ | EV_WRITE);
|
|
int ret = bufferevent_socket_connect(bev, (sockaddr *) &c_sin, sizeof(c_sin));
|
|
if (ret == 0) {
|
|
printf("connected\n");
|
|
fflush(stdout);
|
|
}
|
|
|
|
auto request = new Request(mp::MP_REQUEST_LOGIN, 7835560371, "Aa316216");
|
|
auto packet = request->operator()();
|
|
bufferevent_write(bev, packet.c_str(), packet.size());
|
|
|
|
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);
|
|
|
|
auto mph = new mp::mph();
|
|
mph->ParseFromString(h);
|
|
printf("packet size: %u\n", mph->mpb_size());
|
|
printf("packet size: %zu\n", packet.size());
|
|
|
|
|
|
fflush(stdout);
|
|
event_base_dispatch(base);
|
|
event_base_free(base);
|
|
}
|
|
|
|
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);
|
|
|
|
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_write_cb(struct bufferevent *bev, void *ctx) {
|
|
// Bytef data[1024] = {0};
|
|
// uint32_t len = login(2725096176, "Aa316216", data, sizeof(data));
|
|
// bufferevent_write(bev, data, len);
|
|
// sleep(3);
|
|
} |