小范围修改 删除打印
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
15
MC/gui/CMakeLists.txt
Normal 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
19
MC/gui/main.cpp
Normal 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();
|
||||
//}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
27
MS/MS.cpp
27
MS/MS.cpp
@@ -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);
|
||||
|
||||
@@ -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() {}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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());
|
||||
// 执行逻辑 自定义
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
// 开始执行 请求
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user