📄 serviceaction.h
字号:
// ServiceAction.h: interface for the CServiceAction class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SERVICEACTION_H__331F528C_6527_4F7C_8B92_91C8F6853A6E__INCLUDED_)
#define AFX_SERVICEACTION_H__331F528C_6527_4F7C_8B92_91C8F6853A6E__INCLUDED_
#include "MtThread.h" // Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*
该类是服务的动作类,
如服务的启动、关闭等都是由该类完成的,这样可以使服务本身与服务使用者隔离,
这样界面可以控制服务的动作,监控程序也可以控制服务的动作
*/
#define DISPLAYBUFFERLEN 5000 //保存状态消息的缓存大小
#include <afxmt.h>
class CMtThread;
class CMoThread;
class CServiceAction : public CObject
{
public:
//-------------------------------------
typedef struct StructLoginInfo{ //该结构体存储网关连接基本信息
CString m_MtPassword; //BIND密码
CString m_MtUserName; //BIND用户名
CString m_ICPID; //BIND企业代码
CString m_SourceNode;
UINT m_MtRemotePort; //BIND远程端口
CString m_MtRemoteIP; //BIND远程IP
UINT m_MoLocalPort; //短连接创建本地套接字的端口
CString m_MoUserName; //短连接SMG发来的合法用户名,暂时无效
CString m_MoPassword; //短连接SMG发来的合法密码,暂时无效
CString m_ServiceNumber; //特服短信号码
}StructLoginInfo;
typedef struct StructQueueInfo{ //该结构体存储队列基本信息
CString m_InQueuePath; //入短消息队列路径
CString m_OutQueuePath; //出短消息队列路径
CString m_SpyQueuePath; //监视队列路径
CString m_ControlQueuePath; //控制队列路径
CString m_ReportQueuePath; //状态报告路径
}StructQueueInfo;
typedef struct StructDisplayInfo{//保存状态信息,详细的消息类型请参阅文档<<网关接口升级改造>>
CString m_MsgType; //消息类型
CString m_ChildType; //子消息类型
CString m_MsgContent; //消息内容
}StructDisplayInfo;
typedef struct StructProvince{ //移动结构体
CString m_ProvinceName;
StructQueueInfo m_QueueInfo;
StructLoginInfo m_LoginIngo;
CArray<CMtThread*,CMtThread*> m_ThreadsArray;//移动所辖线程数组
}StructProvince;
public:
CArray<StructProvince*,StructProvince*> m_ProvinceArray;
void MoInitConnect(CString RemoteIP,UINT RemotePort,CString ICPID,CString SourceNode,CString UserName,CString Password,UINT LocalPort,CString ServiceNumber,int Index,CString ProvinceName);
CServiceAction(CString& Province);
virtual ~CServiceAction();
public:
void SaveWrongtoLog(CString& csContent);
void SetDisplayProvince(int index);
void StartMoThread();
void InitProvinceArray(int ProvinceNum);
void SetSaveReport(BOOL bSave);
void GetConnectStatus(CString& csConnectStatus,int& ThreadIndex);
void GetMsgNum(UINT& SubmitMsgs,UINT& DeliverMsgs,UINT & DeliveredMsgs,UINT& ReconnectTimes,int& ThreadIndex);
void SetDisplayAllInfo();
void SetDisplayForbidden();
void GetStatusNewInfo(CString& csOutMsg,int& LostedMsg);//供显示或监视使用
void SaveStatusInfo(CString& MsgType,CString& ChildType,CString& MsgContent,int Index);
BOOL m_bSaveDisplayInfo;
void InitQueuePath(CString InQueuePath,CString OutQueuePath,CString ReportQueuePath,CString SpyQueuePath,CString ControlQueuePath,int Index);
void MoCloseCmppServer();
BOOL MoStartCmppServer(int& MoThreadNum,int MtThreadNum,int Index);
protected:
CMoThread* m_pMoThread; //Mo处理线程句炳
CMtThread* m_pMtThread; //Mt处理线程句炳
// CArray<CMoThread*,CMoThread*> m_MoThreadpArray;//Mo线程数组
// CArray<CMtThread*,CMtThread*> m_MtThreadpArray;//Mo线程数组
private:
int m_DisplayIndex;
BOOL CreateMtThreads(int ThreadsNum,int Index);
BOOL CreateMoThreads(int Threadnum,int Index);
int m_DisplayType;//显示状态的类型,0:表示不显示任何信息
//1表示显示所有信息,2表示只显示系统信息
//3表示只显示收发的短消息
CString m_csProvince;
BOOL m_bStatusInfoChange;//判断运行的状态信息是否改变,用于显示状态信息
StructLoginInfo m_LoginBaseInfo;
StructQueueInfo m_QueueBaseInfo;
StructDisplayInfo m_DisplayInfoArray[DISPLAYBUFFERLEN];//用来保存状态消息供上层调用
int m_CurArrayPos; //标明当前消息已保存到的位置
int m_LostDisplayInfo; //标明未显示而就被丢掉的消息个数
CMutex m_Mutex; //互斥量,防止多个线程访问公共变量m_CurArrayPos,
//m_LostDisplayInfo
//m_DisplayInfoArray
//时冲突
CMutex m_LogMutex;//日志文件保存互斥量
};
#endif // !defined(AFX_SERVICEACTION_H__331F528C_6527_4F7C_8B92_91C8F6853A6E__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -