st_client_table.h 4.4 KB
Newer Older
1 2 3 4
#ifndef ST_CLIENT_TABLE_H
#define ST_CLIENT_TABLE_H

#include <QObject>
5 6
#include <QList>
#include <QMutex>
7
#include <unordered_map>
丁劲犇's avatar
丁劲犇 已提交
8
#include <unordered_map>
9 10
#include "../network/zp_net_threadpool.h"
#include "../pipeline/zp_pipeline.h"
11
#include "./st_message.h"
12
#include "../database/databaseresource.h"
丁劲犇's avatar
丁劲犇 已提交
13
#include "../cluster/zp_clusterterm.h"
14
#include "./st_cross_svr_node.h"
15
namespace ExampleServer{
丁劲犇's avatar
丁劲犇 已提交
16 17 18 19 20
	class st_clientNode_baseTrans;
	class st_client_table : public QObject
	{
		Q_OBJECT
	public:
丁劲犇's avatar
丁劲犇 已提交
21 22 23 24 25 26
		explicit st_client_table(
				ZPNetwork::zp_net_Engine * NetEngine
				,ZPTaskEngine::zp_pipeline * taskeng
				,ZPDatabase::DatabaseResource *pDb
				,ZP_Cluster::zp_ClusterTerm * pCluster
				,QObject *parent = 0);
丁劲犇's avatar
丁劲犇 已提交
27
		~st_client_table();
28

丁劲犇's avatar
丁劲犇 已提交
29

丁劲犇's avatar
丁劲犇 已提交
30 31 32 33
		bool regisitClientUUID(st_clientNode_baseTrans *);
		st_clientNode_baseTrans * clientNodeFromUUID(quint32);
		st_clientNode_baseTrans * clientNodeFromSocket(QObject *);
		//Heart beating and healthy
34
		void KickDeadClients();
35 36
		int heartBeatingThrd();
		void setHeartBeatingThrd(int h) ;
丁劲犇's avatar
丁劲犇 已提交
37

丁劲犇's avatar
丁劲犇 已提交
38
		//Database and disk resources
39
		QString Database_UserAcct();
40
		void setDatabase_UserAcct(QString  s);
41
		QString Database_Event();
42
		void setDatabase_Event(QString  s);
43
		QString largeFileFolder();
44
		void setLargeFileFolder(QString  s);
45

46
		ZPDatabase::DatabaseResource * dbRes();
47 48

		//reg new uuids in m_hash_remoteClient2SvrName
49
		void cross_svr_add_uuids(QString  svrname,quint32 * pUUIDs, int nUUIDs);
50
		//del uuids in m_hash_remoteClient2SvrName, pUUIDs =0 means del all uuids belong to svrname
51
		void cross_svr_del_uuids(QString  svrname,quint32 * pUUIDs , int nUUIDs);
52 53
		//Tell remote servers of uuid-change
		void broadcast_client_uuid(quint32 uuid, bool bActive);
54
		//Trans user Data
55
		void cross_svr_send_data(QString  svrname,QByteArray  arr);
56 57
		//Server Name find
		QString cross_svr_find_uuid(quint32 uuid);
58

59 60 61 62 63 64
		//Cluster Global Balance
		bool NeedRedirect(quint8 bufAddresses[/*64*/],quint16 * pnPort);

		void setBalanceMax(int nmax);
		int balanceMax();

丁劲犇's avatar
丁劲犇 已提交
65 66 67
	protected:
		//This list hold dead nodes that still in task queue,avoiding crash
		QList<st_clientNode_baseTrans *> m_nodeToBeDel;
丁劲犇's avatar
丁劲犇 已提交
68

丁劲犇's avatar
丁劲犇 已提交
69 70
		//Very important hashes. will be improved for cross-server transfer
		QMutex m_hash_mutex;
71 72
		std::unordered_map<quint32,st_clientNode_baseTrans *> m_hash_uuid2node;
		std::unordered_map<QObject *,st_clientNode_baseTrans *> m_hash_sock2node;
丁劲犇's avatar
丁劲犇 已提交
73

丁劲犇's avatar
丁劲犇 已提交
74
		//Concurrent Network frame work
丁劲犇's avatar
丁劲犇 已提交
75
		ZPNetwork::zp_net_Engine * m_pThreadEngine;
丁劲犇's avatar
丁劲犇 已提交
76 77 78 79
		//The piple-line
		ZPTaskEngine::zp_pipeline * m_pTaskEngine;
		//The database pool
		ZPDatabase::DatabaseResource * m_pDatabaseRes;
丁劲犇's avatar
丁劲犇 已提交
80 81
		//The Server Cluster Group
		ZP_Cluster::zp_ClusterTerm * m_pCluster;
丁劲犇's avatar
丁劲犇 已提交
82

丁劲犇's avatar
丁劲犇 已提交
83 84 85 86 87 88
		//The max seconds before dead client be kicked out
		int m_nHeartBeatingDeadThrd;
		//Database Resource Names used by nodes
		QString m_strDBName_useraccount;
		QString m_strDBName_event;
		QString m_largeFileFolder;
丁劲犇's avatar
丁劲犇 已提交
89

90 91 92
		//Cluster max balance value, when clients exceeds this val, balance will happen.
		int m_nBalanceMax;

93
		//cluster Nodes Map
丁劲犇's avatar
丁劲犇 已提交
94
		std::unordered_map<quint32,QString> m_hash_remoteClient2SvrName;
95
		QMutex m_mutex_cross_svr_map;
丁劲犇's avatar
丁劲犇 已提交
96 97 98 99 100
		//Cluster Node Factory
		ZP_Cluster::zp_ClusterNode * cross_svr_node_factory(
				ZP_Cluster::zp_ClusterTerm * /*pTerm*/,
				QObject * /*psock*/,
				QObject * /*parent*/);
101

丁劲犇's avatar
丁劲犇 已提交
102

丁劲犇's avatar
丁劲犇 已提交
103
	signals:
104
		void evt_Message (QObject * psource,QString );
105

丁劲犇's avatar
丁劲犇 已提交
106
	protected slots:
丁劲犇's avatar
丁劲犇 已提交
107 108
		//this event indicates new client connected.
		void on_evt_NewClientConnected(QObject * /*clientHandle*/);
丁劲犇's avatar
丁劲犇 已提交
109 110
		//this event indicates new client encrypted.
		void on_evt_ClientEncrypted(QObject * /*clientHandle*/);
丁劲犇's avatar
丁劲犇 已提交
111 112 113
		//this event indicates a client disconnected.
		void on_evt_ClientDisconnected(QObject * /*clientHandle*/);
		//some data arrival
114
		void on_evt_Data_recieved(QObject *  /*clientHandle*/,QByteArray  /*datablock*/ );
丁劲犇's avatar
丁劲犇 已提交
115 116
		//a block of data has been successfuly sent
		void on_evt_Data_transferred(QObject *   /*clientHandle*/,qint64 /*bytes sent*/);
117

丁劲犇's avatar
丁劲犇 已提交
118
		//this event indicates new svr successfully hand-shaked.
119
		void on_evt_NewSvrConnected(QString /*svrHandle*/);
丁劲犇's avatar
丁劲犇 已提交
120
		//this event indicates a client disconnected.
121
		void on_evt_NewSvrDisconnected(QString /*svrHandle*/);
丁劲犇's avatar
丁劲犇 已提交
122
		//some data arrival
123
		void on_evt_RemoteData_recieved(QString /*svrHandle*/,QByteArray  /*array*/ );
丁劲犇's avatar
丁劲犇 已提交
124 125
		//a block of data has been successfuly sent
		void on_evt_RemoteData_transferred(QObject *  /*svrHandle*/,qint64 /*bytes sent*/);
126
	public slots:
丁劲犇's avatar
丁劲犇 已提交
127
		//send msg to uuid
128
		bool SendToNode(quint32 uuid, QByteArray  msg);
丁劲犇's avatar
丁劲犇 已提交
129

丁劲犇's avatar
丁劲犇 已提交
130
	};
131 132
}
#endif // ST_CLIENT_TABLE_H