Close #85
This commit is contained in:
parent
6b954e0a4b
commit
689106844f
@ -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(), '\\', '/');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user