调整了通讯结构,新增了装置台账结构
This commit is contained in:
60
LFtid1056/LFtid1056.rc
Normal file
60
LFtid1056/LFtid1056.rc
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
// Microsoft Visual C++ <20><><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>Դ<EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// <20><> TEXTINCLUDE 2 <20><>Դ<EFBFBD><D4B4><EFBFBD>ɡ<EFBFBD>
|
||||||
|
//
|
||||||
|
#include "winres.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>壬<EFBFBD>й<EFBFBD>) <20><>Դ
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
|
LANGUAGE 4, 2
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"resource.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"#include ""winres.h""\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
#endif // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>壬<EFBFBD>й<EFBFBD>) <20><>Դ
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// <20><> TEXTINCLUDE 3 <20><>Դ<EFBFBD><D4B4><EFBFBD>ɡ<EFBFBD>
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // <20><><EFBFBD><EFBFBD> APSTUDIO_INVOKED
|
||||||
666
LFtid1056/LFtid1056.vcxproj.filters
Normal file
666
LFtid1056/LFtid1056.vcxproj.filters
Normal file
@@ -0,0 +1,666 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="client2.cpp" />
|
||||||
|
<ClCompile Include="dealMsg.cpp" />
|
||||||
|
<ClCompile Include="main_thread.cpp" />
|
||||||
|
<ClCompile Include="PQSMsg.cpp" />
|
||||||
|
<ClCompile Include="cloudfront\code\cfg_parser.cpp">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cloudfront\code\interface.cpp">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cloudfront\code\log4.cpp">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cloudfront\code\main.cpp">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cloudfront\code\rocketmq.cpp">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cloudfront\code\tinyxml2.cpp">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cloudfront\code\worker.cpp">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="client2.h" />
|
||||||
|
<ClInclude Include="dealMsg.h" />
|
||||||
|
<ClInclude Include="PQSMsg.h" />
|
||||||
|
<ClInclude Include="cloudfront\code\front.h">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\interface.h">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq.h">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\tinyxml2.h">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\worker.h">
|
||||||
|
<Filter>cloudfront\code</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\curl.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\curlver.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\easy.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\header.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\mprintf.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\multi.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\options.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\stdcheaders.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\system.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\typecheck-gcc.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\urlapi.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\curl\websockets.h">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\appender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\asyncappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\callbackappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\clfsappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\clogger.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\config.hxx">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\configurator.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\consoleappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\exception.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\fileappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\fstreams.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\hierarchy.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\hierarchylocker.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\initializer.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\layout.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\log4.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\log4cplus.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\log4judpappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\logger.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\loggingmacros.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\loglevel.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\mdc.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\msttsappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\ndc.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\nteventlogappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\nullappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\qt4debugappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\qt5debugappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\socketappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\streams.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\syslogappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\tchar.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\tracelogger.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\tstring.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\version.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\win32consoleappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\win32debugappender.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\Arg_helper.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\AsyncCallback.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CBatchMessage.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CCommon.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CErrorMessage.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CMessage.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CMessageExt.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CMessageQueue.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CMQException.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\ConsumeType.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CProducer.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CPullConsumer.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CPullResult.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CPushConsumer.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CSendResult.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\CTransactionStatus.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\DefaultMQProducer.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\DefaultMQPullConsumer.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\DefaultMQPushConsumer.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\MQClient.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\MQClientException.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\MQMessage.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\MQMessageExt.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\MQMessageListener.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\MQMessageQueue.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\MQSelector.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\MQueueListener.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\PullResult.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\RocketMQClient.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\SendResult.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\SessionCredentials.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\TransactionListener.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\TransactionMQProducer.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\rocketmq\TransactionSendResult.h">
|
||||||
|
<Filter>cloudfront\code\rocketmq</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\adl_serializer.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\byte_container_with_subtype.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\json.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\json_fwd.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\ordered_map.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\abi_macros.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\exceptions.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\hash.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\json_custom_base_class.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\json_pointer.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\json_ref.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\macro_scope.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\macro_unscope.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\string_concat.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\string_escape.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\value_t.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\thirdparty\hedley\hedley.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\thirdparty\hedley</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\thirdparty\hedley\hedley_undef.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\thirdparty\hedley</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\conversions\from_json.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\conversions</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\conversions\to_chars.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\conversions</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\conversions\to_json.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\conversions</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\input\binary_reader.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\input</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\input\input_adapters.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\input</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\input\json_sax.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\input</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\input\lexer.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\input</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\input\parser.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\input</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\input\position_t.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\input</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\iterators\internal_iterator.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\iterators</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\iterators\iter_impl.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\iterators</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\iterators\iteration_proxy.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\iterators</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\iterators\iterator_traits.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\iterators</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\iterators\json_reverse_iterator.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\iterators</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\iterators\primitive_iterator.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\iterators</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\cpp_future.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\detected.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\identity_tag.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\is_sax.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\std_fs.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\type_traits.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\void_t.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\call_std\begin.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta\call_std</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\meta\call_std\end.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\meta\call_std</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\output\binary_writer.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\output</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\output\output_adapters.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\output</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\nlohmann\detail\output\serializer.hpp">
|
||||||
|
<Filter>cloudfront\code\nlohmann\detail\output</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\boost\deviceappender.hxx">
|
||||||
|
<Filter>cloudfront\code\log4cplus\boost</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\config\macosx.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\config</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\config\win32.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\config</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\config\windowsh-inc.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\config</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\config\windowsh-inc-full.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\config</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\appenderattachableimpl.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\connectorthread.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\eventcounter.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\fileinfo.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\lockfile.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\loglog.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\pointer.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\property.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\queue.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\snprintf.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\socket.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\socketbuffer.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\stringhelper.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\thread-config.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\helpers\timehelper.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\helpers</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\internal\customloglevelmanager.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\internal</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\internal\cygwin-win32.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\internal</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\internal\env.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\internal</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\internal\internal.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\internal</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\internal\socket.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\internal</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\spi\appenderattachable.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\spi</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\spi\factory.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\spi</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\spi\filter.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\spi</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\spi\loggerfactory.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\spi</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\spi\loggerimpl.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\spi</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\spi\loggingevent.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\spi</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\spi\objectregistry.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\spi</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\spi\rootlogger.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\spi</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\thread\syncprims.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\thread</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\thread\syncprims-pub-impl.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\thread</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\thread\threads.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\thread</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\thread\impl\syncprims-cxx11.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\thread\impl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\thread\impl\syncprims-impl.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\thread\impl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\thread\impl\syncprims-pmsm.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\thread\impl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\thread\impl\threads-impl.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\thread\impl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="cloudfront\code\log4cplus\thread\impl\tls.h">
|
||||||
|
<Filter>cloudfront\code\log4cplus\thread\impl</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="cloudfront">
|
||||||
|
<UniqueIdentifier>{e569c345-343c-4c70-b52e-1188cb7eb2a0}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code">
|
||||||
|
<UniqueIdentifier>{3aa4794b-faf1-449a-b331-d701ebafc085}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\curl">
|
||||||
|
<UniqueIdentifier>{f67e6a10-2961-4892-8537-bd8ab15a5bd3}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\log4cplus">
|
||||||
|
<UniqueIdentifier>{9d9e729c-19ee-46f3-97be-d46b4fc4bb9a}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\rocketmq">
|
||||||
|
<UniqueIdentifier>{17a8acb0-648d-4bb8-82f1-74a3c132e1ef}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann">
|
||||||
|
<UniqueIdentifier>{b22c4f25-4b96-48dc-bb52-7f642bc742d0}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\detail">
|
||||||
|
<UniqueIdentifier>{2b9bfc19-7f39-4a2f-80ad-f39e96a96b40}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\thirdparty">
|
||||||
|
<UniqueIdentifier>{a0f6b856-c407-420c-86ef-4c48a3c4df2e}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\thirdparty\hedley">
|
||||||
|
<UniqueIdentifier>{0cb06b60-69a9-4dd4-a963-4aedd6b4d7e3}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\detail\conversions">
|
||||||
|
<UniqueIdentifier>{73b4c759-6aba-40d3-8773-72a196af5a77}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\detail\input">
|
||||||
|
<UniqueIdentifier>{cb07968a-09c4-45ca-a73c-20d328df3216}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\detail\iterators">
|
||||||
|
<UniqueIdentifier>{3a75fc98-7cc2-4003-a060-73147b374fed}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\detail\meta">
|
||||||
|
<UniqueIdentifier>{100fee77-5ece-4d12-b55e-2183e5790d1b}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\detail\meta\call_std">
|
||||||
|
<UniqueIdentifier>{c10e4535-fe1d-4a33-a38f-29805e4e9b92}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\nlohmann\detail\output">
|
||||||
|
<UniqueIdentifier>{a147fc02-f373-49a8-a11f-a8914da54a7d}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\log4cplus\boost">
|
||||||
|
<UniqueIdentifier>{422223c2-2cfe-4998-b31d-7b59532b6d1f}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\log4cplus\config">
|
||||||
|
<UniqueIdentifier>{dc41a517-5a25-4d36-848d-8a21c9e35117}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\log4cplus\helpers">
|
||||||
|
<UniqueIdentifier>{f8ee7436-8072-4ba7-b219-3d33e410de0d}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\log4cplus\internal">
|
||||||
|
<UniqueIdentifier>{a66dc9bc-1acc-4048-adb2-7326395c7568}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\log4cplus\spi">
|
||||||
|
<UniqueIdentifier>{6039e9c3-2685-4a49-a08e-842dfc4d80d1}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\log4cplus\thread">
|
||||||
|
<UniqueIdentifier>{2f9e665b-d0f0-4de0-9b4d-23d002ec9990}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\log4cplus\thread\impl">
|
||||||
|
<UniqueIdentifier>{b40f40d0-492d-4fcf-8125-4db493497930}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="cloudfront\code\lib">
|
||||||
|
<UniqueIdentifier>{d64ce5f1-cb40-4da4-a7da-766e5a2d1656}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="cloudfront\code\curl\Makefile">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="cloudfront\code\curl\Makefile.am">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="cloudfront\code\curl\Makefile.in">
|
||||||
|
<Filter>cloudfront\code\curl</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="cloudfront\code\log4cplus\config.h.cmake.in">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="cloudfront\code\log4cplus\config.h.in">
|
||||||
|
<Filter>cloudfront\code\log4cplus</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="cloudfront\code\log4cplus\config\defines.hxx.in">
|
||||||
|
<Filter>cloudfront\code\log4cplus\config</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="cloudfront\lib\liblog4cplus.so.9">
|
||||||
|
<Filter>cloudfront\code\lib</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="build.sh" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Library Include="cloudfront\lib\liblog4cplus.so">
|
||||||
|
<Filter>cloudfront\code\lib</Filter>
|
||||||
|
</Library>
|
||||||
|
<Library Include="cloudfront\lib\liblog4cplusS.a">
|
||||||
|
<Filter>cloudfront\code\lib</Filter>
|
||||||
|
</Library>
|
||||||
|
<Library Include="cloudfront\lib\librocketmq.a">
|
||||||
|
<Filter>cloudfront\code\lib</Filter>
|
||||||
|
</Library>
|
||||||
|
<Library Include="cloudfront\lib\librocketmq.so">
|
||||||
|
<Filter>cloudfront\code\lib</Filter>
|
||||||
|
</Library>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
BIN
LFtid1056/RCa04916
Normal file
BIN
LFtid1056/RCa04916
Normal file
Binary file not shown.
BIN
LFtid1056/RCa17100
Normal file
BIN
LFtid1056/RCa17100
Normal file
Binary file not shown.
BIN
LFtid1056/RCb04916
Normal file
BIN
LFtid1056/RCb04916
Normal file
Binary file not shown.
BIN
LFtid1056/RCb17100
Normal file
BIN
LFtid1056/RCb17100
Normal file
Binary file not shown.
@@ -1,283 +1,307 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <uv.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include "PQSMsg.h"
|
|
||||||
#include "client2.h"
|
#include "client2.h"
|
||||||
|
#include "PQSMsg.h"
|
||||||
#include "dealMsg.h"
|
#include "dealMsg.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <cmath>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <vector>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
// 配置参数
|
// 配置参数
|
||||||
#define CONNECTIONS 10 // 支持1000个并发连接
|
constexpr int BASE_RECONNECT_DELAY = 5000; // 基础重连延迟(ms)
|
||||||
#define SERVER_IP "101.132.39.45" // 目标服务器IP "101.132.39.45"
|
constexpr int MAX_RECONNECT_DELAY = 60000; // 最大重连延迟(ms)
|
||||||
#define SERVER_PORT 1056 // 目标服务器端口
|
constexpr const char* SERVER_IP = "101.132.39.45"; // 目标服务器IP
|
||||||
#define BASE_RECONNECT_DELAY 5000 // 基础重连延迟(ms)
|
constexpr int SERVER_PORT = 1056; // 目标服务器端口
|
||||||
#define MAX_RECONNECT_DELAY 60000 // 最大重连延迟(ms)
|
|
||||||
|
|
||||||
static uv_loop_t* global_loop; // 全局事件循环
|
static uv_loop_t* global_loop = nullptr;
|
||||||
static client_context_t client_contexts[CONNECTIONS]; // 客户端上下文数组
|
static std::vector<std::unique_ptr<ClientContext>> client_contexts;
|
||||||
static uv_timer_t monitor_timer; // 连接监控定时器
|
static uv_timer_t monitor_timer;
|
||||||
extern SafeMessageQueue message_queue;
|
extern SafeMessageQueue message_queue;
|
||||||
|
|
||||||
|
// ClientContext 实现
|
||||||
|
ClientContext::ClientContext(uv_loop_t* loop, const DeviceInfo& device, int index)
|
||||||
|
: loop(loop), state(ConnectionState::DISCONNECTED),
|
||||||
|
reconnect_attempts(0), shutdown(false), device_info(device), index_(index) {
|
||||||
|
|
||||||
|
// 初始化 TCP 句柄
|
||||||
|
uv_tcp_init(loop, &client);
|
||||||
|
client.data = this;
|
||||||
|
|
||||||
|
// 初始化定时器
|
||||||
|
uv_timer_init(loop, &timer);
|
||||||
|
timer.data = this;
|
||||||
|
|
||||||
|
// 初始化重连定时器
|
||||||
|
uv_timer_init(loop, &reconnect_timer);
|
||||||
|
reconnect_timer.data = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientContext::~ClientContext() {
|
||||||
|
stop_timers();
|
||||||
|
close_handles();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientContext::init_tcp() {
|
||||||
|
if (!uv_is_active((uv_handle_t*)&client)) {
|
||||||
|
uv_tcp_init(loop, &client);
|
||||||
|
client.data = this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientContext::start_timer() {
|
||||||
|
if (!uv_is_active((uv_handle_t*)&timer)) {
|
||||||
|
uv_timer_start(&timer, on_timer, 6000, 6000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientContext::start_reconnect_timer(int delay) {
|
||||||
|
if (!uv_is_active((uv_handle_t*)&reconnect_timer)) {
|
||||||
|
uv_timer_start(&reconnect_timer, try_reconnect, delay, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientContext::stop_timers() {
|
||||||
|
if (uv_is_active((uv_handle_t*)&timer)) uv_timer_stop(&timer);
|
||||||
|
if (uv_is_active((uv_handle_t*)&reconnect_timer)) uv_timer_stop(&reconnect_timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClientContext::close_handles() {
|
||||||
|
if (!uv_is_closing((uv_handle_t*)&client)) {
|
||||||
|
uv_close((uv_handle_t*)&client, nullptr);
|
||||||
|
}
|
||||||
|
if (!uv_is_closing((uv_handle_t*)&timer)) {
|
||||||
|
uv_close((uv_handle_t*)&timer, nullptr);
|
||||||
|
}
|
||||||
|
if (!uv_is_closing((uv_handle_t*)&reconnect_timer)) {
|
||||||
|
uv_close((uv_handle_t*)&reconnect_timer, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* 缓冲区分配回调 */
|
/* 缓冲区分配回调 */
|
||||||
void alloc_buffer(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) {
|
void alloc_buffer(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) {
|
||||||
void* buffer = malloc(suggested_size);
|
buf->base = new char[suggested_size];
|
||||||
if (!buffer) {
|
buf->len = suggested_size;
|
||||||
*buf = uv_buf_init(NULL, 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
*buf = uv_buf_init((char*)buffer, suggested_size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 数据读取回调 */
|
/* 数据读取回调 */
|
||||||
void on_read(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
|
void on_read(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
|
||||||
client_context_t* ctx = (client_context_t*)stream->data;
|
ClientContext* ctx = static_cast<ClientContext*>(stream->data);
|
||||||
|
|
||||||
if (nread < 0) {
|
if (nread < 0) {
|
||||||
if (nread != UV_EOF) {
|
if (nread != UV_EOF) {
|
||||||
fprintf(stdout, "[Client %d] RECV ERROR: %s\n",
|
std::cerr << "[Device " << ctx->device_info.device_id
|
||||||
ctx->index, uv_strerror(nread));
|
<< "] RECV ERROR: " << uv_strerror(nread) << std::endl;
|
||||||
}
|
}
|
||||||
uv_close((uv_handle_t*)stream, on_close);
|
uv_close((uv_handle_t*)stream, on_close);
|
||||||
free(buf->base);
|
delete[] buf->base;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nread > 0) {
|
if (nread > 0) {
|
||||||
// 将接收到的数据放入消息队列
|
// 将接收到的数据放入消息队列
|
||||||
deal_message_t msg;
|
deal_message_t msg;
|
||||||
msg.client_index = ctx->index;
|
msg.device_id = ctx->device_info.device_id; // 直接赋值
|
||||||
msg.data = (char*)malloc(nread);
|
msg.mac = ctx->device_info.mac; // 直接赋值
|
||||||
|
|
||||||
|
// 复制测点信息
|
||||||
|
msg.points = ctx->device_info.points;
|
||||||
|
|
||||||
|
msg.data = new char[nread];
|
||||||
msg.length = nread;
|
msg.length = nread;
|
||||||
memcpy(msg.data, buf->base, nread);
|
memcpy(msg.data, buf->base, nread);
|
||||||
|
|
||||||
if (!message_queue.push(msg)) {
|
if (!message_queue.push(msg)) {
|
||||||
fprintf(stderr, "[Client %d] Message queue full, dropping message\n", ctx->index);
|
std::cerr << "[Device " << ctx->device_info.device_id
|
||||||
free(msg.data);
|
<< "] Message queue full, dropping message" << std::endl;
|
||||||
|
delete[] msg.data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(buf->base);
|
|
||||||
|
delete[] buf->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 数据写入回调 */
|
/* 数据写入回调 */
|
||||||
void on_write(uv_write_t* req, int status) {
|
void on_write(uv_write_t* req, int status) {
|
||||||
client_context_t* ctx = (client_context_t*)req->handle->data;
|
ClientContext* ctx = static_cast<ClientContext*>(req->handle->data);
|
||||||
|
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
fprintf(stdout, "[Client %d] SEND ERROR: %s\n",
|
std::cerr << "[Device " << ctx->device_info.device_id
|
||||||
ctx->index, uv_strerror(status));
|
<< "] SEND ERROR: " << uv_strerror(status) << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(req->data); // 释放发送数据缓冲区
|
delete[] static_cast<char*>(req->data); // 释放发送数据缓冲区
|
||||||
free(req); // 释放写入请求
|
delete req; // 释放写入请求
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 定时发送回调 */
|
/* 定时发送回调 */
|
||||||
void on_timer(uv_timer_t* handle) {
|
void on_timer(uv_timer_t* handle) {
|
||||||
client_context_t* ctx = (client_context_t*)handle->data;
|
ClientContext* ctx = static_cast<ClientContext*>(handle->data);
|
||||||
|
|
||||||
if (ctx->state != STATE_CONNECTED) {
|
if (ctx->state != ConnectionState::CONNECTED) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//单个装置定时消息收发机制
|
|
||||||
// 生成完整报文 装置云服务登录报文
|
|
||||||
auto binary_data = generate_frontlogin_message("00-B7-8D-A8-00-D6");
|
|
||||||
|
|
||||||
// 转换为数组形式
|
// 使用装置自己的MAC地址生成登录报文
|
||||||
unsigned char* binary_array = binary_data.data();
|
auto binary_data = generate_frontlogin_message(ctx->device_info.mac);
|
||||||
size_t data_size = binary_data.size();
|
|
||||||
|
|
||||||
// 此处可调用发送函数
|
// 调用发送函数
|
||||||
send_binary_data(ctx, binary_array, data_size);
|
send_binary_data(ctx, binary_data.data(), binary_data.size());
|
||||||
|
|
||||||
|
// 根据装置状态发送其他数据
|
||||||
|
if (ctx->device_info.status == 1) { // 在线状态
|
||||||
|
// 可以发送装置配置信息或测点数据
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* 发送二进制报文函数 */
|
/* 发送二进制报文函数 */
|
||||||
void send_binary_data(client_context_t* ctx, const unsigned char* data, size_t data_size) {
|
void send_binary_data(ClientContext* ctx, const unsigned char* data, size_t data_size) {
|
||||||
if (ctx->state != STATE_CONNECTED) {
|
if (ctx->state != ConnectionState::CONNECTED) {
|
||||||
fprintf(stderr, "[Client %d] Cannot send binary data: not connected\n", ctx->index);
|
std::cerr << "[Device " << ctx->device_info.device_id
|
||||||
|
<< "] Cannot send: not connected" << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uv_buf_t buf = uv_buf_init((char*)data, data_size);
|
uv_buf_t buf = uv_buf_init(const_cast<char*>(reinterpret_cast<const char*>(data)), data_size);
|
||||||
uv_write_t* write_req = (uv_write_t*)malloc(sizeof(uv_write_t));
|
uv_write_t* write_req = new uv_write_t;
|
||||||
if (!write_req) {
|
|
||||||
fprintf(stderr, "[Client %d] Failed to allocate write request\n", ctx->index);
|
// 复制数据以确保安全
|
||||||
return;
|
char* data_copy = new char[data_size];
|
||||||
}
|
memcpy(data_copy, data, data_size);
|
||||||
write_req->data = NULL; // 不需要额外数据,因为data已经传入
|
write_req->data = data_copy;
|
||||||
//fprintf(stdout, "[Client %d] Sending initial %zu bytes data\n", ctx->index, data_size);
|
|
||||||
|
|
||||||
int ret = uv_write(write_req, (uv_stream_t*)&ctx->client, &buf, 1, on_write);
|
int ret = uv_write(write_req, (uv_stream_t*)&ctx->client, &buf, 1, on_write);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
fprintf(stderr, "[Client %d] uv_write failed: %s\n", ctx->index, uv_strerror(ret));
|
std::cerr << "[Device " << ctx->device_info.device_id
|
||||||
free(write_req);
|
<< "] uv_write failed: " << uv_strerror(ret) << std::endl;
|
||||||
|
delete[] data_copy;
|
||||||
|
delete write_req;
|
||||||
}
|
}
|
||||||
// 注意:这里不需要释放data,因为data是由调用者管理的
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 连接关闭回调 */
|
/* 连接关闭回调 */
|
||||||
void on_close(uv_handle_t* handle) {
|
void on_close(uv_handle_t* handle) {
|
||||||
client_context_t* ctx = (client_context_t*)handle->data;
|
ClientContext* ctx = static_cast<ClientContext*>(handle->data);
|
||||||
ctx->state = STATE_DISCONNECTED;
|
ctx->state = ConnectionState::DISCONNECTED;
|
||||||
fprintf(stderr, "[Client %d] closed\n", ctx->index);
|
std::cerr << "[Device " << ctx->device_info.device_id << "] Connection closed" << std::endl;
|
||||||
// 停止定时器
|
|
||||||
uv_timer_stop(&ctx->timer);
|
ctx->stop_timers();
|
||||||
uv_timer_stop(&ctx->reconnect_timer);
|
|
||||||
|
|
||||||
// 自动重连逻辑
|
|
||||||
if (!ctx->shutdown) {
|
if (!ctx->shutdown) {
|
||||||
int delay = BASE_RECONNECT_DELAY * pow(2, ctx->reconnect_attempts);
|
int delay = BASE_RECONNECT_DELAY * pow(2, ctx->reconnect_attempts);
|
||||||
delay = delay > MAX_RECONNECT_DELAY ? MAX_RECONNECT_DELAY : delay;
|
delay = delay > MAX_RECONNECT_DELAY ? MAX_RECONNECT_DELAY : delay;
|
||||||
|
|
||||||
fprintf(stdout, "[Client %d] Reconnecting in %dms (attempt %d)\n",
|
std::cout << "[Device " << ctx->device_info.device_id
|
||||||
ctx->index, delay, ctx->reconnect_attempts + 1);
|
<< "] Reconnecting in " << delay << "ms (attempt "
|
||||||
|
<< ctx->reconnect_attempts + 1 << ")" << std::endl;
|
||||||
|
|
||||||
ctx->reconnect_attempts++;
|
ctx->reconnect_attempts++;
|
||||||
uv_timer_start(&ctx->reconnect_timer, try_reconnect, delay, 0);
|
ctx->start_reconnect_timer(delay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 尝试重连 */
|
/* 尝试重连 */
|
||||||
void try_reconnect(uv_timer_t* timer) {
|
void try_reconnect(uv_timer_t* timer) {
|
||||||
client_context_t* ctx = (client_context_t*)timer->data;
|
ClientContext* ctx = static_cast<ClientContext*>(timer->data);
|
||||||
|
|
||||||
if (ctx->state != STATE_DISCONNECTED || ctx->shutdown) {
|
if (ctx->state != ConnectionState::DISCONNECTED || ctx->shutdown) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "[Client %d] try_reconnect\n", ctx->index);
|
|
||||||
// 重新初始化TCP句柄
|
std::cerr << "[Device " << ctx->device_info.device_id << "] Attempting reconnect" << std::endl;
|
||||||
uv_tcp_init(ctx->loop, &ctx->client);
|
|
||||||
ctx->client.data = ctx;
|
ctx->init_tcp();
|
||||||
ctx->state = STATE_CONNECTING;
|
ctx->state = ConnectionState::CONNECTING;
|
||||||
|
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
uv_ip4_addr(SERVER_IP, SERVER_PORT, &addr);
|
uv_ip4_addr(SERVER_IP, SERVER_PORT, &addr);
|
||||||
|
|
||||||
uv_connect_t* req = (uv_connect_t*)malloc(sizeof(uv_connect_t));
|
uv_connect_t* req = new uv_connect_t;
|
||||||
req->data = ctx;
|
req->data = ctx;
|
||||||
|
|
||||||
int ret = uv_tcp_connect(req, &ctx->client, (const struct sockaddr*)&addr, on_connect);
|
int ret = uv_tcp_connect(req, &ctx->client, (const struct sockaddr*)&addr, on_connect);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
fprintf(stderr, "[Client %d] Connect error: %s\n", ctx->index, uv_strerror(ret));
|
std::cerr << "[Device " << ctx->device_info.device_id
|
||||||
free(req);
|
<< "] Connect error: " << uv_strerror(ret) << std::endl;
|
||||||
|
delete req;
|
||||||
uv_close((uv_handle_t*)&ctx->client, on_close);
|
uv_close((uv_handle_t*)&ctx->client, on_close);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 连接建立回调 */
|
/* 连接建立回调 */
|
||||||
void on_connect(uv_connect_t* req, int status) {
|
void on_connect(uv_connect_t* req, int status) {
|
||||||
client_context_t* ctx = (client_context_t*)req->data;
|
ClientContext* ctx = static_cast<ClientContext*>(req->data);
|
||||||
|
delete req;
|
||||||
|
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
fprintf(stderr, "[Client %d] Connect failed: %s\n", ctx->index, uv_strerror(status));
|
std::cerr << "[Device " << ctx->device_info.device_id
|
||||||
// 直接关闭句柄,避免后续重复关闭
|
<< "] Connect failed: " << uv_strerror(status) << std::endl;
|
||||||
if (!uv_is_closing((uv_handle_t*)&ctx->client)) {
|
if (!uv_is_closing((uv_handle_t*)&ctx->client)) {
|
||||||
uv_close((uv_handle_t*)&ctx->client, NULL);
|
uv_close((uv_handle_t*)&ctx->client, on_close);
|
||||||
}
|
}
|
||||||
free(req);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "[Client %d] on_connect\n", ctx->index);
|
|
||||||
ctx->state = STATE_CONNECTED;
|
std::cerr << "[Device " << ctx->device_info.device_id << "] Connected to server" << std::endl;
|
||||||
|
|
||||||
|
ctx->state = ConnectionState::CONNECTED;
|
||||||
ctx->reconnect_attempts = 0;
|
ctx->reconnect_attempts = 0;
|
||||||
|
|
||||||
// 启动数据接收
|
|
||||||
uv_read_start((uv_stream_t*)&ctx->client, alloc_buffer, on_read);
|
uv_read_start((uv_stream_t*)&ctx->client, alloc_buffer, on_read);
|
||||||
|
ctx->start_timer();
|
||||||
// 启动定时发送
|
|
||||||
uv_timer_start(&ctx->timer, on_timer, 6000, 6000);
|
|
||||||
|
|
||||||
free(req);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 初始化所有客户端连接 */
|
/* 初始化所有客户端连接 */
|
||||||
void init_clients(uv_loop_t* loop) {
|
void init_clients(uv_loop_t* loop, const std::vector<DeviceInfo>& devices) {
|
||||||
for (int i = 0; i < CONNECTIONS; i++) {
|
client_contexts.clear();
|
||||||
client_context_t* ctx = &client_contexts[i];
|
for (size_t i = 0; i < devices.size(); i++) {
|
||||||
memset(ctx, 0, sizeof(client_context_t));
|
// 修改为C++11兼容的unique_ptr创建方式
|
||||||
|
client_contexts.push_back(
|
||||||
ctx->loop = loop;
|
std::unique_ptr<ClientContext>(
|
||||||
ctx->index = i;
|
new ClientContext(loop, devices[i], i)
|
||||||
ctx->state = STATE_DISCONNECTED;
|
)
|
||||||
|
);
|
||||||
// 初始化TCP句柄
|
try_reconnect(&client_contexts.back()->reconnect_timer);
|
||||||
uv_tcp_init(loop, &ctx->client);
|
|
||||||
ctx->client.data = ctx;
|
|
||||||
|
|
||||||
// 初始化定时器
|
|
||||||
uv_timer_init(loop, &ctx->timer);
|
|
||||||
ctx->timer.data = ctx;
|
|
||||||
|
|
||||||
// 初始化重连定时器
|
|
||||||
uv_timer_init(loop, &ctx->reconnect_timer);
|
|
||||||
ctx->reconnect_timer.data = ctx;
|
|
||||||
|
|
||||||
// 首次连接
|
|
||||||
try_reconnect(&ctx->reconnect_timer);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 停止所有客户端 */
|
/* 停止所有客户端 */
|
||||||
void stop_all_clients() {
|
void stop_all_clients() {
|
||||||
for (int i = 0; i < CONNECTIONS; i++) {
|
for (auto& ctx : client_contexts) {
|
||||||
client_context_t* ctx = &client_contexts[i];
|
ctx->shutdown = true;
|
||||||
ctx->shutdown = 1;
|
ctx->close_handles();
|
||||||
|
}
|
||||||
|
client_contexts.clear();
|
||||||
|
}
|
||||||
|
|
||||||
// 关闭所有句柄
|
|
||||||
if (!uv_is_closing((uv_handle_t*)&ctx->client)) {
|
|
||||||
uv_close((uv_handle_t*)&ctx->client, NULL);
|
|
||||||
}
|
|
||||||
if (!uv_is_closing((uv_handle_t*)&ctx->timer)) {
|
|
||||||
uv_close((uv_handle_t*)&ctx->timer, NULL);
|
|
||||||
}
|
|
||||||
if (!uv_is_closing((uv_handle_t*)&ctx->reconnect_timer)) {
|
|
||||||
uv_close((uv_handle_t*)&ctx->reconnect_timer, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* 连接监控回调 */
|
/* 连接监控回调 */
|
||||||
void monitor_connections(uv_timer_t* handle) {
|
void monitor_connections(uv_timer_t* handle) {
|
||||||
// 自动恢复断开的连接
|
|
||||||
static int recovery_counter = 0;
|
static int recovery_counter = 0;
|
||||||
if (++recovery_counter >= 5) { // 每5次监控执行一次恢复
|
if (++recovery_counter >= 5) {
|
||||||
int active_count = 0;
|
int active_count = 0;
|
||||||
for (int i = 0; i < CONNECTIONS; i++) {
|
for (const auto& ctx : client_contexts) {
|
||||||
if (client_contexts[i].state == STATE_CONNECTED) {
|
if (ctx->state == ConnectionState::CONNECTED) {
|
||||||
active_count++;
|
active_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("Active connections: %d/%d\n", active_count, CONNECTIONS);
|
std::cout << "Active connections: " << active_count << "/" << client_contexts.size() << std::endl;
|
||||||
recovery_counter = 0;
|
recovery_counter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//static int monitor_temp = 0;
|
|
||||||
//monitor_temp++;
|
|
||||||
//if (monitor_temp >= 30) {
|
|
||||||
// monitor_temp = 0;
|
|
||||||
// printf("30 second to stop all client\n");
|
|
||||||
// // 停止并关闭监控定时器
|
|
||||||
// uv_timer_stop(handle);
|
|
||||||
// uv_close((uv_handle_t*)handle, NULL);
|
|
||||||
//
|
|
||||||
// // 停止所有客户端
|
|
||||||
// stop_all_clients();
|
|
||||||
//
|
|
||||||
// // 停止事件循环
|
|
||||||
// uv_stop(global_loop);
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void close_walk_cb(uv_handle_t* handle, void* arg) {
|
static void close_walk_cb(uv_handle_t* handle, void* arg) {
|
||||||
if (!uv_is_closing(handle)) {
|
if (!uv_is_closing(handle)) {
|
||||||
fprintf(stderr, "Force closing leaked handle: %p (type=%d)\n",
|
uv_close(handle, nullptr);
|
||||||
handle, handle->type);
|
|
||||||
uv_close(handle, NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void start_client_connect() {
|
/* 启动客户端连接 */
|
||||||
|
void start_client_connect(const std::vector<DeviceInfo>& devices) {
|
||||||
// 创建全局事件循环
|
// 创建全局事件循环
|
||||||
global_loop = uv_default_loop();
|
global_loop = uv_default_loop();
|
||||||
|
|
||||||
// 初始化所有客户端
|
// 初始化所有客户端
|
||||||
init_clients(global_loop);
|
init_clients(global_loop, devices);
|
||||||
|
|
||||||
// 启动连接监控
|
// 启动连接监控
|
||||||
uv_timer_init(global_loop, &monitor_timer);
|
uv_timer_init(global_loop, &monitor_timer);
|
||||||
@@ -294,10 +318,13 @@ void start_client_connect() {
|
|||||||
// 安全关闭事件循环
|
// 安全关闭事件循环
|
||||||
int err = uv_loop_close(global_loop);
|
int err = uv_loop_close(global_loop);
|
||||||
if (err) {
|
if (err) {
|
||||||
fprintf(stderr, "uv_loop_close error: %s\n", uv_strerror(err));
|
std::cerr << "uv_loop_close error: " << uv_strerror(err) << std::endl;
|
||||||
// 强制清理残留句柄(调试用)
|
// 强制清理残留句柄(调试用)
|
||||||
uv_walk(global_loop, close_walk_cb, NULL);
|
uv_walk(global_loop, close_walk_cb, nullptr);
|
||||||
uv_run(global_loop, UV_RUN_NOWAIT);
|
uv_run(global_loop, UV_RUN_NOWAIT);
|
||||||
}
|
}
|
||||||
global_loop = NULL;
|
|
||||||
|
// 清理所有客户端
|
||||||
|
stop_all_clients();
|
||||||
|
global_loop = nullptr;
|
||||||
}
|
}
|
||||||
@@ -1,33 +1,63 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
#include <pthread.h>
|
#include <string>
|
||||||
#include <unistd.h>
|
#include <vector>
|
||||||
#include <math.h>
|
#include <memory>
|
||||||
|
|
||||||
/* <20><><EFBFBD><EFBFBD>״̬ö<EFBFBD><EFBFBD> */
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ
|
||||||
typedef enum {
|
struct PointInfo {
|
||||||
STATE_DISCONNECTED, // δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
std::string point_id; // <20><><EFBFBD><EFBFBD>ID
|
||||||
STATE_CONNECTING, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
std::string name; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
STATE_CONNECTED // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
std::string device_id; // <20><><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>ID
|
||||||
} connection_state_t;
|
double PT1; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>1
|
||||||
|
double PT2; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>2
|
||||||
|
double CT1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
||||||
|
double CT2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
|
};
|
||||||
|
|
||||||
|
// װ<><D7B0><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ
|
||||||
|
struct DeviceInfo {
|
||||||
|
std::string device_id; // װ<><D7B0>ID
|
||||||
|
std::string name; // װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
std::string model; // װ<><D7B0><EFBFBD>ͺ<EFBFBD>
|
||||||
|
std::string mac; // װ<><D7B0>MAC<41><43>ַ
|
||||||
|
int status; // <20><><EFBFBD><EFBFBD>״̬ (0: <20><><EFBFBD><EFBFBD>, 1: <20><><EFBFBD><EFBFBD>)
|
||||||
|
std::vector<PointInfo> points; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class ConnectionState {
|
||||||
|
DISCONNECTED,
|
||||||
|
CONNECTING,
|
||||||
|
CONNECTED
|
||||||
|
};
|
||||||
|
|
||||||
|
class ClientContext {
|
||||||
|
public:
|
||||||
|
uv_loop_t* loop;
|
||||||
|
uv_tcp_t client;
|
||||||
|
uv_timer_t timer;
|
||||||
|
uv_timer_t reconnect_timer;
|
||||||
|
ConnectionState state;
|
||||||
|
int reconnect_attempts;
|
||||||
|
volatile bool shutdown;
|
||||||
|
DeviceInfo device_info; // װ<><D7B0><EFBFBD><EFBFBD>Ϣ
|
||||||
|
|
||||||
|
ClientContext(uv_loop_t* loop, const DeviceInfo& device, int index);
|
||||||
|
~ClientContext();
|
||||||
|
|
||||||
|
void init_tcp();
|
||||||
|
void start_timer();
|
||||||
|
void start_reconnect_timer(int delay);
|
||||||
|
void stop_timers();
|
||||||
|
void close_handles();
|
||||||
|
|
||||||
|
private:
|
||||||
|
int index_;
|
||||||
|
};
|
||||||
|
|
||||||
/* <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9> */
|
|
||||||
typedef struct {
|
|
||||||
uv_loop_t* loop; // libuv<75>¼<EFBFBD>ѭ<EFBFBD><D1AD>
|
|
||||||
uv_tcp_t client; // TCP<43>ͻ<EFBFBD><CDBB>˾<EFBFBD><CBBE><EFBFBD>
|
|
||||||
int index; // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
uv_timer_t timer; // <20><><EFBFBD>ݷ<EFBFBD><DDB7>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
||||||
uv_timer_t reconnect_timer;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
||||||
connection_state_t state; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬
|
|
||||||
int reconnect_attempts; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
volatile int shutdown; // <20>رձ<D8B1>־ (<28><><EFBFBD><EFBFBD>)
|
|
||||||
} client_context_t;
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
void try_reconnect(uv_timer_t* timer);//<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
void start_client_connect(const std::vector<DeviceInfo>& devices);
|
||||||
void on_connect(uv_connect_t* req, int status);//<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻص<D3BB>
|
void send_binary_data(ClientContext* ctx, const unsigned char* data, size_t data_size);
|
||||||
void on_close(uv_handle_t* handle);//<EFBFBD>ͻ<EFBFBD><EFBFBD>˶Ͽ<EFBFBD><EFBFBD>ص<EFBFBD>
|
void on_timer(uv_timer_t* handle);//װ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD>ص<EFBFBD>
|
||||||
void stop_all_clients(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֹͣ<CDA3><D6B9><EFBFBD>пͻ<D0BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
void try_reconnect(uv_timer_t* timer);//װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
||||||
void start_client_connect();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
void on_connect(uv_connect_t* req, int status);//װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻص<EFBFBD>
|
||||||
void send_binary_data(client_context_t* ctx, const unsigned char* data, size_t data_size);
|
void on_close(uv_handle_t* handle);//װ<>ùرջص<D5BB>
|
||||||
@@ -10,14 +10,15 @@
|
|||||||
#include "PQSMsg.h"
|
#include "PQSMsg.h"
|
||||||
#include "client2.h"
|
#include "client2.h"
|
||||||
#include "dealMsg.h"
|
#include "dealMsg.h"
|
||||||
|
#include <iostream>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
SafeMessageQueue message_queue; // ȫ<><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
SafeMessageQueue message_queue; // ȫ<><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
void process_received_message(int client_index, const char* data, size_t length) {
|
void process_received_message(string mac, const char* data, size_t length) {
|
||||||
// ʵ<>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// ʵ<>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
printf("Processing message from client %d, size: %zu\n", client_index, length);
|
std::cout << "Active connections: " << mac << " size:" << length << std::endl;
|
||||||
|
|
||||||
// ʾ<><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// ʾ<><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
// ע<>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ʵ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
// ע<>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ʵ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,16 +7,19 @@
|
|||||||
#include <queue>
|
#include <queue>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||||
#define MESSAGE_QUEUE_SIZE 10000 // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
#define MESSAGE_QUEUE_SIZE 10000 // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
/* <20><>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9> */
|
// <20>ĺ<DEB8><C4BA><EFBFBD> deal_message_t <20>ṹ
|
||||||
typedef struct {
|
struct deal_message_t {
|
||||||
int client_index; // <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
std::string device_id; // ʹ<EFBFBD><EFBFBD> std::string <20><><EFBFBD><EFBFBD> char <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
char* data; // <20><>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
std::string mac; // ʹ<EFBFBD><EFBFBD> std::string <20><><EFBFBD><EFBFBD> char <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
size_t length; // <20><>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
char* data; // <20><><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
} deal_message_t;
|
size_t length; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||||
|
std::vector<PointInfo> points; // <20><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
};
|
||||||
|
|
||||||
/* <20>̰߳<DFB3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> */
|
/* <20>̰߳<DFB3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> */
|
||||||
class SafeMessageQueue {
|
class SafeMessageQueue {
|
||||||
@@ -57,4 +60,4 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void process_received_message(int client_index, const char* data, size_t length);
|
void process_received_message(string mac, const char* data, size_t length);
|
||||||
@@ -78,7 +78,29 @@ void* client_manager_thread(void* arg) {
|
|||||||
|
|
||||||
printf("Started client connections\n");
|
printf("Started client connections\n");
|
||||||
|
|
||||||
start_client_connect();
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
std::vector<PointInfo> points1 = {
|
||||||
|
{"P001", "Main Voltage", "D001", 10.0, 0.0, 100.0, 0.0},
|
||||||
|
{"P002", "Backup Voltage", "D001", 5.0, 0.0, 50.0, 0.0}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<PointInfo> points2 = {
|
||||||
|
{"P101", "Generator Output", "D002", 20.0, 0.0, 200.0, 0.0}
|
||||||
|
};
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>б<EFBFBD>
|
||||||
|
std::vector<DeviceInfo> devices = {
|
||||||
|
{
|
||||||
|
"D001", "Primary Device", "Model-X", "00-B7-8D-A8-00-D1",
|
||||||
|
1, points1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"D002", "Backup Device", "Model-Y", "00-B7-8D-A8-00-D6",
|
||||||
|
1, points2
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
start_client_connect(devices);
|
||||||
|
|
||||||
printf("Stopped all client connections\n");
|
printf("Stopped all client connections\n");
|
||||||
|
|
||||||
@@ -108,11 +130,9 @@ void* message_processor_thread(void* arg) {
|
|||||||
// ʵ<><CAB5><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// ʵ<><CAB5><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
// ע<>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>msg.client_index<65><78><EFBFBD>ֿͻ<D6BF><CDBB><EFBFBD>
|
// ע<>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>msg.client_index<65><78><EFBFBD>ֿͻ<D6BF><CDBB><EFBFBD>
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||||
printf("Processing message from client %d, length: %zu\n",
|
|
||||||
msg.client_index, msg.length);
|
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
process_received_message(msg.client_index, msg.data, msg.length);
|
process_received_message(msg.mac, msg.data, msg.length);
|
||||||
|
|
||||||
free(msg.data);
|
free(msg.data);
|
||||||
}
|
}
|
||||||
|
|||||||
14
LFtid1056/resource.h
Normal file
14
LFtid1056/resource.h
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by LFtid1056.rc
|
||||||
|
|
||||||
|
// <20>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ĭ<EFBFBD><C4AC>ֵ
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user