88 lines
2.5 KiB
C++
88 lines
2.5 KiB
C++
//
|
|
// 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) {
|
|
/// 用户操作逻辑包
|
|
// 定义100序号一下的为操作逻辑业务逻辑 请求与响应 +20 就能一一对应
|
|
// 例如 login包类型为 request login==0 那么响应这个登陆信息就是 response login==0+20
|
|
// 100 以上 为im msg 通讯的包类型序号
|
|
if (request->m_mph->mp_type() < 100) {
|
|
auto resp = new Response((mp::MP_TYPE) (request->m_mph->mp_type() + 20),
|
|
response->m_sri.sri_code(), response->m_sri.sri_username(),
|
|
response->m_sri.sri_msg(), response->m_sri.sri_token());
|
|
auto ret = resp->packet();
|
|
|
|
bufferevent_write(request->m_bev, ret.c_str(), ret.size());
|
|
delete resp;
|
|
}
|
|
/// 聊天消息包
|
|
else {
|
|
handler::send(request, response);
|
|
}
|
|
}
|
|
/// end resp im
|
|
|
|
void
|
|
handler::send(const std::shared_ptr<agreement_request> &request, const std::shared_ptr<agreement_response> &response) {
|
|
// 聊天消息包
|
|
userinfo *user = user_fd.find(request->m_body.target())->second;
|
|
|
|
}
|
|
|
|
/// curr mem user curd
|
|
void handler::add_user(const std::shared_ptr<agreement_request>& request) {
|
|
auto ele = new userinfo();
|
|
ele->bev = request->m_bev;
|
|
sprintf(ele->ip, "%s", inet_ntoa(request->m_addr->sin_addr));
|
|
user_fd.insert({strtol(request->m_body.account().c_str(), nullptr, 0), ele});
|
|
}
|
|
|
|
void handler::remove_user(bufferevent *bev) {
|
|
uint64_t target_ele;
|
|
for (const auto &item: user_fd) {
|
|
if (bev == item.second->bev) {
|
|
target_ele = item.first;
|
|
break;
|
|
}
|
|
}
|
|
|
|
user_fd.erase(target_ele);
|
|
}
|
|
|
|
void handler::remove_user(const std::shared_ptr<agreement_request>& request) {
|
|
bufferevent_free(request->m_bev);
|
|
user_fd.erase(strtol(request->m_body.account().c_str(), nullptr, 0));
|
|
}
|
|
|
|
bool handler::is_user(const std::string& account) {
|
|
if( user_fd.find(strtol(account.c_str(), nullptr, 0)) == user_fd.cend() ){
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
std::map<uint64_t, userinfo*>::iterator handler::find_user_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) {
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|