📄 smgmodule.cpp
字号:
/****************************************************************
Copyright ?, 1989-2002, Hisunsray Tech. Co., Ltd.
File name: SMGModule.cpp
Author: lizhigang
Version: V3.0.0.0#20030320-1
Date: 2003-03-20
Description:
History:
*****************************************************************/
#include "SMGModule.h"
#include "EMSNgor.h"
#include "PublicDefine.h"
#include "IAlarm.h"
#include "IDBProxy.h"
#include "IGateWayMsg.h"
#include "LBPPingMsg.h"
#include "IMonitor.h"
#include "RTCStime.h"
#include "ISMG.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern void PrintConsole(LPCTSTR ModuleName,char* fmt,...);
TSMGModule::TSMGModule(RTCS_CTstring clientname)
:TBaseService(COH_DataGateway, clientname, 0x01000000 , COH_DataGateway)
{
logfile = NULL;
logfile = new RTCS_TraceLog(SMGLogFileName);
m_AlarmStation = 0;
char buf[256];
memset(buf, 0, sizeof(buf));
GetPrivateProfileString("SMGateway","RTCS_MODULE_NAME","SMGModule",buf,256,"..//ini//smg.ini");
m_ModuleName = buf;
GetParam();
}
TSMGModule::~TSMGModule()
{
if(logfile)
{
delete logfile;
logfile = NULL;
}
}
void TSMGModule::GetParam()
{
//获取具有告警功能的维护终端的站点号
m_AlarmStation = GetPrivateProfileInt("SMGateway", "ALARM_TERM_STATION", 0, MSGIniFileName);
//数据源
m_DataSourceCount = GetPrivateProfileInt("DBPSource", "DataSourceCount", 0, MSGIniFileName);
if (m_DataSourceCount>64) m_DataSourceCount = 64;
logfile->Trace(1, " DataSourceCount = %d\n", m_DataSourceCount);
char key[16];
char buf[64];
for(RTCS_CTuint i=0; i<m_DataSourceCount; i++)
{
sprintf(key, "DataSource%d", i);
GetPrivateProfileString("DBPSource", key, "", buf, sizeof(buf), MSGIniFileName);
logfile->Trace(1, " %s = %s\n", key, buf);
m_DataSourceName[i] = buf;
m_DataSourceGOR[i] = INVALID_GOR;
}
}
void TSMGModule::InitAppFlowTable()
{
RTCS_CTuint FlowCount = 0;
RTCS_CTuint FlowID = 0;
RTCS_CTuint CommandID = 0;
char sFlowName[64] = "";
char sFlowFile[256] = "";
char sServiceType[20] = "";
char TempName[128] = "";
FlowCount = GetPrivateProfileInt("AppFlow", "FlowCount", 0, MSGIniFileName);
for(RTCS_CTuint i=0; i<FlowCount; i++)
{
TempName[0] = '\0';
sprintf(TempName, "Flow%d", i+1);
FlowID = GetPrivateProfileInt(TempName, "FlowID", 0, MSGIniFileName);
CommandID = GetPrivateProfileInt(TempName, "DataAccessID", 0, MSGIniFileName);
GetPrivateProfileString(TempName, "FlowName", "", sFlowName, 64, MSGIniFileName);
GetPrivateProfileString(TempName, "FlowFile", "", sFlowFile, 256, MSGIniFileName);
GetPrivateProfileString(TempName, "Prefix", "", sServiceType, 20, MSGIniFileName);
if(FlowID>0 && strlen(sFlowFile)>0 && strlen(sServiceType)>0)
{
RTCS_CTstring ServiceType = sServiceType;
RTCS_CTstring FlowName = sFlowName;
RTCS_CTstring FlowFile = sFlowFile;
int ret = m_AppFlowTable.AddAppFlow(FlowID, CommandID, ServiceType, FlowName, FlowFile);
if(ret == 0)
{
char * sFlowFile = (char*)(LPCTSTR)FlowFile;
RTCS_CTuint load_ret = LoadScriptCode(FlowID , sFlowFile);
if ( load_ret == RTCS_Error_OK )
{
logfile->Trace(0,"加载流程%s成功!\n" , (LPCTSTR)FlowName);
PrintConsole(m_ModuleName, "加载流程%s成功!" , (LPCTSTR)FlowName);
}
else
{
logfile->Trace(0,"加载流程%s失败!\n" , (LPCTSTR)FlowName);
PrintConsole(m_ModuleName, "加载流程%s失败!" , (LPCTSTR)FlowName);
}
}
}
}
}
int TSMGModule::SysInit()
{
InitAppFlowTable();
return RTCS_Error_OK;
}
void TSMGModule::AddHandleCount()
{
}
void TSMGModule::AddPaymentSuccess(RTCS_CTdouble Money)
{
}
RTCS_CTuint TSMGModule::SendAlarm(RTCS_CTuint AlarmLevel, RTCS_CTstring AlarmObject, RTCS_CTstring AlarmDetial)
{
RTCS_CTpdu AlarmPdu;
AlarmPdu.messageID = EvtRTCS_IAlarm_AlarmCreated;
AlarmPdu.sender = GetGOR();
AlarmPdu.receiver = MAKEGOR(m_AlarmStation, COH_MaintTerminal);
RTCS_CTime currTime(time(NULL));
RTCS_CTstring AlarmTime;
currTime.Format(AlarmTime);
RTCS_CTstring AlarmModule("SMGModule");
AlarmPdu.PutUInt(RTCS_IAlarm_AlarmSeruity, AlarmLevel);
AlarmPdu.PutString(RTCS_IAlarm_AlarmTime, AlarmTime);
AlarmPdu.PutString(RTCS_IAlarm_AlarmModule, AlarmModule);
AlarmPdu.PutString(RTCS_IAlarm_AlarmObject, AlarmObject);
AlarmPdu.PutString(RTCS_IAlarm_AlarmDetail, AlarmDetial);
logfile->Trace(0, "AlarmLevel=%u, AlarmTime=%s, AlarmModule=%s, AlarmObject=%s, AlarmDetial=%s\n",
AlarmLevel, (LPCTSTR)AlarmTime, (LPCTSTR)AlarmModule, (LPCTSTR)AlarmObject, (LPCTSTR)AlarmDetial);
return PostMessage(AlarmPdu);
}
void TSMGModule::Snapshot()
{
FILE* fp = fopen(SMGSnapshotFile, "wt");
if(!fp)
{
PrintConsole(m_ModuleName, "创建内存快照文件失败!");
return;
}
RTCS_CTime currenttime;
RTCS_CTstring tmpstring = "";
currenttime.Format( tmpstring );
fprintf(fp,"\n 流程解释模块内存快照: [%s], ModuleName:%s\n\n", (LPCTSTR)tmpstring, (LPCTSTR)m_ModuleName);
fprintf(fp, "\nAlarmStation=%u\n", m_AlarmStation);
fprintf(fp, "\n流程信息:\n");
m_AppFlowTable.Snapshot(fp);
fprintf(fp, "\n会话对象信息:\n");
m_SessionObjectTable.Snapshot(fp);
fclose(fp);
}
RTCS_CTuint TSMGModule::OnBusInserted()
{
PrintConsole(m_ModuleName, "应用服务器模块上线");
Init();
if( SysInit() != RTCS_Error_OK )
{
logfile->Trace(0,"\t<error>TSMGModule sysinit() fail \n");
PrintConsole(m_ModuleName, "应用服务器模块初始化处理失败");
return RTCS_Error_FAIL;
}
logfile->Trace(0,"\t<error>TSMGModule sysinit() success. \n");
PrintConsole(m_ModuleName, "应用服务器模块初始化处理成功");
return RTCS_Error_OK;
}
RTCS_CTuint TSMGModule::OnClientOnline(RTCS_CTstring clientname)
{
RTCS_CTuint GOR = 0;
GOR = GetRemoteGOR(clientname);
if (strcmp((LPCSTR)clientname, "SMAI") == 0)
m_SMAIGOR = GOR;
for (RTCS_CTuint i=0; i<m_DataSourceCount; i++)
{
if (clientname == m_DataSourceName[i])
{
m_DataSourceGOR[i] = GOR;
break;
}
}
return RTCS_Error_OK;
}
RTCS_CTuint TSMGModule::OnClientOffline(RTCS_CTstring clientname)
{
return RTCS_Error_OK;
}
void TSMGModule::InitActions()
{
TBaseService::InitActions();
//设置数据库超时时限
actionTable.AddAction(actions++, "SetDBTimeOut", (SCRIPTFUNC)&TSessionObject::SetDBTimeOut);
actionTable.AddAction(actions++, "DataAccess", (SCRIPTFUNC)&TSessionObject::DataAccess);
//SMA动作
actionTable.AddAction(actions++,"SMACmdBind",(SCRIPTFUNC) &TSessionObject::SMACmdBind);
actionTable.AddAction(actions++,"SMACmdSubmit",(SCRIPTFUNC) &TSessionObject::SMACmdSubmit);
actionTable.AddAction(actions++, "SMAGetDeliverData",(SCRIPTFUNC) &TSessionObject::SMAGetDeliverData);
actionTable.AddAction(actions++,"SMAGetMsgContentLength",(SCRIPTFUNC) &TSessionObject::SMAGetMsgContentLength);
actionTable.AddAction(actions++,"SMACmdUnbind",(SCRIPTFUNC) &TSessionObject::SMACmdUnbind);
//数据操作动作
actionTable.AddAction(actions++,"ParseParam",(SCRIPTFUNC) &TSessionObject::ParseParam);
actionTable.AddAction(actions++,"StrUpper",(SCRIPTFUNC) &TSessionObject::StrUpper);
actionTable.AddAction(actions++,"StrLower",(SCRIPTFUNC) &TSessionObject::StrLower);
actionTable.AddAction(actions++,"SubStr",(SCRIPTFUNC) &TSessionObject::SubStr);
actionTable.AddAction(actions++,"StrDigital",(SCRIPTFUNC) &TSessionObject::StrDigital);
actionTable.AddAction(actions++,"StrLen",(SCRIPTFUNC) &TSessionObject::StrLen);
}
void TSMGModule::InitEvents()
{
TBaseService::InitEvents();
//失败事件
eventTable.AddPair(new TKeyNamePair(EvtRTCS_DRIVER_Fail, "EvtFail"));
//返回事件
eventTable.AddPair(new TKeyNamePair(EvtRTCS_DRIVER_Return, "EvtReturn"));
eventTable.AddPair(new TKeyNamePair(RespRTCS_IDBP_DataAccess, "EvtDBReturn"));
//超时事件
eventTable.AddPair(new TKeyNamePair(EvtRTCS_IClientBase_Timer, "EvtTimerExpired"));
//DataAccess 请求
eventTable.AddPair(new TKeyNamePair(CmdRTCS_IDBP_DataAccess, "EvtDataAccessRequest"));
//SMA事件
eventTable.AddPair(new TKeyNamePair(RespRTCS_ISMA_Submit, "EvtSubmit"));
eventTable.AddPair(new TKeyNamePair(RespRTCS_ISMA_Bind, "EvtBind"));
eventTable.AddPair(new TKeyNamePair(RespRTCS_ISMA_Terminate, "EvtUnbind"));
eventTable.AddPair(new TKeyNamePair(CmdRTCS_ISMA_Deliver, "EvtISMGDeliver"));
}
void TSMGModule::InitSystemVars()
{
TBaseService::InitSystemVars();
sysvarTable.AddPair(new TKeyNamePair(_FIELD1,"_Field1"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD2,"_Field2"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD3,"_Field3"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD4,"_Field4"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD5,"_Field5"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD6,"_Field6"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD7,"_Field7"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD8,"_Field8"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD9,"_Field9"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD10,"_Field10"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD11, "_Field11"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD12, "_Field12"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD13, "_Field13"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD14, "_Field14"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD15, "_Field15"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD16, "_Field16"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD17, "_Field17"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD18, "_Field18"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD19, "_Field19"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD20, "_Field20"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD21, "_Field21"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD22, "_Field22"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD23, "_Field23"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD24, "_Field24"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD25, "_Field25"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD26, "_Field26"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD27, "_Field27"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD28, "_Field28"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD29, "_Field29"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD30, "_Field30"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD31, "_Field31"));
sysvarTable.AddPair(new TKeyNamePair(_FIELD32, "_Field32"));
sysvarTable.AddPair(new TKeyNamePair(_SessionID,"_SessionID"));
sysvarTable.AddPair(new TKeyNamePair(_CreateTime,"_CreateTime"));
sysvarTable.AddPair(new TKeyNamePair(_PacketSender,"_PacketSender"));
sysvarTable.AddPair(new TKeyNamePair(_PacketSenderObj,"_PacketSenderObj"));
sysvarTable.AddPair(new TKeyNamePair(_PacketReceiverObj,"_PacketReceiverObj"));
sysvarTable.AddPair(new TKeyNamePair(_Result,"_Result"));
sysvarTable.AddPair(new TKeyNamePair(_SMASrcterminalid, "_SMASrcterminalid"));
sysvarTable.AddPair(new TKeyNamePair(_SMADestUsrtl, "_SMADestUsrtl"));
sysvarTable.AddPair(new TKeyNamePair(_SMADestterminalid, "_SMADestterminalid"));
sysvarTable.AddPair(new TKeyNamePair(_SMAMsgLength, "_SMAMsgLength"));
sysvarTable.AddPair(new TKeyNamePair(_SMAMsgContent, "_SMAMsgContent"));
sysvarTable.AddPair(new TKeyNamePair(_TempSysStrVar, "_TempSysStrVar"));
}
void TSMGModule::InitMsgAPI()
{
TBaseService::InitMsgAPI();
msgAPITable.AddMsgAPI(EvtRTCS_DRIVER_Return, "EvtReturn", (MSGHANDLER)&TSMGModule::OnEvtReturn);
msgAPITable.AddMsgAPI(EvtRTCS_DRIVER_Fail, "EvtFail", (MSGHANDLER)&TSMGModule::OnEvtFail);
msgAPITable.AddMsgAPI(EvtRTCS_IClientBase_Timer, "EvtTimerExpired", (MSGHANDLER)&TSMGModule::OnEvtTimerExpired);
msgAPITable.AddMsgAPI(CmdRTCS_ISMA_Deliver, "EvtISMGDeliver", (MSGHANDLER)&TSMGModule::OnISMGDeliver);
msgAPITable.AddMsgAPI(RespRTCS_ISMA_Bind, "EvtBind", (MSGHANDLER)&TSMGModule::OnISMGBindResp);
msgAPITable.AddMsgAPI(RespRTCS_ISMA_Submit, "EvtSubmit", (MSGHANDLER)&TSMGModule::OnISMGSubmitResp);
msgAPITable.AddMsgAPI(RespRTCS_ISMA_Terminate, "EvtUnBind", (MSGHANDLER)&TSMGModule::OnISMGUnBindResp);
msgAPITable.AddMsgAPI(RespRTCS_IDBP_DataAccess,"EvtDBReturn",(MSGHANDLER)&TSMGModule::OnDataAccessResp);
}
TRealtimeObject * TSMGModule::HandleExceptionAPI(RTCS_CTpdu & message)
{
switch(message.messageID)
{
case CmdRTCS_IMonitor_CommandRequest:
OnQueryInfo(message);
break;
case CmdRTCS_LBPPing_RequestData:
OnPing(message);
break;
case RespRTCS_IMonitor_CommandRequest:
OnRespQueryInfoFromDBAccessModule(message);
break;
default:
break;
}
return NULL;
}
void TSMGModule::OnObjectIdle(TRealtimeObject * object)
{
TSessionObject * pSessionobject = (TSessionObject *)object;
m_SessionObjectTable.DeleteSessionObject(pSessionobject->m_SessionID);
}
RTCS_CTuint TSMGModule::OnPing(RTCS_CTpdu& pdu)
{
RTCS_CTpdu RespPdu;
RespPdu.messageID = RespRTCS_LBPPing_RequestData;
RespPdu.sender = GetGOR();
RespPdu.receiver = pdu.sender;
RespPdu.receiverObj = pdu.senderObj;
return PostMessage(RespPdu);
}
RTCS_CTuint TSMGModule::OnQueryInfo(RTCS_CTpdu& pdu)
{
//把消息转换给数据库访问模块,获取队列信息。
RTCS_CTuint StationNo = GetStationNo();
RTCS_CTuint Receiver = MAKEGOR(StationNo, COH_DBProxy);
pdu.senderObj = pdu.sender;
pdu.sender = GetGOR();
pdu.receiver = Receiver;
return PostMessage(pdu);
}
RTCS_CTuint TSMGModule::OnRespQueryInfoFromDBAccessModule(RTCS_CTpdu& pdu)
{
pdu.sender = GetGOR();
pdu.receiver = pdu.senderObj; //请求消息的真正发起者
return PostMessage(pdu);
}
RTCS_CTint TSMGModule::Report2Exterm(RTCS_CTstring FlowID,
RTCS_CTstring CardID,
RTCS_CTstring PhoneNumber,
RTCS_CTstring FullTime,
RTCS_CTstring FullMoney)
{
RTCS_CTpdu pdu;
pdu.sender = GetGOR();
pdu.receiver = MAKEGOR(m_AlarmStation,COH_MaintTerminal);
pdu.messageID = EvtRTCS_IMonitor_FlowTrace;
RTCS_CTstring tmpStr[5];
tmpStr[0] = FlowID;
tmpStr[1] = CardID;
tmpStr[2] = PhoneNumber;
tmpStr[3] = FullTime;
tmpStr[4] = FullMoney;
RTCS_CTstringArray ReportStringArray = tmpStr;
pdu.PutStringArray(RTCS_IMonitor_TraceData,ReportStringArray,5);
return PostMessage(pdu);
}
RTCS_CTuint TSMGModule::GetDataSource(RTCS_CTuint index)
{
if(index >= 0 && index < 64)
return m_DataSourceGOR[index];
else
return 0;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -