Skip to content

Commit f5ff11d

Browse files
committed
modify:message and topic modify and request message number to http protocol
1 parent a7322b9 commit f5ff11d

10 files changed

Lines changed: 358 additions & 196 deletions

File tree

XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.def

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ EXPORTS
2121
ProtocolModule_Parse_Register
2222
ProtocolModule_Parse_Token
2323
ProtocolModule_Parse_Type
24-
ProtocolModule_Parse_XMQ
24+
ProtocolModule_Parse_XMQ
25+
ProtocolModule_Parse_MessageQueue
26+
ProtocolModule_Parse_ModifyTopic

XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Packet/ProtocolModule_Packet.cpp

Lines changed: 19 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -88,76 +88,51 @@ bool CProtocolModule_Packet::ProtocolModule_Packet_Common(int nNetType, XENGINE_
8888
/********************************************************************
8989
函数名称:ProtocolModule_Packet_MQNumber
9090
函数功能:获取序列打包函数
91-
参数.一:pSt_ProtocolHdr
92-
In/Out:In
93-
类型:数据结构指针
94-
可空:N
95-
意思:输入协议头
96-
参数.二:pSt_MQNumber
97-
In/Out:In
98-
类型:数据结构指针
99-
可空:N
100-
意思:输入要打包的序列号信息
101-
参数.三:ptszMsgBuffer
91+
参数.一:ptszMsgBuffer
10292
In/Out:Out
10393
类型:字符指针
10494
可空:N
10595
意思:输出打好包的缓冲区
106-
参数.:pInt_MsgLen
96+
参数.:pInt_MsgLen
10797
In/Out:Out
10898
类型:整数型指针
10999
可空:N
110100
意思:输出缓冲区大小
111-
参数.五:nNetType
112-
In/Out:Out
113-
类型:整数型
101+
参数.三:pSt_MQNumber
102+
In/Out:In
103+
类型:数据结构指针
114104
可空:N
115-
意思:输入网络类型
105+
意思:输入要打包的序列号信息
116106
返回值
117107
类型:逻辑型
118108
意思:是否成功
119109
备注:
120110
*********************************************************************/
121-
bool CProtocolModule_Packet::ProtocolModule_Packet_MQNumber(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XENGINE_MQNUMBER* pSt_MQNumber, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nNetType)
111+
bool CProtocolModule_Packet::ProtocolModule_Packet_MQNumber(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_MQNUMBER* pSt_MQNumber)
122112
{
123113
Protocol_IsErrorOccur = false;
124114

125-
if ((NULL == pSt_ProtocolHdr) || (NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen))
115+
if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen))
126116
{
127117
Protocol_IsErrorOccur = true;
128118
Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT;
129119
return false;
130120
}
121+
Json::Value st_JsonRoot;
122+
Json::Value st_JsonObject;
123+
Json::StreamWriterBuilder st_JsonBuilder;
131124

132-
if (XENGINE_MQAPP_NETTYPE_TCP == nNetType)
133-
{
134-
pSt_ProtocolHdr->unPacketSize = sizeof(XENGINE_MQNUMBER);
135-
memcpy(ptszMsgBuffer, pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR));
136-
memcpy(ptszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), pSt_MQNumber, sizeof(XENGINE_MQNUMBER));
137-
*pInt_MsgLen = sizeof(XENGINE_PROTOCOLHDR) + sizeof(XENGINE_MQNUMBER);
138-
}
139-
else
140-
{
141-
Json::Value st_JsonRoot;
142-
Json::Value st_JsonObject;
143-
Json::StreamWriterBuilder st_JsonBuilder;
144-
145-
st_JsonRoot["unOperatorType"] = pSt_ProtocolHdr->unOperatorType;
146-
st_JsonRoot["unOperatorCode"] = pSt_ProtocolHdr->unOperatorCode;
147-
st_JsonRoot["wReserve"] = pSt_ProtocolHdr->wReserve;
125+
st_JsonObject["tszMQKey"] = pSt_MQNumber->tszMQKey;
126+
st_JsonObject["nCount"] = (Json::Value::Int64)pSt_MQNumber->nCount;
127+
st_JsonObject["nFirstNumber"] = (Json::Value::Int64)pSt_MQNumber->nFirstNumber;
128+
st_JsonObject["nLastNumber"] = (Json::Value::Int64)pSt_MQNumber->nLastNumber;
148129

149-
st_JsonObject["tszMQKey"] = pSt_MQNumber->tszMQKey;
150-
st_JsonObject["nCount"] = (Json::Value::Int64)pSt_MQNumber->nCount;
151-
st_JsonObject["nFirstNumber"] = (Json::Value::Int64)pSt_MQNumber->nFirstNumber;
152-
st_JsonObject["nLastNumber"] = (Json::Value::Int64)pSt_MQNumber->nLastNumber;
153-
154-
st_JsonRoot["st_MQNumber"] = st_JsonObject;
130+
st_JsonRoot["st_MQNumber"] = st_JsonObject;
155131

156-
st_JsonBuilder["emitUTF8"] = true;
132+
st_JsonBuilder["emitUTF8"] = true;
157133

158-
*pInt_MsgLen = Json::writeString(st_JsonBuilder, st_JsonRoot).length();
159-
memcpy(ptszMsgBuffer, Json::writeString(st_JsonBuilder, st_JsonRoot).c_str(), *pInt_MsgLen);
160-
}
134+
*pInt_MsgLen = Json::writeString(st_JsonBuilder, st_JsonRoot).length();
135+
memcpy(ptszMsgBuffer, Json::writeString(st_JsonBuilder, st_JsonRoot).c_str(), *pInt_MsgLen);
161136
return true;
162137
}
163138
/********************************************************************

XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Packet/ProtocolModule_Packet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class CProtocolModule_Packet
2626
~CProtocolModule_Packet();
2727
public:
2828
bool ProtocolModule_Packet_Common(int nNetType, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XENGINE_PROTOCOL_XMQ* pSt_MQProtocol, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer = NULL, int nMsgLen = 0);
29-
bool ProtocolModule_Packet_MQNumber(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XENGINE_MQNUMBER* pSt_MQNumber, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nNetType);
29+
bool ProtocolModule_Packet_MQNumber(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_MQNUMBER* pSt_MQNumber);
3030
bool ProtocolModule_Packet_PassAuth(XENGINE_PROTOCOL_USERAUTH* pSt_ProtocolAuth, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nCode);
3131
bool ProtocolModule_Packet_PassUser(XENGINE_PROTOCOL_USERINFO* pSt_ProtocolUser, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nCode);
3232
bool ProtocolModule_Packet_PassHttp(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszToken, LPCXSTR lpszAPIUser, LPCXSTR lpszURIApi);

XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,4 +474,159 @@ bool CProtocolModule_Parse::ProtocolModule_Parse_XMQ(LPCXSTR lpszMsgBuffer, int
474474
pSt_XMQProtocol->nSerial = st_JsonObject["nSerial"].asInt();
475475
}
476476
return true;
477+
}
478+
/********************************************************************
479+
函数名称:ProtocolModule_Parse_MessageQueue
480+
函数功能:解析消息数据协议
481+
参数.一:lpszMsgBuffer
482+
In/Out:In
483+
类型:常量字符指针
484+
可空:N
485+
意思:要解析的数据
486+
参数.二:nMsgLen
487+
In/Out:In
488+
类型:整数型
489+
可空:N
490+
意思:要解析的大小
491+
参数.三:pSt_MQMessage
492+
In/Out:Out
493+
类型:数据结构指针
494+
可空:N
495+
意思:输出解析的消息协议
496+
返回值
497+
类型:逻辑型
498+
意思:是否成功
499+
备注:
500+
*********************************************************************/
501+
bool CProtocolModule_Parse::ProtocolModule_Parse_MessageQueue(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_DBMESSAGEQUEUE* pSt_MQMessage)
502+
{
503+
Protocol_IsErrorOccur = false;
504+
if ((NULL == lpszMsgBuffer))
505+
{
506+
Protocol_IsErrorOccur = true;
507+
Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT;
508+
return false;
509+
}
510+
Json::Value st_JsonRoot;
511+
JSONCPP_STRING st_JsonError;
512+
Json::CharReaderBuilder st_ReaderBuilder;
513+
std::unique_ptr<Json::CharReader> const pSt_JsonReader(st_ReaderBuilder.newCharReader());
514+
if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError))
515+
{
516+
Protocol_IsErrorOccur = true;
517+
Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARSE;
518+
return false;
519+
}
520+
Json::Value st_JsonObject = st_JsonRoot["Object"];
521+
522+
if (!st_JsonObject["byMsgType"].isNull())
523+
{
524+
pSt_MQMessage->byMsgType = st_JsonObject["byMsgType"].asInt();
525+
}
526+
if (!st_JsonObject["nMsgAttr"].isNull())
527+
{
528+
XSHOT nMsgAttr = st_JsonObject["nMsgAttr"].asUInt();
529+
memcpy(&pSt_MQMessage->nMsgAttr, &nMsgAttr, sizeof(XENGINE_PROTOCOL_MSGATTR));
530+
}
531+
if (!st_JsonObject["nQueueSerial"].isNull())
532+
{
533+
pSt_MQMessage->nQueueSerial = st_JsonObject["nQueueSerial"].asInt64();
534+
}
535+
if (!st_JsonObject["nMsgLen"].isNull())
536+
{
537+
pSt_MQMessage->nMsgLen = st_JsonObject["nMsgLen"].asInt();
538+
}
539+
if (!st_JsonObject["tszMsgBuffer"].isNull())
540+
{
541+
_tcsxcpy(pSt_MQMessage->tszMsgBuffer, st_JsonObject["tszMsgBuffer"].asCString());
542+
}
543+
if (!st_JsonObject["tszUserName"].isNull())
544+
{
545+
_tcsxcpy(pSt_MQMessage->tszUserName, st_JsonObject["tszUserName"].asCString());
546+
}
547+
if (!st_JsonObject["tszUserBelong"].isNull())
548+
{
549+
_tcsxcpy(pSt_MQMessage->tszUserBelong, st_JsonObject["tszUserBelong"].asCString());
550+
}
551+
if (!st_JsonObject["tszQueueName"].isNull())
552+
{
553+
_tcsxcpy(pSt_MQMessage->tszQueueName, st_JsonObject["tszQueueName"].asCString());
554+
}
555+
if (!st_JsonObject["tszQueueLeftTime"].isNull())
556+
{
557+
_tcsxcpy(pSt_MQMessage->tszQueueLeftTime, st_JsonObject["tszQueueLeftTime"].asCString());
558+
}
559+
if (!st_JsonObject["tszQueuePublishTime"].isNull())
560+
{
561+
_tcsxcpy(pSt_MQMessage->tszQueuePublishTime, st_JsonObject["tszQueuePublishTime"].asCString());
562+
}
563+
return true;
564+
}
565+
/********************************************************************
566+
函数名称:ProtocolModule_Parse_ModifyTopic
567+
函数功能:解析修改主题协议
568+
参数.一:lpszMsgBuffer
569+
In/Out:In
570+
类型:常量字符指针
571+
可空:N
572+
意思:要解析的数据
573+
参数.二:nMsgLen
574+
In/Out:In
575+
类型:整数型
576+
可空:N
577+
意思:要解析的大小
578+
参数.三:ptszSrcTopic
579+
In/Out:Out
580+
类型:字符指针
581+
可空:N
582+
意思:输出原始主题名称
583+
参数.四:ptszDstTopic
584+
In/Out:Out
585+
类型:字符指针
586+
可空:N
587+
意思:输出目标主题名称
588+
参数.五:ptszUser
589+
In/Out:Out
590+
类型:字符指针
591+
可空:N
592+
意思:输出所属用户
593+
返回值
594+
类型:逻辑型
595+
意思:是否成功
596+
备注:
597+
*********************************************************************/
598+
bool CProtocolModule_Parse::ProtocolModule_Parse_ModifyTopic(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszSrcTopic, XCHAR* ptszDstTopic, XCHAR* ptszUser)
599+
{
600+
Protocol_IsErrorOccur = false;
601+
602+
if (NULL == lpszMsgBuffer)
603+
{
604+
Protocol_IsErrorOccur = true;
605+
Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT;
606+
return false;
607+
}
608+
Json::Value st_JsonRoot;
609+
JSONCPP_STRING st_JsonError;
610+
Json::CharReaderBuilder st_ReaderBuilder;
611+
std::unique_ptr<Json::CharReader> const pSt_JsonReader(st_ReaderBuilder.newCharReader());
612+
if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError))
613+
{
614+
Protocol_IsErrorOccur = true;
615+
Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARSE;
616+
return false;
617+
}
618+
Json::Value st_JsonObject = st_JsonRoot["Object"];
619+
if (!st_JsonObject["tszSrcTopic"].isNull())
620+
{
621+
_tcsxcpy(ptszSrcTopic, st_JsonObject["tszSrcTopic"].asCString());
622+
}
623+
if (!st_JsonObject["tszDstTopic"].isNull())
624+
{
625+
_tcsxcpy(ptszDstTopic, st_JsonObject["tszDstTopic"].asCString());
626+
}
627+
if (!st_JsonObject["tszUser"].isNull())
628+
{
629+
_tcsxcpy(ptszUser, st_JsonObject["tszUser"].asCString());
630+
}
631+
return true;
477632
}

XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ class CProtocolModule_Parse
2222
bool ProtocolModule_Parse_Token(LPCXSTR lpszMsgBuffer, int nMsgLen, XNETHANDLE* pxhToken);
2323
bool ProtocolModule_Parse_Type(LPCXSTR lpszMsgBuffer, int nMsgLen, int* pInt_Type);
2424
bool ProtocolModule_Parse_XMQ(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOL_XMQ* pSt_XMQProtocol);
25+
bool ProtocolModule_Parse_MessageQueue(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_DBMESSAGEQUEUE* pSt_MQMessage);
26+
bool ProtocolModule_Parse_ModifyTopic(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszSrcTopic, XCHAR* ptszDstTopic, XCHAR* ptszUser);
2527
protected:
2628
private:
2729
};

XEngine_Source/MQCore_ProtocolModule/Protocol_Define.h

Lines changed: 66 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -64,37 +64,27 @@ extern "C" bool ProtocolModule_Packet_Common(int nNetType, XENGINE_PROTOCOLHDR*
6464
/********************************************************************
6565
函数名称:ProtocolModule_Packet_MQNumber
6666
函数功能:获取序列打包函数
67-
参数.一:pSt_ProtocolHdr
68-
In/Out:In
69-
类型:数据结构指针
70-
可空:N
71-
意思:输入协议头
72-
参数.二:pSt_MQNumber
73-
In/Out:In
74-
类型:数据结构指针
75-
可空:N
76-
意思:输入要打包的序列号信息
77-
参数.三:ptszMsgBuffer
67+
参数.一:ptszMsgBuffer
7868
In/Out:Out
7969
类型:字符指针
8070
可空:N
8171
意思:输出打好包的缓冲区
82-
参数.:pInt_MsgLen
72+
参数.:pInt_MsgLen
8373
In/Out:Out
8474
类型:整数型指针
8575
可空:N
8676
意思:输出缓冲区大小
87-
参数.五:nNetType
88-
In/Out:Out
89-
类型:整数型
77+
参数.三:pSt_MQNumber
78+
In/Out:In
79+
类型:数据结构指针
9080
可空:N
91-
意思:输入网络类型
81+
意思:输入要打包的序列号信息
9282
返回值
9383
类型:逻辑型
9484
意思:是否成功
9585
备注:
9686
*********************************************************************/
97-
extern "C" bool ProtocolModule_Packet_MQNumber(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XENGINE_MQNUMBER* pSt_MQNumber, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nNetType);
87+
extern "C" bool ProtocolModule_Packet_MQNumber(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_MQNUMBER* pSt_MQNumber);
9888
/********************************************************************
9989
函数名称:ProtocolModule_Packet_PassAuth
10090
函数功能:HTTP代理打包函数
@@ -531,4 +521,62 @@ extern "C" bool ProtocolModule_Parse_Type(LPCXSTR lpszMsgBuffer, int nMsgLen, in
531521
意思:是否成功
532522
备注:
533523
*********************************************************************/
534-
extern "C" bool ProtocolModule_Parse_XMQ(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOL_XMQ* pSt_XMQProtocol);
524+
extern "C" bool ProtocolModule_Parse_XMQ(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOL_XMQ* pSt_XMQProtocol);
525+
/********************************************************************
526+
函数名称:ProtocolModule_Parse_MessageQueue
527+
函数功能:解析消息数据协议
528+
参数.一:lpszMsgBuffer
529+
In/Out:In
530+
类型:常量字符指针
531+
可空:N
532+
意思:要解析的数据
533+
参数.二:nMsgLen
534+
In/Out:In
535+
类型:整数型
536+
可空:N
537+
意思:要解析的大小
538+
参数.三:pSt_MQMessage
539+
In/Out:Out
540+
类型:数据结构指针
541+
可空:N
542+
意思:输出解析的消息协议
543+
返回值
544+
类型:逻辑型
545+
意思:是否成功
546+
备注:
547+
*********************************************************************/
548+
extern "C" bool ProtocolModule_Parse_MessageQueue(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_DBMESSAGEQUEUE* pSt_MQMessage);
549+
/********************************************************************
550+
函数名称:ProtocolModule_Parse_ModifyTopic
551+
函数功能:解析修改主题协议
552+
参数.一:lpszMsgBuffer
553+
In/Out:In
554+
类型:常量字符指针
555+
可空:N
556+
意思:要解析的数据
557+
参数.二:nMsgLen
558+
In/Out:In
559+
类型:整数型
560+
可空:N
561+
意思:要解析的大小
562+
参数.三:ptszSrcTopic
563+
In/Out:Out
564+
类型:字符指针
565+
可空:N
566+
意思:输出原始主题名称
567+
参数.四:ptszDstTopic
568+
In/Out:Out
569+
类型:字符指针
570+
可空:N
571+
意思:输出目标主题名称
572+
参数.五:ptszUser
573+
In/Out:Out
574+
类型:字符指针
575+
可空:N
576+
意思:输出所属用户
577+
返回值
578+
类型:逻辑型
579+
意思:是否成功
580+
备注:
581+
*********************************************************************/
582+
extern "C" bool ProtocolModule_Parse_ModifyTopic(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszSrcTopic, XCHAR* ptszDstTopic, XCHAR* ptszUser);

0 commit comments

Comments
 (0)