forked from jimingmin/frame
-
Notifications
You must be signed in to change notification settings - Fork 0
/
frame.h
133 lines (93 loc) · 3.98 KB
/
frame.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
* frame.h
*
* Created on: 2014年1月22日
* Author: jimm
*/
#ifndef FRAME_H_
#define FRAME_H_
#include "common/common_singleton.h"
#include "common/common_typedef.h"
#include "common/common_export.h"
#include "common/common_mutex.h"
#include "netevent/net_impl.h"
#include "netevent/net_acceptor.h"
#include "frame_impl.h"
#include "frame_namespace.h"
#include "frame_timermgt.h"
#include "frame_msghandle.h"
#include "frame_msgmap.h"
#include "frame_configmgt.h"
#include "frame_timertask.h"
#include "frame_bankmgt.h"
#include "frame_macrodefine.h"
#include "frame_safeconfig.h"
#include "frame_listenentry.h"
#include "frame_serveridpool.h"
#include <signal.h>
#include <list>
using namespace std;
using namespace NETEVENT;
FRAME_NAMESPACE_BEGIN
class CFrame
{
public:
EXPORT CFrame();
EXPORT virtual ~CFrame();
EXPORT int32_t Init(const char *szServerName, bool bDaemon = false);
EXPORT int32_t Uninit();
EXPORT int32_t Run(bool bStop = false);
EXPORT void AddRunner(IRunnable *pRunner);
EXPORT void DelRunner(IRunnable *pRunner);
EXPORT void ClearRunner();
EXPORT int32_t CreateTimer(TimerProc Proc, CBaseObject *pTimer, CBaseObject *pTimerData, int64_t nCycleTime, bool bLoop, TimerIndex& timerIndex);
EXPORT CTimer *GetTimer(TimerIndex nTimerIndex);
EXPORT int32_t RemoveTimer(TimerIndex nTimerIndex);
EXPORT void RegistConfig(const char *szConfigName, IConfig *pConfig);
EXPORT IConfig *GetConfig(const char *szConfigName);
EXPORT IConfig *GetSafeConfig(const char *szConfigName);
EXPORT void RegistBank(const char *szBankName, IBank *pBank);
EXPORT IBank *GetBank(const char *szBankName);
EXPORT void SetWorkerCount(int32_t nWorkerCount);
EXPORT int32_t Start(const char *szServerName, int32_t nServiceType, char *szHost, uint16_t nPort, IInitFrame *pIniter);
/*
* 返回值: 1:not found msg handler
* 2:decode msg failed
*/
EXPORT int32_t FrameCallBack(int32_t nMsgID, ...);
EXPORT CMsgMapDecl &GetMsgMap();
EXPORT void Dump(ICtlHead *pCtlHead, IMsgHead *pMsgHead, IMsgBody *pMsgBody, const char *szPrefix = "");
EXPORT int32_t InitSig();
EXPORT int32_t SendMsg(IIOSession *pIoSession, IMsgHead *pMsgHead, IMsgBody *pMsgBody);
EXPORT void AddListenHandler(const char *szAddr, uint16_t nPort, IPacketParserFactory *pFactory, IIOHandler *pIOHandler);
EXPORT int32_t GetServerID();
protected:
EXPORT int32_t SetDaemon();
EXPORT uint16_t MakeWorker(int32_t nWorkerCount);
EXPORT int32_t Working(const char *szServerName, IInitFrame *pIniter, CNetHandler *pNetHandler);
EXPORT list<SocketFD> StartWatcherListening(list<CFrameListenEntry *> stListenEntryList);
EXPORT void StopWatcherListening(list<SocketFD> stHandleList);
EXPORT list<CAcceptor *> StartWorkerListening(list<SocketFD> stListenHandle, list<CFrameListenEntry *> stListenEntryList, CNetHandler *pNetHandler);
EXPORT void StopWorkerListening(list<CAcceptor *> stAcceptorList);
protected:
string m_strServerName;
int32_t m_nServerID;
list<IRunnable *> m_stRunnerList;
CMsgMapDecl m_stMsgMap;
CFrameTimerTask *m_pTimerTask;
CriticalSection m_stLoadConfigLock;
CFrameConfigMgt *m_pConfigMgt;
CTimerMgt *m_pTimerMgt;
CFrameBankMgt *m_pBankMgt;
int32_t m_nWorkerCount;
list<CFrameListenEntry *> m_stListenEntryList;
CFrameServerIDPool m_stServerIDPool;
};
#define g_Frame CSingleton<CFrame>::GetInstance()
REGIST_CLASS(Config, const char *, IConfig *)
#define REGIST_CONFIG(config_name, config_class) static regist_Config reg_##config_class(config_name, new config_class(config_name));
#define REGIST_CONFIG_SAFE(config_name, config_class) static regist_Config reg_##config_class(config_name, new CFrameSafeConfig<config_class>(config_name));
REGIST_CLASS(Bank, const char *, IBank *)
#define REGIST_BANK(bank_name, bank_class) static regist_Bank reg_##bank_class(bank_name, new bank_class());
FRAME_NAMESPACE_END
#endif /* FRAME_H_ */