This commit is contained in:
Changhua 2023-11-22 22:37:16 +08:00
parent 6b954e0a4b
commit 689106844f

View File

@ -2,7 +2,6 @@
#include "framework.h" #include "framework.h"
#include <condition_variable> #include <condition_variable>
#include <filesystem>
#include <mutex> #include <mutex>
#include <queue> #include <queue>
@ -12,8 +11,6 @@
#include "user_info.h" #include "user_info.h"
#include "util.h" #include "util.h"
namespace fs = std::filesystem;
// Defined in rpc_server.cpp // Defined in rpc_server.cpp
extern bool gIsListening, gIsListeningPyq; extern bool gIsListening, gIsListeningPyq;
extern mutex gMutex; extern mutex gMutex;
@ -99,43 +96,48 @@ void UnHookAddress(DWORD hookAddr, CHAR restoreCode[5])
void DispatchMsg(DWORD reg) void DispatchMsg(DWORD reg)
{ {
WxMsg_t wxMsg; WxMsg_t wxMsg;
try {
wxMsg.id = GET_QWORD(reg + g_WxCalls.recvMsg.msgId);
wxMsg.type = GET_DWORD(reg + g_WxCalls.recvMsg.type);
wxMsg.is_self = GET_DWORD(reg + g_WxCalls.recvMsg.isSelf);
wxMsg.ts = GET_DWORD(reg + g_WxCalls.recvMsg.ts);
wxMsg.content = GetStringByWstrAddr(reg + g_WxCalls.recvMsg.content);
wxMsg.sign = GetStringByStrAddr(reg + g_WxCalls.recvMsg.sign);
wxMsg.xml = GetStringByStrAddr(reg + g_WxCalls.recvMsg.msgXml);
wxMsg.id = GET_QWORD(reg + g_WxCalls.recvMsg.msgId); string roomid = GetStringByWstrAddr(reg + g_WxCalls.recvMsg.roomId);
wxMsg.type = GET_DWORD(reg + g_WxCalls.recvMsg.type); if (roomid.find("@chatroom") != string::npos) { // 群 ID 的格式为 xxxxxxxxxxx@chatroom
wxMsg.is_self = GET_DWORD(reg + g_WxCalls.recvMsg.isSelf); wxMsg.is_group = true;
wxMsg.ts = GET_DWORD(reg + g_WxCalls.recvMsg.ts); wxMsg.roomid = roomid;
wxMsg.content = GetStringByWstrAddr(reg + g_WxCalls.recvMsg.content); if (wxMsg.is_self) {
wxMsg.sign = GetStringByStrAddr(reg + g_WxCalls.recvMsg.sign); wxMsg.sender = GetSelfWxid();
wxMsg.xml = GetStringByStrAddr(reg + g_WxCalls.recvMsg.msgXml); } else {
wxMsg.sender = GetStringByStrAddr(reg + g_WxCalls.recvMsg.wxid);
string roomid = GetStringByWstrAddr(reg + g_WxCalls.recvMsg.roomId); }
if (roomid.find("@chatroom") != string::npos) { // 群 ID 的格式为 xxxxxxxxxxx@chatroom
wxMsg.is_group = true;
wxMsg.roomid = roomid;
if (wxMsg.is_self) {
wxMsg.sender = GetSelfWxid();
} else { } else {
wxMsg.sender = GetStringByStrAddr(reg + g_WxCalls.recvMsg.wxid); wxMsg.is_group = false;
if (wxMsg.is_self) {
wxMsg.sender = GetSelfWxid();
} else {
wxMsg.sender = roomid;
}
} }
} else {
wxMsg.is_group = false; wxMsg.thumb = GetStringByStrAddr(reg + g_WxCalls.recvMsg.thumb);
if (wxMsg.is_self) { if (!wxMsg.thumb.empty()) {
wxMsg.sender = GetSelfWxid(); wxMsg.thumb = GetHomePath() + wxMsg.thumb;
} else { replace(wxMsg.thumb.begin(), wxMsg.thumb.end(), '\\', '/');
wxMsg.sender = roomid;
} }
}
wxMsg.thumb = GetStringByStrAddr(reg + g_WxCalls.recvMsg.thumb); wxMsg.extra = GetStringByStrAddr(reg + g_WxCalls.recvMsg.extra);
if (!wxMsg.thumb.empty()) { if (!wxMsg.extra.empty()) {
wxMsg.thumb = fs::path(GetHomePath() + wxMsg.thumb).make_preferred().string(); wxMsg.extra = GetHomePath() + wxMsg.extra;
replace(wxMsg.thumb.begin(), wxMsg.thumb.end(), '\\', '/'); replace(wxMsg.extra.begin(), wxMsg.extra.end(), '\\', '/');
} }
} catch (const std::exception &e) {
wxMsg.extra = GetStringByStrAddr(reg + g_WxCalls.recvMsg.extra); LOG_ERROR(GB2312ToUtf8(e.what()));
if (!wxMsg.extra.empty()) { } catch (...) {
wxMsg.extra = fs::path(GetHomePath() + wxMsg.extra).make_preferred().string(); LOG_ERROR("Unknow exception.");
replace(wxMsg.extra.begin(), wxMsg.extra.end(), '\\', '/');
} }
{ {