Refine RPC
This commit is contained in:
+17
-17
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user