小范围修改 删除打印

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(MP)
add_subdirectory(MC)
add_subdirectory(MC/gui)
add_subdirectory(MC/api)
add_subdirectory(MDB/imm_mysqldb)

View File

@@ -12,7 +12,7 @@
void client_read_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();
bufferevent* bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
sockaddr_in c_sin = {0};
@@ -33,7 +33,7 @@ int main() {
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()();
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();
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 字符串就乱了 变了
// time: 0426 19:54 debug return 这里反复执行 然后temp 字符串就乱了 变了 ? 原因不明确
return temp;
}
@@ -47,18 +47,6 @@ std::string Response::packet () {
sprintf(temp, "%c", size);
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;
}

View File

@@ -5,13 +5,14 @@
#include "MS.h"
#include <cstring>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "event2/listener.h"
ev_pool* MS::pool = nullptr;
class management* MS::mage = nullptr;
MS::MS() {
pool = new ev_pool(4);
pool->add_event_base(listener);
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");
return;
}
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);
}
void MS::read_cb(struct bufferevent *bev, void *ctx) {
printf("[read]: %p, %p\n", ctx, bev);
mage->read_packet(bev);
BBCA* bbca = (BBCA*) ctx;
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);
}
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);
}
@@ -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) {
printf("客户端退出\n");
handler::remove_user(bev);
bufferevent_free(bev);
}
fflush(stdout);

View File

@@ -9,11 +9,12 @@
agreement_request::agreement_request() : agreement() {}
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_body = request->body();
m_cqi = request->cqi();
m_bev = bev;
m_addr = addr;
}
agreement_response::agreement_response() : agreement() {}

View File

@@ -28,13 +28,14 @@ public:
~agreement_request();
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:
std::shared_ptr<mp::mph> m_mph;
mp::body m_body;
mp::cqi m_cqi;
bufferevent* m_bev;
sockaddr_in* m_addr;
};

View File

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

View File

@@ -2,12 +2,13 @@
// Created by dongl on 23-4-28.
//
#include <arpa/inet.h>
#include "handler.h"
#include "Response.h"
std::map<uint64_t, userinfo*> handler::user_fd;
/// resp im
void handler::resp(const std::shared_ptr<agreement_request>& request,
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);
}
}
/// end resp im
void
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) {
auto ele = new userinfo();
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});
}
@@ -57,7 +59,20 @@ void handler::remove_user(bufferevent *bev) {
}
void handler::remove_user(const std::shared_ptr<agreement_request>& request) {
bufferevent_free(request->m_bev);
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 {
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 remove_user(const std::shared_ptr<agreement_request>& request);
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 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:
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 读包长度
uint8_t packetLen;
bufferevent_read(bev, &packetLen, 1);
@@ -36,7 +36,7 @@ void management::read_packet(bufferevent *bev) {
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());
// 执行逻辑 自定义

View File

@@ -17,7 +17,7 @@ public:
management();
virtual ~management();
public:
void read_packet(bufferevent* bev);
void read_packet(bufferevent* bev, sockaddr_in* addr);
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) {
mapping();
printf("%s\n", myenumToString(mpTYpe));
printf("[packet type]%s\n", myenumToString(mpTYpe));
// 取出需要的执行对象
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,
bufferevent_event_cb eventcb, short events) {
bufferevent_event_cb eventcb, short events, sockaddr_in* addr) {
// 调度一个base集合;
event_base* base = dispatching();
// 创建socket链接监听
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);
m_bevs.insert(std::pair<event_base*, bufferevent*>(base, bev));
printf("event_base: %p, fd: %d\n", base, fd);

View File

@@ -10,6 +10,12 @@
#include "event2/event.h"
#include "event2/bufferevent.h"
// 当前链接所属 base, 与, 当前链接的客户addr
typedef struct BelongToBase_currentAddr {
event_base* base;
sockaddr_in* addr;
} BBCA;
class ev_pool {
public:
explicit ev_pool(int size = 4);
@@ -18,7 +24,7 @@ public:
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_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);
event_base* dispatching();
void ev_loop_exit(event_base* base);

View File

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

View File

@@ -15,7 +15,7 @@ public:
public:
virtual mp::sri* login(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);
private:
mysqlpp::Connection* conn = DB::link();

View File

@@ -19,11 +19,8 @@ mp::sri* UserService::register_(uint64_t account, const std::string &password)
// 加密密码 生成hash
std::string source = std::to_string(account) + password + password_salt;
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) {