#include "pch.h"
|
#include "CHsmsActive.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;
|
++m_nSessionId;
|
|
auto onStatusChanged = [&](void* pFrom, ACTIVESTATE state) -> void {
|
if (m_listener.onStateChanged != nullptr) {
|
m_listener.onStateChanged(this, state);
|
}
|
|
if (ACTIVESTATE::NOT_SELECTED == state) {
|
hsmsSelectRequest();
|
}
|
else if (ACTIVESTATE::SELECTED == state) {
|
hsmsEstablishCommunications();
|
}
|
else if (ACTIVESTATE::NOT_CONNECTED == state) {
|
m_pActive->disconnect();
|
}
|
};
|
auto onRecvSysMessage = [&](void* pFrom, IMessage* pMessage) -> void {
|
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();
|
TRACE("ÊÕµ½ÏûÏ¢ S%dF%d================\n", pHeader->stream & 0x7F, pHeader->function);
|
TRACE("Body:%s\n", pMessage->toString());
|
};
|
|
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;
|
}
|