| 对比新文件 |
| | |
| | | #include "pch.h" |
| | | #include "CHsmsActive.h" |
| | | #include "Log.h" |
| | | |
| | | |
| | | CHsmsActive::CHsmsActive() |
| | | { |
| | | m_listener = {}; |
| | | m_pActive = nullptr; |
| | | m_nSessionId = 0; |
| | | m_nSystemByte = 0; |
| | | } |
| | | |
| | | CHsmsActive::~CHsmsActive() |
| | | { |
| | | |
| | | } |
| | | |
| | | void CHsmsActive::setListener(ACTIVEListener listener) |
| | | { |
| | | m_listener = listener; |
| | | } |
| | | |
| | | int CHsmsActive::init(const char* pszIp, int port) |
| | | { |
| | | m_strIp = pszIp; |
| | | m_nPort = port; |
| | | |
| | | auto onStatusChanged = [&](void* pFrom, ACTIVESTATE state) -> void { |
| | | if (m_listener.onStateChanged != nullptr) { |
| | | m_listener.onStateChanged(this, state); |
| | | } |
| | | |
| | | if (ACTIVESTATE::NOT_SELECTED == state) { |
| | | LOGI("Active state changed(NOT_SELECTED)."); |
| | | hsmsSelectRequest(); |
| | | } |
| | | else if (ACTIVESTATE::SELECTED == state) { |
| | | LOGI("Active state changed(SELECTED)."); |
| | | hsmsEstablishCommunications(); |
| | | } |
| | | else if (ACTIVESTATE::NOT_CONNECTED == state) { |
| | | LOGI("Active state changed(NOT_CONNECTED)."); |
| | | m_pActive->disconnect(); |
| | | } |
| | | }; |
| | | auto onRecvSysMessage = [&](void* pFrom, IMessage* pMessage) -> void { |
| | | LOGI("onRecvSysMessage(sessionId:%d, sType:%d).", |
| | | pMessage->getHeader()->sessionId, pMessage->getHeader()->sType); |
| | | TRACE("sessionId:%d, sType:%d\n", pMessage->getHeader()->sessionId, pMessage->getHeader()->sType); |
| | | }; |
| | | |
| | | auto onError = [&](void* pFrom, int error) -> void { |
| | | TRACE("onError:%d\n", error); |
| | | }; |
| | | |
| | | auto onRecvRawData = [&](void* pFrom, const char* pszData, int size) { |
| | | TRACE("onRec ,vRawData:<0x%x, %d>\n", pszData, size); |
| | | }; |
| | | |
| | | auto onRecvDataMessage = [&](void* pFrom, IMessage* pMessage) -> void { |
| | | HEADER* pHeader = pMessage->getHeader(); |
| | | int nStream = (pHeader->stream & 0x7F); |
| | | |
| | | TRACE("鏀跺埌娑堟伅 S%dF%d================\n", pHeader->stream & 0x7F, pHeader->function); |
| | | TRACE("Body:%s\n", pMessage->toString()); |
| | | LOGI("onRecvDataMessage(%s).", pMessage->toString()); |
| | | |
| | | if (nStream == 5 && pHeader->function == 1) { |
| | | // S1F1 |
| | | replyAck(5, 2, pMessage->getHeader()->systemBytes, 0, _T("ACK0")); |
| | | } |
| | | }; |
| | | |
| | | ActiveListener listener; |
| | | listener.funStateChanged = onStatusChanged; |
| | | listener.funRecvRawData = onRecvRawData; |
| | | listener.funRecvDataMessage = onRecvDataMessage; |
| | | listener.funRecvSysMessage = onRecvSysMessage; |
| | | listener.funError = onError; |
| | | int nRet = HSMS_CreateActive(m_pActive, _T(""), m_strIp.c_str(), m_nPort); |
| | | if (nRet == 0 && m_pActive != nullptr) { |
| | | m_pActive->setListener(listener); |
| | | m_pActive->connect(); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::term() |
| | | { |
| | | if (m_pActive != nullptr) { |
| | | ::HSMS_DestroyActive(m_pActive); |
| | | m_pActive = nullptr; |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsSelectRequest() |
| | | { |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_CreateMessageWithSType(pMessage, MSG_SELECT_REQ, ++m_nSystemByte); |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsDeselectRequest() |
| | | { |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_CreateMessageWithSType(pMessage, MSG_DESELECT_REQ, ++m_nSystemByte); |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsEstablishCommunications() |
| | | { |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 13, ++m_nSystemByte); |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsAreYouThere() |
| | | { |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 1, ++m_nSystemByte); |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsDatetimeSync() |
| | | { |
| | | CTime time = CTime::GetCurrentTime(); |
| | | char szTime[256]; |
| | | sprintf_s(szTime, 256, _T("%4d%02d%02d%02d%02d%02d00"), time.GetYear(), |
| | | time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); |
| | | |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 31, ++m_nSystemByte); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->setString((const char*)szTime, _T("Date time")); |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsTerminalDisplay(BYTE tid, const char* pszText) |
| | | { |
| | | char szTid[1]; |
| | | szTid[0] = tid; |
| | | |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 10 | REPLY, 3, ++m_nSystemByte); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addBinaryItem(szTid, 1, _T("TID")); |
| | | pItem->addItem(pszText, _T("TEXT")); |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsEDEventReport(bool bEnable, std::vector<int>& ids) |
| | | { |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 37, ++m_nSystemByte); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addBoolItem(bEnable, "CEED"); |
| | | ISECS2Item* pItem2 = pItem->addItem(); |
| | | for (auto item : ids) { |
| | | pItem2->addU4Item(item, "CEID"); |
| | | } |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsEDAlarmReport(bool bEnable, unsigned int id) |
| | | { |
| | | char szEnable[2] = {128, 0}; |
| | | |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 5 | REPLY, 3, ++m_nSystemByte); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addBinaryItem(&szEnable[bEnable ? 0 : 1], 1, "ALED"); |
| | | pItem->addU4Item(id, "ALID"); |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsDefineReports(std::map<unsigned int, std::vector<unsigned int>>& mapReport) |
| | | { |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 33, ++m_nSystemByte); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addU4Item(1, "DATAID"); |
| | | ISECS2Item* pItemReportList = pItem->addItem(); |
| | | for (auto item : mapReport) { |
| | | ISECS2Item* pItemReport = pItemReportList->addItem(); |
| | | pItemReport->addU4Item(item.first, "RPTID"); |
| | | ISECS2Item* pItemVidList = pItemReport->addItem(); |
| | | for (auto vid : item.second) { |
| | | pItemVidList->addU4Item(vid, "VID"); |
| | | } |
| | | } |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsLinkEventReport(std::map<unsigned int, std::vector<unsigned int>>& mapEvent) |
| | | { |
| | | if (mapEvent.empty()) return 0; |
| | | |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 35, ++m_nSystemByte); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->addU4Item(1, "DATAID"); |
| | | ISECS2Item* pItemEventList = pItem->addItem(); |
| | | for (auto item : mapEvent) { |
| | | ISECS2Item* pItemEvent = pItemEventList->addItem(); |
| | | pItemEvent->addU4Item(item.first, "CEID"); |
| | | ISECS2Item* pItemRptidList = pItemEvent->addItem(); |
| | | for (auto vid : item.second) { |
| | | pItemRptidList->addU4Item(vid, "RPTID"); |
| | | } |
| | | } |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::hsmsConfigureSpooling(std::map<unsigned int, std::set<unsigned int>>& spoolingConfig) |
| | | { |
| | | IMessage* pMessage = nullptr; |
| | | int nRet = HSMS_Create1Message(pMessage, m_nSessionId, 2 | REPLY, 43, ++m_nSystemByte); |
| | | if (spoolingConfig.size() > 0) { |
| | | for (auto s : spoolingConfig) { |
| | | ISECS2Item* pItemStreamList = pMessage->getBody()->addItem(); |
| | | pItemStreamList->addU1Item(s.first, "STRID"); |
| | | ISECS2Item* pItemFcnList = pItemStreamList->addItem(); |
| | | for (auto f : s.second) { |
| | | pItemFcnList->addU1Item(f, "FCNID"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | m_pActive->sendMessage(pMessage); |
| | | HSMS_Destroy1Message(pMessage); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsActive::replyAck0(IMessage* pMessage) |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | // 閫氱敤鐨剅eply ack鍑芥暟 |
| | | void CHsmsActive::replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName) |
| | | { |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, m_nSessionId, s, f, systemBytes); |
| | | ASSERT(pMessage); |
| | | ISECS2Item* pItem = pMessage->getBody(); |
| | | pItem->setBinary((const char*)&ack, 1, pszAckName); |
| | | m_pActive->sendMessage(pMessage); |
| | | LOGI("<HSMS>[SECS Msg SEND]S%dF%d (SysByte=%u)", s, f, systemBytes); |
| | | HSMS_Destroy1Message(pMessage); |
| | | } |
| | | |