// // Created by dongl on 23-4-15. // #include #include #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() { 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, 783556037, "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()); 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); }