小范围修改 删除打印

This commit is contained in:
2023-05-04 12:55:59 +08:00
parent eb24bc5e25
commit 6f77f55609
20 changed files with 117 additions and 60 deletions

View File

@@ -5,5 +5,6 @@ set(CMAKE_CXX_STANDARD 17)
add_subdirectory(MS) add_subdirectory(MS)
add_subdirectory(MP) add_subdirectory(MP)
add_subdirectory(MC) add_subdirectory(MC/gui)
add_subdirectory(MC/api)
add_subdirectory(MDB/imm_mysqldb) add_subdirectory(MDB/imm_mysqldb)

View File

@@ -12,7 +12,7 @@
void client_read_cb(struct bufferevent *bev, void *ctx); void client_read_cb(struct bufferevent *bev, void *ctx);
void client_write_cb(struct bufferevent *bev, void *ctx); void client_write_cb(struct bufferevent *bev, void *ctx);
int main() { int main(int argc, char **argv) {
event_base *base = event_base_new(); event_base *base = event_base_new();
bufferevent* bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE); bufferevent* bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
sockaddr_in c_sin = {0}; sockaddr_in c_sin = {0};
@@ -33,7 +33,7 @@ int main() {
fflush(stdout); fflush(stdout);
} }
auto request = new Request(mp::MP_REQUEST_LOGIN, 783556037, "Aa316216"); auto request = new Request(mp::MP_REQUEST_LOGIN, 7835560371, "Aa316216");
auto packet = request->operator()(); auto packet = request->operator()();
bufferevent_write(bev, packet.c_str(), packet.size()); bufferevent_write(bev, packet.c_str(), packet.size());

15
MC/gui/CMakeLists.txt Normal file
View File

@@ -0,0 +1,15 @@
project(GUI)
include_directories(${CMAKE_SOURCE_DIR}/include/fltk)
link_directories(${CMAKE_SOURCE_DIR}/lib/fltk)
add_executable(GUI main.cpp)
target_link_libraries(GUI
fltk
# fltk_gl
# libfltk_forms.a
# libfltk_images.a
# libfltk_cairo.a
m X11 Xext pthread Xinerama Xfixes Xcursor Xft Xrender m fontconfig dl
)

19
MC/gui/main.cpp Normal file
View File

@@ -0,0 +1,19 @@
//
// Created by dongl on 23-5-3.
//
//#include "FL/Fl.H"
//#include "FL/Fl_Window.H"
//#include "FL/Fl_Box.H"
//
//int main(int argc, char **argv) {
// Fl_Window *window = new Fl_Window(800,450);
// Fl_Box *box = new Fl_Box(20,40,300,100);
// box->box(FL_UP_BOX);
//// box->labelfont(FL_BOLD + FL_ITALIC);
//// box->labelsize(36);
// box->labeltype(FL_SHADOW_LABEL);
// window->end(); // 不会再添加任何小部件
// window->show(argc, argv); // 进入事件循环
// return Fl::run();
//}

View File

@@ -31,7 +31,7 @@ std::string Response::operator()() {
uint8_t size = mph->ByteSizeLong(); uint8_t size = mph->ByteSizeLong();
sprintf(temp, "%c", size); sprintf(temp, "%c", size);
sprintf(temp, "%s%s%s", temp, temp_mph.c_str(), temp_request.c_str()); sprintf(temp, "%s%s%s", temp, temp_mph.c_str(), temp_request.c_str());
// time: 0426 19:54 debug return 这里反复执行 然后temp 字符串就乱了 变了 // time: 0426 19:54 debug return 这里反复执行 然后temp 字符串就乱了 变了 ? 原因不明确
return temp; return temp;
} }
@@ -47,18 +47,6 @@ std::string Response::packet () {
sprintf(temp, "%c", size); sprintf(temp, "%c", size);
sprintf(temp, "%s%s%s", temp, temp_mph.c_str(), temp_request.c_str()); sprintf(temp, "%s%s%s", temp, temp_mph.c_str(), temp_request.c_str());
printf("size: %zu\n", mph->ByteSizeLong() + response->ByteSizeLong() + 1);
printf("size: %zu\n", temp_mph.size() + temp_request.size() + 1);
printf("size: %zu\n", strlen(temp));
printf("response size: %zu\n", response->ByteSizeLong());
printf("temp_mph: %s\n", temp_mph.c_str());
printf("temp_request: %s\n", temp_request.c_str());
printf("temp: %s\n", temp);
// time: 0426 19:54 debug return 这里反复执行 然后temp 字符串就乱了 变了
return temp; return temp;
} }

View File

@@ -5,13 +5,14 @@
#include "MS.h" #include "MS.h"
#include <cstring> #include <cstring>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h>
#include "event2/listener.h" #include "event2/listener.h"
ev_pool* MS::pool = nullptr; ev_pool* MS::pool = nullptr;
class management* MS::mage = nullptr; class management* MS::mage = nullptr;
MS::MS() { MS::MS() {
pool = new ev_pool(4); pool = new ev_pool(4);
pool->add_event_base(listener); pool->add_event_base(listener);
pool->add_event_bases(4); pool->add_event_bases(4);
@@ -52,19 +53,34 @@ void MS::link(struct evconnlistener *e, int fd, struct sockaddr *addr, int sockl
perror("en: Prohibit manual static invocation MS::link()\n"); perror("en: Prohibit manual static invocation MS::link()\n");
return; return;
} }
printf("listen_cb\n"); printf("listen_cb\n");
pool->add_buffer_event(fd, read_cb, write_cb, event_cb, BEV_OPT_CLOSE_ON_FREE); pool->add_buffer_event(fd, read_cb, write_cb, event_cb,
BEV_OPT_CLOSE_ON_FREE, (sockaddr_in*)addr);
fflush(stdout); fflush(stdout);
} }
void MS::read_cb(struct bufferevent *bev, void *ctx) { void MS::read_cb(struct bufferevent *bev, void *ctx) {
printf("[read]: %p, %p\n", ctx, bev); BBCA* bbca = (BBCA*) ctx;
mage->read_packet(bev); auto addr = bbca->addr;
auto base = bbca->base;
printf("[read]: ip:%s, bev:%p, fd:%d, base:%p\n",
inet_ntoa(addr->sin_addr), bev, bufferevent_getfd(bev), base);
if (!mage) {
mage = new class management();
}
mage->read_packet(bev, (sockaddr_in*)ctx);
fflush(stdout); fflush(stdout);
} }
void MS::write_cb(struct bufferevent *bev, void *ctx) { void MS::write_cb(struct bufferevent *bev, void *ctx) {
printf("[write]: %p\n", ctx); BBCA* bbca = (BBCA*) ctx;
auto addr = bbca->addr;
auto base = bbca->base;
printf("[write]: %p\n", base);
fflush(stdout); fflush(stdout);
} }
@@ -73,7 +89,6 @@ void MS::event_cb(struct bufferevent *bev, short what, void *ctx) {
if (what == BEV_EVENT_EOF || BEV_EVENT_ERROR || BEV_EVENT_TIMEOUT) { if (what == BEV_EVENT_EOF || BEV_EVENT_ERROR || BEV_EVENT_TIMEOUT) {
printf("客户端退出\n"); printf("客户端退出\n");
handler::remove_user(bev); handler::remove_user(bev);
bufferevent_free(bev);
} }
fflush(stdout); fflush(stdout);

View File

@@ -9,11 +9,12 @@
agreement_request::agreement_request() : agreement() {} agreement_request::agreement_request() : agreement() {}
agreement_request::~agreement_request() {} agreement_request::~agreement_request() {}
void agreement_request::set (std::shared_ptr<mp::mph> &mph, std::shared_ptr<mp::request>& request, bufferevent* bev) { void agreement_request::set (std::shared_ptr<mp::mph> &mph, std::shared_ptr<mp::request>& request, bufferevent* bev, sockaddr_in* addr) {
m_mph = mph; m_mph = mph;
m_body = request->body(); m_body = request->body();
m_cqi = request->cqi(); m_cqi = request->cqi();
m_bev = bev; m_bev = bev;
m_addr = addr;
} }
agreement_response::agreement_response() : agreement() {} agreement_response::agreement_response() : agreement() {}

View File

@@ -28,13 +28,14 @@ public:
~agreement_request(); ~agreement_request();
public: public:
void set (std::shared_ptr<mp::mph> &mph, std::shared_ptr<mp::request>& request, bufferevent* bev); void set (std::shared_ptr<mp::mph> &mph, std::shared_ptr<mp::request>& request, bufferevent* bev, sockaddr_in* addr);
public: public:
std::shared_ptr<mp::mph> m_mph; std::shared_ptr<mp::mph> m_mph;
mp::body m_body; mp::body m_body;
mp::cqi m_cqi; mp::cqi m_cqi;
bufferevent* m_bev; bufferevent* m_bev;
sockaddr_in* m_addr;
}; };

View File

@@ -13,11 +13,11 @@
class analysis { class analysis {
public: public:
analysis(std::shared_ptr<mp::mph>& mph, char* data, bufferevent* bev) : m_mph(mph), m_data(data), m_bev(bev) { analysis(std::shared_ptr<mp::mph>& mph, char* data) : m_mph(mph), m_data(data) {
} }
std::shared_ptr<agreement_request> operator () () { std::shared_ptr<agreement_request> operator () (bufferevent* bev, sockaddr_in* addr) {
// agreement_request // agreement_request
auto type = m_mph->mp_type(); auto type = m_mph->mp_type();
auto agreementRequest = std::make_shared<agreement_request>(agreement_request()); auto agreementRequest = std::make_shared<agreement_request>(agreement_request());
@@ -25,14 +25,13 @@ public:
// request // request
auto request = std::make_shared<mp::request>(mp::request()); auto request = std::make_shared<mp::request>(mp::request());
request->ParseFromString(m_data); request->ParseFromString(m_data);
agreementRequest->set(m_mph, request, m_bev); agreementRequest->set(m_mph, request, bev, addr);
return agreementRequest; return agreementRequest;
} }
private: private:
std::shared_ptr<mp::mph> m_mph; std::shared_ptr<mp::mph> m_mph;
char* m_data = nullptr; char* m_data = nullptr;
bufferevent* m_bev = nullptr;
}; };

View File

@@ -2,12 +2,13 @@
// Created by dongl on 23-4-28. // Created by dongl on 23-4-28.
// //
#include <arpa/inet.h>
#include "handler.h" #include "handler.h"
#include "Response.h" #include "Response.h"
std::map<uint64_t, userinfo*> handler::user_fd; std::map<uint64_t, userinfo*> handler::user_fd;
/// resp im
void handler::resp(const std::shared_ptr<agreement_request>& request, void handler::resp(const std::shared_ptr<agreement_request>& request,
const std::shared_ptr<agreement_response>& response) { const std::shared_ptr<agreement_response>& response) {
/// 用户操作逻辑包 /// 用户操作逻辑包
@@ -28,6 +29,7 @@ void handler::resp(const std::shared_ptr<agreement_request>& request,
handler::send(request, response); handler::send(request, response);
} }
} }
/// end resp im
void void
handler::send(const std::shared_ptr<agreement_request> &request, const std::shared_ptr<agreement_response> &response) { handler::send(const std::shared_ptr<agreement_request> &request, const std::shared_ptr<agreement_response> &response) {
@@ -36,11 +38,11 @@ handler::send(const std::shared_ptr<agreement_request> &request, const std::shar
} }
/// curr mem user curd
void handler::add_user(const std::shared_ptr<agreement_request>& request) { void handler::add_user(const std::shared_ptr<agreement_request>& request) {
auto ele = new userinfo(); auto ele = new userinfo();
ele->bev = request->m_bev; ele->bev = request->m_bev;
ele->ip = 0; sprintf(ele->ip, "%s", inet_ntoa(request->m_addr->sin_addr));
user_fd.insert({request->m_body.account(), ele}); user_fd.insert({request->m_body.account(), ele});
} }
@@ -57,7 +59,20 @@ void handler::remove_user(bufferevent *bev) {
} }
void handler::remove_user(const std::shared_ptr<agreement_request>& request) { void handler::remove_user(const std::shared_ptr<agreement_request>& request) {
bufferevent_free(request->m_bev);
user_fd.erase(request->m_body.account()); user_fd.erase(request->m_body.account());
} }
auto handler::find_fd(uint64_t account) {
return user_fd.find(account);
}
/// end curr mem user curd
void
handler::ccp2p(const std::shared_ptr<agreement_request> &request, const std::shared_ptr<agreement_response> &response) {
}

View File

@@ -9,7 +9,7 @@
struct userinfo { struct userinfo {
bufferevent* bev; bufferevent* bev;
uint64_t ip; char ip[15];
}; };
@@ -22,10 +22,12 @@ public:
static void add_user(const std::shared_ptr<agreement_request>& request); static void add_user(const std::shared_ptr<agreement_request>& request);
static void remove_user(const std::shared_ptr<agreement_request>& request); static void remove_user(const std::shared_ptr<agreement_request>& request);
static void remove_user(bufferevent* bev); static void remove_user(bufferevent* bev);
static void find_fd(uint64_t account); static auto find_fd(uint64_t account);
static void resp(const std::shared_ptr<agreement_request>& request, const std::shared_ptr<agreement_response>& response); static void resp(const std::shared_ptr<agreement_request>& request, const std::shared_ptr<agreement_response>& response);
static void send(const std::shared_ptr<agreement_request>& request, const std::shared_ptr<agreement_response>& response); 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);
protected: protected:
static std::map<uint64_t, userinfo*> user_fd; static std::map<uint64_t, userinfo*> user_fd;
}; };

View File

@@ -20,7 +20,7 @@ void management::send_packet(bufferevent *bev) {
} }
void management::read_packet(bufferevent *bev) { void management::read_packet(bufferevent *bev, sockaddr_in* addr) {
// read L 读包长度 // read L 读包长度
uint8_t packetLen; uint8_t packetLen;
bufferevent_read(bev, &packetLen, 1); bufferevent_read(bev, &packetLen, 1);
@@ -36,7 +36,7 @@ void management::read_packet(bufferevent *bev) {
bufferevent_read(bev, data_b, mph->mpb_size()); bufferevent_read(bev, data_b, mph->mpb_size());
// 请求 // 请求
auto request = analysis(mph, data_b, bev)(); auto request = analysis(mph, data_b)(bev, addr);
// 响应 // 响应
auto response= std::make_shared<agreement_response>(agreement_response()); auto response= std::make_shared<agreement_response>(agreement_response());
// 执行逻辑 自定义 // 执行逻辑 自定义

View File

@@ -17,7 +17,7 @@ public:
management(); management();
virtual ~management(); virtual ~management();
public: public:
void read_packet(bufferevent* bev); void read_packet(bufferevent* bev, sockaddr_in* addr);
void send_packet(bufferevent* bev); void send_packet(bufferevent* bev);
}; };

View File

@@ -24,7 +24,7 @@ mapping::mapping() {
void mapping::run(const mp::MP_TYPE mpTYpe, std::shared_ptr<agreement_request>& request, std::shared_ptr<agreement_response>& response) { void mapping::run(const mp::MP_TYPE mpTYpe, std::shared_ptr<agreement_request>& request, std::shared_ptr<agreement_response>& response) {
mapping(); mapping();
printf("%s\n", myenumToString(mpTYpe)); printf("[packet type]%s\n", myenumToString(mpTYpe));
// 取出需要的执行对象 // 取出需要的执行对象
auto fun = map.find(mpTYpe)->second; auto fun = map.find(mpTYpe)->second;
// 开始执行 请求 // 开始执行 请求

View File

@@ -52,11 +52,19 @@ void read(evutil_socket_t, short, void *) {
} }
void ev_pool::add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb, void ev_pool::add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb,
bufferevent_event_cb eventcb, short events) { bufferevent_event_cb eventcb, short events, sockaddr_in* addr) {
// 调度一个base集合;
event_base* base = dispatching(); event_base* base = dispatching();
// 创建socket链接监听
bufferevent* bev = bufferevent_socket_new(base, fd, events); bufferevent* bev = bufferevent_socket_new(base, fd, events);
bufferevent_setcb(bev, readcb, writecb, eventcb, base);
BBCA* bbca = new BBCA();
bbca->base = base;
bbca->addr = addr;
// 设置
bufferevent_setcb(bev, readcb, writecb, eventcb, bbca);
// 启用
bufferevent_enable(bev, EV_READ | EV_WRITE); bufferevent_enable(bev, EV_READ | EV_WRITE);
m_bevs.insert(std::pair<event_base*, bufferevent*>(base, bev)); m_bevs.insert(std::pair<event_base*, bufferevent*>(base, bev));
printf("event_base: %p, fd: %d\n", base, fd); printf("event_base: %p, fd: %d\n", base, fd);

View File

@@ -10,6 +10,12 @@
#include "event2/event.h" #include "event2/event.h"
#include "event2/bufferevent.h" #include "event2/bufferevent.h"
// 当前链接所属 base, 与, 当前链接的客户addr
typedef struct BelongToBase_currentAddr {
event_base* base;
sockaddr_in* addr;
} BBCA;
class ev_pool { class ev_pool {
public: public:
explicit ev_pool(int size = 4); explicit ev_pool(int size = 4);
@@ -18,7 +24,7 @@ public:
void add_event_bases(int num); void add_event_bases(int num);
bool polling(bool poll = false); bool polling(bool poll = false);
void add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb, void add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb,
bufferevent_event_cb eventcb, short events); 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); void add_event(evutil_socket_t fd, short events, event_callback_fn callback, void *callback_arg);
event_base* dispatching(); event_base* dispatching();
void ev_loop_exit(event_base* base); void ev_loop_exit(event_base* base);

View File

@@ -10,20 +10,18 @@ UserDB::~UserDB() {
delete sri; delete sri;
} }
// 登陆
mp::sri* UserDB::login(uint64_t account, const std::string& password) { mp::sri* UserDB::login(uint64_t account, const std::string& password) {
auto query = conn->query("select * from im_user where account=%0:account;"); auto query = conn->query("select * from im_user where account=%0:account;");
query.parse(); query.parse();
std::vector<im_user> v; std::vector<im_user> v;
query.storein(v, account); query.storein(v, account);
printf("info: %s\n", query.info().c_str());
sri = new mp::sri(); sri = new mp::sri();
// 无账户 // 无账户
if (v.empty()) { if (v.empty()) {
printf("无此用户\n"); sri->set_sri_msg("无此账户");
sri->set_sri_msg("account null!");
sri->set_sri_code(mp::MP_LOGIN_ACCOUNT_NOT); sri->set_sri_code(mp::MP_LOGIN_ACCOUNT_NOT);
return sri; return sri;
} }
@@ -44,13 +42,12 @@ mp::sri* UserDB::login(uint64_t account, const std::string& password) {
printf("登陆失败\n"); printf("登陆失败\n");
sri->set_sri_msg("登陆失败!"); sri->set_sri_msg("登陆失败!");
sri->set_sri_code(mp::MP_LOGIN_FAIL); sri->set_sri_code(mp::MP_LOGIN_FAIL);
sri->set_sri_username("null");
sri->set_sri_token("null");
} }
return sri; return sri;
} }
// 注册
mp::sri *UserDB::register_(uint64_t account, const std::string &password, const std::string &password_salt, mp::sri *UserDB::register_(uint64_t account, const std::string &password, const std::string &password_salt,
const std::string& client_info) { const std::string& client_info) {
mysqlpp::String info(client_info); mysqlpp::String info(client_info);
@@ -62,13 +59,10 @@ mp::sri *UserDB::register_(uint64_t account, const std::string &password, const
auto query = conn->query("select account from im_user where account=%0:account;"); auto query = conn->query("select account from im_user where account=%0:account;");
query.parse(); query.parse();
auto is_exist = query.store(account); auto is_exist = query.store(account);
printf("error: %s, row: %zu\n", conn->error(), is_exist.num_rows());
if (!is_exist.empty()) { if (!is_exist.empty()) {
sri->set_sri_msg("帐号已经注册!"); sri->set_sri_msg("帐号已经注册!");
sri->set_sri_code(mp::MP_REGISTER_EXIST); sri->set_sri_code(mp::MP_REGISTER_EXIST);
sri->set_sri_username("null");
sri->set_sri_token("null");
printf("帐号已经注册!\n"); printf("帐号已经注册!\n");
return sri; return sri;
@@ -80,20 +74,16 @@ mp::sri *UserDB::register_(uint64_t account, const std::string &password, const
if (ret) { if (ret) {
sri->set_sri_msg("注册成功!"); sri->set_sri_msg("注册成功!");
sri->set_sri_code(mp::MP_REGISTER_SUCCESS); sri->set_sri_code(mp::MP_REGISTER_SUCCESS);
sri->set_sri_username("null");
sri->set_sri_token("null");
printf("注册成功!\n"); printf("注册成功!\n");
} else { } else {
sri->set_sri_msg("注册失败!"); sri->set_sri_msg("注册失败!");
// sri->set_sri_code(mp::MP_REGISTER_EXIST);
sri->set_sri_username("null");
sri->set_sri_token("null");
printf("注册失败!\n"); printf("注册失败!\n");
} }
return sri; return sri;
} }
// 注销登陆
mp::sri *UserDB::logout(uint64_t account) { mp::sri *UserDB::logout(uint64_t account) {
return nullptr; return nullptr;
} }

View File

@@ -15,7 +15,7 @@ public:
public: public:
virtual mp::sri* login(uint64_t account, const std::string& password); virtual mp::sri* login(uint64_t account, const std::string& password);
virtual mp::sri* register_(uint64_t account, const std::string& password, virtual mp::sri* register_(uint64_t account, const std::string& password,
const std::string& password_salt, const std::string& client_info); const std::string& password_salt, const std::string& client_info = "");
virtual mp::sri* logout(uint64_t account); virtual mp::sri* logout(uint64_t account);
private: private:
mysqlpp::Connection* conn = DB::link(); mysqlpp::Connection* conn = DB::link();

View File

@@ -19,11 +19,8 @@ mp::sri* UserService::register_(uint64_t account, const std::string &password)
// 加密密码 生成hash // 加密密码 生成hash
std::string source = std::to_string(account) + password + password_salt; std::string source = std::to_string(account) + password + password_salt;
size_t password_hash = std::hash<std::string>()(source); size_t password_hash = std::hash<std::string>()(source);
// hash_password(&password_hash, source.c_str(), source.size());
printf("password_hash: %zu, password_salt: %s\n", password_hash, password_salt.c_str()); return userDb.register_(account, std::to_string(password_hash), password_salt);
return userDb.register_(account, std::to_string(password_hash), password_salt, " ");
} }
mp::sri* UserService::logout(uint64_t account) { mp::sri* UserService::logout(uint64_t account) {