Refine RPC

This commit is contained in:
Changhua
2022-08-07 15:03:17 +08:00
parent 4959b58b23
commit 19f6854b73
8 changed files with 85 additions and 92 deletions
+17 -17
View File
@@ -1,4 +1,4 @@
#include "framework.h"
#include "framework.h"
#include "load_calls.h"
#include "receive_msg.h"
@@ -14,30 +14,31 @@ MsgQueue_t g_MsgQueue;
DWORD reg_buffer = 0;
DWORD recvMsgCallAddr = 0;
DWORD recvMsgJumpBackAddr = 0;
RpcMessage_t *pMsg = NULL; // Find a palce to free
RpcMessage_t lMsg = { 0 };
void DispatchMsg(DWORD reg)
{
DWORD *p = (DWORD *)reg; //消息结构基址
DWORD* p = (DWORD*)reg; //消息结构基址
memset(pMsg, 0, sizeof(RpcMessage_t));
memset(&lMsg, 0, sizeof(RpcMessage_t));
pMsg->type = GET_DWORD(*p + g_WxCalls.recvMsg.type);
pMsg->self = GET_DWORD(*p + g_WxCalls.recvMsg.isSelf);
lMsg.type = GET_DWORD(*p + g_WxCalls.recvMsg.type);
lMsg.self = GET_DWORD(*p + g_WxCalls.recvMsg.isSelf);
lMsg.id = GetBstrByAddress(*p + g_WxCalls.recvMsg.msgId);
lMsg.xml = GetBstrByAddress(*p + g_WxCalls.recvMsg.msgXml);
GetWstringByAddress(*p + g_WxCalls.recvMsg.msgId, pMsg->id, MSG_SIZE_MSG_ID);
GetWstringByAddress(*p + g_WxCalls.recvMsg.msgXml, pMsg->xml, MSG_SIZE_MSG_XML);
if (wcsstr(pMsg->xml, L"<membercount>") == NULL) {
if (wcsstr(lMsg.xml, L"<membercount>") == NULL) {
// pMsg.roomId = {0};
GetWstringByAddress(*p + g_WxCalls.recvMsg.roomId, pMsg->wxId, MSG_SIZE_WXID);
} else {
pMsg->source = 1;
GetWstringByAddress(*p + g_WxCalls.recvMsg.roomId, pMsg->roomId, MSG_SIZE_ROOMID);
GetWstringByAddress(*p + g_WxCalls.recvMsg.wxId, pMsg->wxId, MSG_SIZE_WXID);
lMsg.wxId = GetBstrByAddress(*p + g_WxCalls.recvMsg.roomId);
}
GetWstringByAddress(*p + g_WxCalls.recvMsg.content, pMsg->content, MSG_SIZE_CONTENT);
g_MsgQueue.push(*pMsg); // 发送消息
else {
lMsg.source = 1;
lMsg.wxId = GetBstrByAddress(*p + g_WxCalls.recvMsg.wxId);
lMsg.roomId = GetBstrByAddress(*p + g_WxCalls.recvMsg.roomId);
}
lMsg.content = GetBstrByAddress(*p + g_WxCalls.recvMsg.content);
g_MsgQueue.push(lMsg); // 发送消息
SetEvent(g_hEvent); // 发送消息通知
}
@@ -63,7 +64,6 @@ void ListenMessage()
return;
}
pMsg = new RpcMessage_t;
DWORD hookAddress = g_WeChatWinDllAddr + g_WxCalls.recvMsg.hook;
recvMsgCallAddr = g_WeChatWinDllAddr + g_WxCalls.recvMsg.call;
recvMsgJumpBackAddr = hookAddress + 5;
+2 -2
View File
@@ -25,7 +25,7 @@ void server_EnableReceiveMsg()
// 中断式,兼顾及时性和CPU使用率
WaitForSingleObject(g_hEvent, INFINITE); // 等待消息
while (!g_MsgQueue.empty()) {
client_ReceiveMsg((RpcMessage_t *)&g_MsgQueue.front()); // 调用接收消息回调
client_ReceiveMsg(g_MsgQueue.front()); // 调用接收消息回调
g_MsgQueue.pop();
}
ResetEvent(g_hEvent);
@@ -34,7 +34,7 @@ void server_EnableReceiveMsg()
RpcExcept(1)
{
ulCode = RpcExceptionCode();
printf("Runtime reported exception 0x%lx = %ld\n", ulCode, ulCode);
printf("server_EnableReceiveMsg exception 0x%lx = %ld\n", ulCode, ulCode);
}
RpcEndExcept
}
+2 -2
View File
@@ -3,7 +3,7 @@
#include "framework.h"
#include <queue>
#include "rpc_types.h"
#include "rpc_h.h"
typedef struct UserInfoCall {
DWORD wxid;
@@ -19,7 +19,7 @@ typedef struct RecvMsg {
DWORD msgId; // 消息ID地址
DWORD msgXml; // 消息xml内容地址
DWORD roomId; // 群聊时,为群ID;私聊时,为微信ID
DWORD wxId; // 私聊时,为空;群时,为发送者微信ID
DWORD wxId; // 私聊时,为空;群时,为发送者微信ID
DWORD content; // 消息内容地址
} RecvMsg_t;