IM/MS/mmm/handler.cpp

85 lines
2.3 KiB
C++

//
// Created by dongl on 23-4-28.
//
#include "handler.h"
#include "Response.h"
// handler 保有 session
session* handler::session = new class session();
/// resp im
void handler::resp(const std::shared_ptr<agreement_request>& request,
const std::shared_ptr<agreement_response>& response) {
/// 用户操作逻辑包
// 定义200序号一下的为操作逻辑业务逻辑 请求与响应 +20 就能一一对应
// 例如 login包类型为 request login==0 那么响应这个登陆信息就是 response login==0+20
// 200 以上 为im msg 通讯的包类型序号
if (request->m_mph->mp_type() < 200) {
// auto resp = new Response((mp::MP_TYPE) (request->m_mph->mp_type() + 20),
// response->m_sri.subcommand(), response->m_sri.username(),
// response->m_sri.msg(), response->m_sri.token());
auto resp = new Response((mp::MP_TYPE) (request->m_mph->mp_type() + 20),
response->m_sri.subcommand(),
response->m_sri.account(), response->m_sri.username(),
response->m_sri.email(), response->m_sri.phone(),
response->m_sri.msg(), response->m_sri.token(),
response->m_sri.data());
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) {
// 查询在线的用户信息
auto ret = session->find_user_fd(request->m_body.target());
// 用户信息结构体
userinfo *user;
if (ret.has_value()) {
user = ret->second;
}
}
/// end curr mem user curd
void
handler::ccp2p(const std::shared_ptr<agreement_request> &request, const std::shared_ptr<agreement_response> &response) {
}
void handler::remove_user(bufferevent* bev) {
session->remove_user(bev);
}
std::optional<std::string> handler::get_session(bufferevent *bev, const std::string &session_key) {
return session->get_session(bev, session_key);
}