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

📄 px_ss_module_cl.h

📁 MMORPG游戏服务器端架构及函数
💻 H
字号:
#ifndef _PX_SS_MODULE_CL_
#define _PX_SS_MODULE_CL_

/* must been first include begin */
#include "..\ProjectX_Common\ProjectX_Copyright.h"
#include "..\ProjectX_Common\ProjectX_Common.h"
/* must been first include end */

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define STATE_PX_SS_CL_NO_INIT				0			//没有初始化
#define STATE_PX_SS_CL_FREE_USE				1			//可以被再使用,内部成员已经初始化
#define STATE_PX_SS_CL_CONNECTED			2			//刚连接上
#define STATE_PX_SS_CL_VERSION_CHECK		3			//处于版本检查阶段
#define STATE_PX_SS_CL_NORMAL_USE			4			//正常使用中,已经pass版本检查
#define STATE_PX_SS_CL_DISCONNECTED			5			//断开状态,原因不计
#define STATE_PX_SS_CL_REUSE_PROCESS		6			//处于重用时间消失中
#define STATE_PX_SS_CL_ERROR_FOUND			7			//有错误检测到


#define DEFAULT_PX_SS_CL_RECV_BUF_LEN		512			
#define DEFAULT_PX_SS_CL_SEND_BUF_LEN		512
#define DEFAULT_PX_SS_CL_IOCP_BUF_LEN		512


typedef struct tagPx_SS_CL_Info {
	CRITICAL_SECTION *	cts_state;
	CRITICAL_SECTION *	cts_recv;
	CRITICAL_SECTION *	cts_send;
	int					size_recv_append;
	int					size_send_append;
	int					frame_heartbreak;
	int					heartbreak;
	int					frame_prev;
	unsigned int		ip;	
	u_short				port;
	byte				state;
	byte				send_sign;
	byte				version_sign;
	SOCKET				s_client;
	char			*	recv_buf;
	char			*	precv_start;
	char			*	precv_end;
	char			*	precv_append;
	char			*	send_buf;
	char			*	psend_start;
	char			*	psend_end;
	char			*	psend_append;
}PX_SS_CL_INFO, * LPPX_SS_CL_INFO;

typedef struct tagPx_SS_CL_Per_Data {
	PX_SS_CL_INFO * pcli;
}PX_SS_CL_PER_DATA, * LPPX_SS_CL_PER_DATA;

typedef struct tagPx_SS_CL_Io_Data {
	OVERLAPPED	overlapped;
	char *		buf;
	int			size;
	byte		io_type;
	WSABUF		wsabuf;
}PX_SS_CL_IO_DATA, * LPPX_SS_CL_IO_DATA;

typedef struct tagPx_SS_CL_Redirect {
	PX_SS_CL_PER_DATA	* per_data;
	PX_SS_CL_IO_DATA	* io_recv;
	PX_SS_CL_IO_DATA	* io_send;
}PX_SS_CL_REDIRECT, * LPPX_SS_CL_REDIRECT;

typedef struct tagPx_SS_CL_Key {
	PX_SS_CL_REDIRECT	* prdi;
	byte				  state;
}PX_SS_CL_KEY, * LPPX_SS_CL_KEY;

typedef struct tagPx_SS_CL_Version {
	char	version[MAX_VERSION_LEN];
	char	md5code[MAX_MD5CODE_LEN];
	char	antihackcode[MAX_AHCODE_LEN];
	BOOL	accept;
}PX_SS_CL_VERSION, * LPPX_SS_CL_VERSION;


void init_module_cl(void);
void set_module_cl_state(byte state);
BOOL valid_module_cl_state(byte state);
BOOL valid_specify_cl_state(PX_SS_CL_INFO * pci,byte state);

BOOL init_cl_key_new(PX_SS_CL_KEY * pck);
BOOL init_cl_key_reuse(PX_SS_CL_KEY * pck);

BOOL close_specify_client(PX_SS_CL_INFO * pci);

void set_specify_cl_state(PX_SS_CL_INFO * pci,byte state);
void set_specify_cl_send_state(PX_SS_CL_INFO * pci,byte state);


void add_buf_to_specify_cl_recv_buf(PX_SS_CL_INFO * pci,int size,char * packet);
void add_buf_to_specify_cl_send_buf(PX_SS_CL_INFO * pci,int size,char * packet);
void update_specify_cl_send_buf(PX_SS_CL_INFO * pci,int size);
int get_specify_cl_send_buf(PX_SS_CL_INFO * pci, char * packet);
void tidy_specify_cl_recv_buf(PX_SS_CL_INFO * pci);
void tidy_specify_cl_send_buf(PX_SS_CL_INFO * pci);

void close_all_client(void);
void close_module_cl(void);
void free_module_cl_resource(void);

void handle_module_cl_recv_buf(void);
void handle_specify_cl_recv_buf(PX_SS_CL_INFO * pci);
void handle_module_cl_packet(PX_SS_CL_INFO * pci,WORD mc,WORD size,char * packet);


void handle_module_cl_heartbreak(void);
void handle_module_cl_reuse(void);
void send_all_cl_ss_need_close(void);

void module_cl_packet_request_connect(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_send_version(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_send_md5_code(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_send_specify_code(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_request_get_area_server_list(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_request_get_server_list(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_request_get_line_server_list(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_request_specify_line_server_address(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_send_heartbreak(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_request_disconnect(PX_SS_CL_INFO * pci,WORD size,char * packet);
void module_cl_packet_send_frame_counter(PX_SS_CL_INFO * pci,WORD size,char * packet);

DWORD WINAPI module_cl_accept_thread(PVOID paparm);
DWORD WINAPI module_cl_iocp_thread(PVOID paparm);



































#endif	//_PX_SS_MODULE_CL_

⌨️ 快捷键说明

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