该测试代码借助了C/C++宏定义的技巧,用了500行左右的代码,生成了1024个测试用例。同时借助测试工具的自动化功能,可以在无人在场的情况进行自动化测试。
该测试场景的测试,需要2~3天。
-
#pragma once
-
-
namespace IMIX
-
{
-
class IMIXApplication;
-
}
-
-
#define SEQ_PERSIST 0x00000001
-
#define SEQ_SEQCHECK 0x00000002
-
#define SEQ_RESETONLOGON 0x00000004
-
#define SEQ_RESETONLOGOUT 0x00000008
-
#define SEQ_RESETONDISCONNECT 0x00000010
-
#define SEQ_REFRESHONLOGON 0x00000020
-
-
class CIMIXSeqInfo
-
{
-
public:
-
int m_seqtype;
-
-
public:
-
CIMIXSeqInfo()
-
{
-
m_seqtype = 0;
-
}
-
-
void Clear()
-
{
-
m_seqtype = 0;
-
}
-
-
#define SEQINFOMEMFUNC(name, type, configname) \
-
void Set##name() { m_seqtype = SetFlags(m_seqtype, type); }; \
-
void Clr##name() { m_seqtype = ClrFlags(m_seqtype, type); }; \
-
void name(int index) \
-
{ \
-
if (IsFlags(m_seqtype, type)) \
-
CONFIGSETFIELD(index, configname, "Y") \
-
else \
-
CONFIGSETFIELD(index, configname, "N") \
-
}
-
-
SEQINFOMEMFUNC(Persist, SEQ_PERSIST, TEST_ConfigField_PersistMessages)
-
SEQINFOMEMFUNC(IsCheckSeqNum, SEQ_SEQCHECK, TEST_ConfigField_IsCheckSeqNum)
-
SEQINFOMEMFUNC(ResetOnLogon, SEQ_RESETONLOGON, TEST_ConfigField_ResetOnLogon)
-
SEQINFOMEMFUNC(ResetOnLogout, SEQ_RESETONLOGOUT, TEST_ConfigField_ResetOnLogout)
-
SEQINFOMEMFUNC(ResetOnDisconnect, SEQ_RESETONDISCONNECT, TEST_ConfigField_ResetOnDisconnect)
-
SEQINFOMEMFUNC(RefreshOnLogon, SEQ_REFRESHONLOGON, TEST_ConfigField_RefreshOnLogon)
-
-
void SeqPersistInit(int index)
-
{
-
Persist(index);
-
IsCheckSeqNum(index);
-
ResetOnLogon(index);
-
ResetOnLogout(index);
-
ResetOnDisconnect(index);
-
RefreshOnLogon(index);
-
}
-
-
};
-
-
class CIMIXSeqCase:public CIMIXTestCaseObject
-
{
-
public:
-
~CIMIXSeqCase();
-
-
private: // π?π≤∫? ?
-
CIMIXSeqCase();
-
-
static CMUTEX m_mutex;
-
CTerminalConfig m_terminalConfig;
-
-
public:
-
static CTestObject *m_hinstance;
-
static CTestObject* GetInstance();
-
-
public: // ≤? ‘”√??
-
TestCaseDeclaration
-
-
int GetInitiatorId(int id);
-
int GetAcceptorId(int id);
-
void RunInitiatorTest(int type, IMIX::IMIXApplication *pApp, CApiOp *pApiOp );
-
void RunAcceptorTest(int type, IMIX::IMIXApplication *pApp, CApiOp *pApiOp );
-
-
/*************************************************************************************************/
-
-
void CreateConfigFile(int usertype, char *protocol, CIMIXSeqInfo *seqinfo, string m_configpath);
-
-
#define SEQMEMFUNCDEC1(field) \
-
int SeqCase_##field(char *protocol, BOOL svrseqcheck, BOOL clientseqcheck, \
-
BOOL svrpersist, BOOL clientpersist, BOOL svrfield, BOOL clientfield, BOOL isclient);
-
-
SEQMEMFUNCDEC1(ResetOnLogon)
-
SEQMEMFUNCDEC1(ResetOnLogout)
-
SEQMEMFUNCDEC1(ResetOnDisconnect)
-
SEQMEMFUNCDEC1(RefreshOnLogon)
-
-
#define SEQMEMFUNCDEC_SEQCHECK_PERISIT(protocol, field, subffix, fn_seqcheck, fn_persist) \
-
int protocol##_SeqCase_##field##YY_##subffix##_##fn_seqcheck##_##fn_persist(); \
-
int protocol##_SeqCase_##field##NY_##subffix##_##fn_seqcheck##_##fn_persist(); \
-
int protocol##_SeqCase_##field##YN_##subffix##_##fn_seqcheck##_##fn_persist(); \
-
int protocol##_SeqCase_##field##NN_##subffix##_##fn_seqcheck##_##fn_persist();
-
-
#define SEQMEMFUNCDEC_SEQCHECK(protocol, field, subffix, fn_seqcheck) \
-
SEQMEMFUNCDEC_SEQCHECK_PERISIT(protocol, field, subffix, fn_seqcheck, PersistYY) \
-
SEQMEMFUNCDEC_SEQCHECK_PERISIT(protocol, field, subffix, fn_seqcheck, PersistNY) \
-
SEQMEMFUNCDEC_SEQCHECK_PERISIT(protocol, field, subffix, fn_seqcheck, PersistYN) \
-
SEQMEMFUNCDEC_SEQCHECK_PERISIT(protocol, field, subffix, fn_seqcheck, PersistNN)
-
-
/*#define SEQMEMFUNCDEC_SEQCHECK(protocol, field, subffix, fn_seqcheck) \
-
SEQMEMFUNCDEC_SEQCHECK_PERISIT(protocol, field, subffix, fn_seqcheck, PersistNN)*/
-
-
#define SEQMEMFUNCDEC(protocol, field, subffix) \
-
SEQMEMFUNCDEC_SEQCHECK(protocol, field, subffix, SeqcheckYY) \
-
SEQMEMFUNCDEC_SEQCHECK(protocol, field, subffix, SeqcheckNY) \
-
SEQMEMFUNCDEC_SEQCHECK(protocol, field, subffix, SeqcheckYN) \
-
SEQMEMFUNCDEC_SEQCHECK(protocol, field, subffix, SeqcheckNN)
-
-
public:
-
int SeqCase_CommonTest(char *protocol, CIMIXSeqInfo *svrinfo, CIMIXSeqInfo *clientinfo, int IsClient);
-
-
SEQMEMFUNCDEC(IMIXFast, ResetOnLogon, ClientStop)
-
SEQMEMFUNCDEC(IMIXFast, ResetOnLogout, ClientStop)
-
SEQMEMFUNCDEC(IMIXFast, ResetOnDisconnect, ClientStop)
-
SEQMEMFUNCDEC(IMIXFast, RefreshOnLogon, ClientStop)
-
-
SEQMEMFUNCDEC(IMIXFast, ResetOnLogon, SvrStop)
-
SEQMEMFUNCDEC(IMIXFast, ResetOnLogout, SvrStop)
-
SEQMEMFUNCDEC(IMIXFast, ResetOnDisconnect, SvrStop)
-
SEQMEMFUNCDEC(IMIXFast, RefreshOnLogon, SvrStop)
-
-
SEQMEMFUNCDEC(IMIXNormal, ResetOnLogon, ClientStop)
-
SEQMEMFUNCDEC(IMIXNormal, ResetOnLogout, ClientStop)
-
SEQMEMFUNCDEC(IMIXNormal, ResetOnDisconnect, ClientStop)
-
SEQMEMFUNCDEC(IMIXNormal, RefreshOnLogon, ClientStop)
-
-
SEQMEMFUNCDEC(IMIXNormal, ResetOnLogon, SvrStop)
-
SEQMEMFUNCDEC(IMIXNormal, ResetOnLogout, SvrStop)
-
SEQMEMFUNCDEC(IMIXNormal, ResetOnDisconnect, SvrStop)
-
SEQMEMFUNCDEC(IMIXNormal, RefreshOnLogon, SvrStop)
-
};
-
#include <string>
-
#include <stdlib.h>
-
#include <vector>
-
#include <map>
-
#include <string>
-
#include "pthread.h"
-
-
#include "IMIX/IMIXAPI/IMIXApplication.h"
-
#include "IMIX/BasicProtocol/MagicData.h"
-
#include "IMIX/IMIXAPI/IMIXAPIErrorDef.h"
-
#include "IMIX/IMIXAPI/Listener.h"
-
-
#include "ConfigPathCls.h"
-
#include "ApiOp.h"
-
#include "ConstVal.h"
-
#include "ConfigGen.h"
-
#include "CSGen.h"
-
#include "Platform.h"
-
#include "AppStopThreadBody.h"
-
#include "TerminalConfig.h"
-
#include "Common.h"
-
#include "CommonListenerImpl.h"
-
-
#include "TestObject.h"
-
#include "ProtocolInc.h"
-
#include "IMIXTestCaseObject.h"
-
#include "IMIXSeqCase.h"
-
-
using namespace IMIX;
-
-
CMUTEX CIMIXSeqCase::m_mutex;
-
CTestObject* CIMIXSeqCase::m_hinstance = NULL;
-
-
CIMIXSeqCase::CIMIXSeqCase(){}
-
-
CIMIXSeqCase::~CIMIXSeqCase(){}
-
-
BeginTestCase(CIMIXSeqCase)
-
-
#define SEQFUNCREG_SEQCHECK_PERSIST(protocol, field, subffix, fn_seqcheck, fn_persist) \
-
ON_ADD_CASE(#protocol"_SeqCase_"#field"YY_"#subffix"_"#fn_seqcheck"_"#fn_persist, "", "true", &CIMIXSeqCase::protocol##_SeqCase_##field##YY_##subffix##_##fn_seqcheck##_##fn_persist) \
-
ON_ADD_CASE(#protocol"_SeqCase_"#field"NY_"#subffix"_"#fn_seqcheck"_"#fn_persist, "", "true", &CIMIXSeqCase::protocol##_SeqCase_##field##NY_##subffix##_##fn_seqcheck##_##fn_persist) \
-
ON_ADD_CASE(#protocol"_SeqCase_"#field"YN_"#subffix"_"#fn_seqcheck"_"#fn_persist, "", "true", &CIMIXSeqCase::protocol##_SeqCase_##field##YN_##subffix##_##fn_seqcheck##_##fn_persist) \
-
ON_ADD_CASE(#protocol"_SeqCase_"#field"NN_"#subffix"_"#fn_seqcheck"_"#fn_persist, "", "true", &CIMIXSeqCase::protocol##_SeqCase_##field##NN_##subffix##_##fn_seqcheck##_##fn_persist)
-
-
#define SEQFUNCREG_SEQCHECK(protocol, field, subffix, fn_seqcheck) \
-
SEQFUNCREG_SEQCHECK_PERSIST(protocol, field, subffix, fn_seqcheck, PersistYY) \
-
SEQFUNCREG_SEQCHECK_PERSIST(protocol, field, subffix, fn_seqcheck, PersistNY) \
-
SEQFUNCREG_SEQCHECK_PERSIST(protocol, field, subffix, fn_seqcheck, PersistYN) \
-
SEQFUNCREG_SEQCHECK_PERSIST(protocol, field, subffix, fn_seqcheck, PersistNN)
-
-
/*#define SEQFUNCREG_SEQCHECK(protocol, field, subffix, fn_seqcheck) \
-
SEQFUNCREG_SEQCHECK_PERSIST(protocol, field, subffix, fn_seqcheck, PersistNN) */
-
-
#define SEQFUNCREG(protocol, field, subffix) \
-
SEQFUNCREG_SEQCHECK(protocol, field, subffix, SeqcheckYY) \
-
SEQFUNCREG_SEQCHECK(protocol, field, subffix, SeqcheckNY) \
-
SEQFUNCREG_SEQCHECK(protocol, field, subffix, SeqcheckYN) \
-
SEQFUNCREG_SEQCHECK(protocol, field, subffix, SeqcheckNN)
-
-
SEQFUNCREG(IMIXFast, ResetOnLogon, ClientStop)
-
SEQFUNCREG(IMIXFast, ResetOnLogout, ClientStop)
-
SEQFUNCREG(IMIXFast, ResetOnDisconnect, ClientStop)
-
SEQFUNCREG(IMIXFast, RefreshOnLogon, ClientStop)
-
-
SEQFUNCREG(IMIXFast, ResetOnLogon, SvrStop)
-
SEQFUNCREG(IMIXFast, ResetOnLogout, SvrStop)
-
SEQFUNCREG(IMIXFast, ResetOnDisconnect, SvrStop)
-
SEQFUNCREG(IMIXFast, RefreshOnLogon, SvrStop)
-
-
SEQFUNCREG(IMIXNormal, ResetOnLogon, ClientStop)
-
SEQFUNCREG(IMIXNormal, ResetOnLogout, ClientStop)
-
SEQFUNCREG(IMIXNormal, ResetOnDisconnect, ClientStop)
-
SEQFUNCREG(IMIXNormal, RefreshOnLogon, ClientStop)
-
-
SEQFUNCREG(IMIXNormal, ResetOnLogon, SvrStop)
-
SEQFUNCREG(IMIXNormal, ResetOnLogout, SvrStop)
-
SEQFUNCREG(IMIXNormal, ResetOnDisconnect, SvrStop)
-
SEQFUNCREG(IMIXNormal, RefreshOnLogon, SvrStop)
-
-
EndTestClass
-
-
CTestObject* CIMIXSeqCase::GetInstance()
-
{
-
AutoLock autolock(&m_mutex);
-
if (m_hinstance == NULL)
-
{
-
m_hinstance = new CIMIXSeqCase;
-
m_hinstance->m_casetype = NULL;
-
m_hinstance->InitCaseItem();
-
}
-
-
return m_hinstance;
-
}
-
-
int CIMIXSeqCase::GetInitiatorId(int id)
-
{
-
return TYPE_PROJECT_CASEIMIX | TYPE_IMIXSEQCASE | USER_INITIATOR | id;
-
}
-
-
int CIMIXSeqCase::GetAcceptorId(int id)
-
{
-
return TYPE_PROJECT_CASEIMIX | TYPE_IMIXSEQCASE | USER_ACCEPTOR | id;
-
}
-
-
void CIMIXSeqCase::RunAcceptorTest(int type, IMIXApplication *pApp, CApiOp *pApiOp )
-
{
-
if (pApp == NULL || pApiOp == NULL)
-
return;
-
-
CAppStopThreadBodyFactory::AddIMIXSvrStopApp(pApp);
-
pApiOp->StartServer(pApp);
-
}
-
-
void CIMIXSeqCase::RunInitiatorTest(int type, IMIXApplication *pApp, CApiOp *pApiOp )
-
{
-
if (pApp == NULL || pApiOp == NULL)
-
return;
-
-
CAppStopThreadBodyFactory::AddIMIXClientStopApp(pApp);
-
pApiOp->StartClient(pApp, 0, 500);
-
}
-
-
void CIMIXSeqCase::CreateConfigFile(int usertype, char *protocol, CIMIXSeqInfo *seqinfo, string m_configpath)
-
{
-
CConfigGen *pConfigGen = CConfigGen::GetInstance();
-
CApiOp *pApiOp = CApiOp::GetInstance();
-
-
pConfigGen->ClearConfig();
-
pConfigGen->AddSession("default", usertype);
-
if (usertype == USER_ACCEPTOR)
-
{
-
pApiOp->AddAcceptorSession(pConfigGen, protocol, 0);
-
}
-
else if (usertype == USER_INITIATOR)
-
{
-
pApiOp->AddInitiatorSession(pConfigGen, protocol, 0);
-
}
-
-
seqinfo->SeqPersistInit(1);
-
-
pConfigGen->OutConfig(m_configpath);
-
}
-
-
int CIMIXSeqCase::SeqCase_CommonTest(char *protocol, CIMIXSeqInfo *svrinfo, CIMIXSeqInfo *clientinfo, int IsClient)
-
{
-
int dwSvrProcessId;
-
int dwClientProcessId;
-
-
void *hSvrSem = NULL;
-
void *hClientSem = NULL;
-
-
if (IsClient == TRUE)
-
{
-
hSvrSem = CAppStopThreadBodyFactory::CreateSvrStopApp();
-
}
-
else
-
{
-
hClientSem = CAppStopThreadBodyFactory::CreateClientStopApp();
-
}
-
-
CreateConfigFile(USER_ACCEPTOR, (char *)protocol, svrinfo, CConfigPathCls::GetInstance()->GetDefaultCfgAcceptor());
-
CreateConfigFile(USER_INITIATOR, (char *)protocol, clientinfo, CConfigPathCls::GetInstance()->GetDefaultCfgInitiator());
-
-
if (IsClient == TRUE)
-
m_terminalConfig.StartSvrExec(&dwSvrProcessId, (char *)CConfigPathCls::GetInstance()->GetDefaultCfgAcceptor().c_str(), GetAcceptorId(0));
-
else
-
m_terminalConfig.StartClientExec(&dwClientProcessId, (char *)CConfigPathCls::GetInstance()->GetDefaultCfgInitiator().c_str(), GetInitiatorId(0));
-
-
IMIXSleep(1000);
-
-
for (int i = 0; i < 10; ++i)
-
//while(true)
-
{
-
if (IsClient == TRUE)
-
{
-
hClientSem = CAppStopThreadBodyFactory::CreateClientStopApp();
-
m_terminalConfig.StartClientExec(&dwClientProcessId, (char *)CConfigPathCls::GetInstance()->GetDefaultCfgInitiator().c_str(), GetInitiatorId(0));
-
}
-
else
-
{
-
hSvrSem = CAppStopThreadBodyFactory::CreateSvrStopApp();
-
m_terminalConfig.StartSvrExec(&dwSvrProcessId, (char *)CConfigPathCls::GetInstance()->GetDefaultCfgAcceptor().c_str(), GetAcceptorId(0));
-
}
-
-
IMIXSleep(30 * 1000);
-
if (IsClient == TRUE)
-
{
-
CAppStopThreadBodyFactory::ReleaseSem(hClientSem);
-
WaitForProcess(dwClientProcessId, INFINITE);
-
CAppStopThreadBodyFactory::ClosePSem(hClientSem);
-
CAppStopThreadBodyFactory::DeleteClientSem();
-
}
-
else
-
{
-
CAppStopThreadBodyFactory::ReleaseSem(hSvrSem);
-
WaitForProcess(dwSvrProcessId, INFINITE);
-
CAppStopThreadBodyFactory::ClosePSem(hSvrSem);
-
CAppStopThreadBodyFactory::DeleteSvrSem();
-
}
-
}
-
-
if (IsClient == FALSE)
-
CAppStopThreadBodyFactory::ReleaseSem(hClientSem);
-
else
-
CAppStopThreadBodyFactory::ReleaseSem(hSvrSem);
-
-
if (IsClient == TRUE)
-
WaitForProcess(dwSvrProcessId, INFINITE);
-
else
-
WaitForProcess(dwClientProcessId, INFINITE);
-
-
if (IsClient == FALSE)
-
{
-
CAppStopThreadBodyFactory::ClosePSem(hClientSem);
-
CAppStopThreadBodyFactory::DeleteClientSem();
-
}
-
else
-
{
-
CAppStopThreadBodyFactory::ClosePSem(hSvrSem);
-
CAppStopThreadBodyFactory::DeleteSvrSem();
-
}
-
-
return TESTTOOL_SUCCESS;
-
}
-
-
/*********************************************************************************************/
-
/* CommonTestFunc */
-
/*********************************************************************************************/
-
#define SEQMEMFUNC_COMMON(field) \
-
int CIMIXSeqCase::SeqCase_##field(char *protocol, BOOL svrseqcheck, BOOL clientseqcheck, \
-
BOOL svrpersist, BOOL clientpersist, BOOL svrfield, BOOL clientfield, BOOL isclient) \
-
{ \
-
CIMIXSeqInfo svrinfo; \
-
CIMIXSeqInfo clientinfo; \
-
\
-
svrinfo.Clear(); \
-
if (svrfield) \
-
svrinfo.Set##field(); \
-
else \
-
svrinfo.Clr##field(); \
-
if (svrseqcheck == TRUE) \
-
svrinfo.SetIsCheckSeqNum(); \
-
else \
-
svrinfo.ClrIsCheckSeqNum(); \
-
if (svrpersist == TRUE) \
-
svrinfo.SetPersist(); \
-
else \
-
svrinfo.ClrPersist(); \
-
\
-
clientinfo.Clear(); \
-
if (clientfield == TRUE) \
-
clientinfo.Set##field(); \
-
else \
-
clientinfo.Clr##field(); \
-
if (clientseqcheck == TRUE) \
-
clientinfo.SetIsCheckSeqNum(); \
-
else \
-
clientinfo.ClrIsCheckSeqNum(); \
-
if (clientpersist == TRUE) \
-
clientinfo.SetPersist(); \
-
else \
-
clientinfo.ClrPersist(); \
-
\
-
return SeqCase_CommonTest(protocol, &svrinfo, &clientinfo, isclient); \
-
}
-
-
SEQMEMFUNC_COMMON(ResetOnLogon)
-
SEQMEMFUNC_COMMON(ResetOnLogout)
-
SEQMEMFUNC_COMMON(ResetOnDisconnect)
-
SEQMEMFUNC_COMMON(RefreshOnLogon)
-
-
/************************************************************************************************************/
-
#define SEQMEMFUNC_SEQCHECK_PERSIST(protocol, field, subffix, isclient, svrseq, clientseq, svrpersist, clientpersist, fn_seq, fn_persist) \
-
int CIMIXSeqCase::IMIX##protocol##_SeqCase_##field##YY_##subffix##_##fn_seq##_##fn_persist() \
-
{\
-
return SeqCase_##field((char *)protocol##Protocol.c_str(), svrseq, clientseq, svrpersist, clientpersist, TRUE, TRUE, isclient); \
-
} \
-
int CIMIXSeqCase::IMIX##protocol##_SeqCase_##field##NY_##subffix##_##fn_seq##_##fn_persist() \
-
{\
-
return SeqCase_##field((char *)protocol##Protocol.c_str(), svrseq, clientseq, svrpersist, clientpersist, FALSE, TRUE, isclient); \
-
} \
-
int CIMIXSeqCase::IMIX##protocol##_SeqCase_##field##YN_##subffix##_##fn_seq##_##fn_persist() \
-
{\
-
return SeqCase_##field((char *)protocol##Protocol.c_str(), svrseq, clientseq, svrpersist, clientpersist, TRUE, FALSE, isclient); \
-
} \
-
int CIMIXSeqCase::IMIX##protocol##_SeqCase_##field##NN_##subffix##_##fn_seq##_##fn_persist() \
-
{\
-
return SeqCase_##field((char *)protocol##Protocol.c_str(), svrseq, clientseq, svrpersist, clientpersist, FALSE, FALSE, isclient); \
-
}
-
-
#define SEQMEMFUNC_SEQCHECK(protocol, field, subffix, isclient, svrseq, clientseq, fn_seq) \
-
SEQMEMFUNC_SEQCHECK_PERSIST(protocol, field, subffix, isclient, svrseq, clientseq, TRUE, TRUE, fn_seq, PersistYY) \
-
SEQMEMFUNC_SEQCHECK_PERSIST(protocol, field, subffix, isclient, svrseq, clientseq, FALSE, TRUE, fn_seq, PersistNY) \
-
SEQMEMFUNC_SEQCHECK_PERSIST(protocol, field, subffix, isclient, svrseq, clientseq, TRUE, FALSE, fn_seq, PersistYN) \
-
SEQMEMFUNC_SEQCHECK_PERSIST(protocol, field, subffix, isclient, svrseq, clientseq, FALSE, FALSE, fn_seq, PersistNN)
-
-
/*#define SEQMEMFUNC_SEQCHECK(protocol, field, subffix, isclient, svrseq, clientseq, fn_seq) \
-
SEQMEMFUNC_SEQCHECK_PERSIST(protocol, field, subffix, isclient, svrseq, clientseq, FALSE, FALSE, fn_seq, PersistNN)*/
-
-
#define SEQMEMFUNC(protocol, field, subffix, isclient) \
-
SEQMEMFUNC_SEQCHECK(protocol, field, subffix, isclient, TRUE, TRUE, SeqcheckYY) \
-
SEQMEMFUNC_SEQCHECK(protocol, field, subffix, isclient, FALSE, TRUE, SeqcheckNY) \
-
SEQMEMFUNC_SEQCHECK(protocol, field, subffix, isclient, TRUE, FALSE, SeqcheckYN) \
-
SEQMEMFUNC_SEQCHECK(protocol, field, subffix, isclient, FALSE, FALSE, SeqcheckNN)
-
-
SEQMEMFUNC(Fast, ResetOnLogon, ClientStop, TRUE)
-
SEQMEMFUNC(Fast, ResetOnLogout, ClientStop, TRUE)
-
SEQMEMFUNC(Fast, ResetOnDisconnect, ClientStop, TRUE)
-
SEQMEMFUNC(Fast, RefreshOnLogon, ClientStop, TRUE)
-
-
SEQMEMFUNC(Fast, ResetOnLogon, SvrStop, FALSE)
-
SEQMEMFUNC(Fast, ResetOnLogout, SvrStop, FALSE)
-
SEQMEMFUNC(Fast, ResetOnDisconnect, SvrStop, FALSE)
-
SEQMEMFUNC(Fast, RefreshOnLogon, SvrStop, FALSE)
-
-
SEQMEMFUNC(Normal, ResetOnLogon, ClientStop, TRUE)
-
SEQMEMFUNC(Normal, ResetOnLogout, ClientStop, TRUE)
-
SEQMEMFUNC(Normal, ResetOnDisconnect, ClientStop, TRUE)
-
SEQMEMFUNC(Normal, RefreshOnLogon, ClientStop, TRUE)
-
-
SEQMEMFUNC(Normal, ResetOnLogon, SvrStop, FALSE)
-
SEQMEMFUNC(Normal, ResetOnLogout, SvrStop, FALSE)
-
SEQMEMFUNC(Normal, ResetOnDisconnect, SvrStop, FALSE)
-
SEQMEMFUNC(Normal, RefreshOnLogon, SvrStop, FALSE)
阅读(5337) | 评论(0) | 转发(0) |