⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmcthread.h

📁 基于Linux下Epoll技术的EchoSvr
💻 H
字号:
/// 
/// @file DMCThread.h
/// @brief Data manager center thread
/// @author LiuShijie
/// @date 2009-04-1
/// 

#ifndef __DMCTHREAD__
#define __DMCTHREAD__
#include "def.h"
#include "Thread.h"
//#include "mysql_lib.h"
#include "Queue.h"
using namespace std; 

#define UNKOWN     0
#define BOUND      1
#define CONNECTING 2
#define SENDERR    3
#define SENTERR    4
#define STABLE     7
#define CONNECTED  8
#define CONNECT    9
//客户端访问
#define	COMMAND_BIND_REQ 0x8001
#define	COMMAND_BIND_REP 0x0001
#define	COMMAND_VALIDATE_REQ 0x8002
#define	COMMAND_VALIDATE_REP 0x0002	


/*********************************************************
/*错误代码
**********************************************************/
#define VERSION_10   1
#define SUCCESS	0

#define ERR_INTERNAL		0x0001
#define ERR_USERID		0x0002   //
#define ERR_PROTOCOL		0x0003    
#define ERR_TARGETSVR	0x0004   //
#define ERR_PASSWORD		0x0005	  //密码不正确
#define ERR_MULTIONLINE	0x0006	  
#define ERR_COMMAND		0x0104

struct CLIENT
{
	char flag;
	unsigned char password[6];
	char ip[20];
	unsigned short port;
	struct sockaddr_in servaddr;
	int fd1;
	int fd2;
	int MO,MT;
};

struct SESSION
{
	unsigned char flag;
	int clientid;
	int other;
	unsigned char key[6];
	int bufSize;
	int bufLen;
	char ip[20];
	unsigned short port;
	char* buffer;
};

struct BINDREQ
{
	unsigned short command;
	unsigned int len;
	char version;
	unsigned clientid;
};
struct BINDREP
{
	unsigned short command;
	unsigned int len;
	unsigned short result;
	unsigned char key[6];
};

struct VALIDATEREQ
{
	unsigned short command;
	unsigned int len;
	unsigned char password[6];
};
struct VALIDATEREP
{
	unsigned short command;
	unsigned int len;
	unsigned short result;
};
class DMCThread : public G_Thread
{
	public:
		/// @brief 构造函数
		DMCThread(int,char*,char*,int,char*,char*,char*);
		/// @brief 析构函数
		~DMCThread();
		/// @brief 主线程运行
		void Run();
	private:
		struct CLIENT* clients[65536];
		struct SESSION* sessions[65536];
		
		//zlb_mysql::DataBase db;
		time_t current;
		
		int clock;
		int day;
		
		G_Lock maxOnlineLock;
		int maxOnline;
		unsigned long systemLogID;
		int interval;
		char job[100];
		char ip[16];
		int port;
		char username[50];
		char password[50];
		char dbname[50];
		int loadClients();
		int updateClients();
	public:
		struct SESSION* initSession(int,char*,unsigned short);
		struct SESSION* getSession(int);
		void saveBuffer(int,void*,int);
		void appendBuffer(int,void*,int);
		void setSessionInvalid(int);	
		void setConnected(int,int,int);
		struct CLIENT* getClientByID(int);
		int getFD1(int);
		int getFD2(int);
		void reportMO(int,int);
		void reportMT(int,int);
		bool init(char*);
		//zlb_mysql::DataBase db;
		
};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -