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

📄 m_gameserver.h

📁 多人走路RPG服务器 c++ socket
💻 H
字号:
#ifndef GAMECITY_NETWORK_H

#include <string>
#include <mysql.h>


#define GAMECITY_NETWORK_H

//自定义消息数据
#define V_MSG_SYSLEVEL   34
#define V_MSG_USERLEVEL  35
#define V_MSG_NONE		 33

#define MSG_SAY    33
#define		SUB_MSG_SAYALL  33
#define		SUB_MSG_SAYONE  34
#define		SUB_MSG_SYSTEM  35

#define MSG_JOIN   34

#define MSG_LEAVE  35
#define		SUB_MSG_LEAVE_ASK	33
#define		SUB_MSG_LEAVE_OK	34


#define MSG_ROOM				 36
#define		MSG_ROOM_CREATE		 33
#define		MSG_ROOM_CREATE_OK	 34
#define		MSG_ROOM_CREATE_FAIL 35	
#define		MSG_ROOM_JOIN		 36
#define		MSG_ROOM_JOIN_OK	 37
#define		MSG_ROOM_JOIN_FAIL	 38
#define		MSG_ROOM_PLAYREADY	 39
#define		MSG_ROOM_GOPLAY		 40
#define		MSG_ROOM_ALL		 41
#define		MSG_ROOM_LEAVE		 42
#define		MSG_ROOM_PLAYER_LEAVE 43
#define		MSG_ROOM_USER_CHANGE 44
#define		MSG_ROOM_SWAPSLOT	 45
#define		MSG_ROOM_CHANGE		 46
	

#define	MSG_PLAY  37
#define		MSG_PLAY_LEAVE		33

#define MSG_USERLOG 38
#define		SUB_MSG_USER_ENTER 33
#define		SUB_MSG_USER_DOWN  34
#define		SUB_MSG_USER_UP    35
#define		SUB_MSG_USER_QUIT  36
#define		SUB_MSG_USER_ALL   37
#define		SUB_MSG_USER_LOGIN 38
#define		SUB_MSG_USER_ERROR1 39
#define		SUB_MSG_LOGIN_ASK  40
#define		SUB_MSG_LOGIN_PASS 41
#define		SUB_MSG_LOGIN_NO   42

#define MSG_MOVE 39
#define		SUB_MSG_MOVE_ME		 33
#define		SUB_MSG_MOVE_OTHER	 34


#define NONE -1
#define ERROR -1
#define	SocketBuf_MAX 4096

using namespace std;



class GamePlayerStatus {
	public:
	enum			Status {Empty,Free,Room,Playing};
};

class GameServerStatus {
	public:
	enum			Status {Empty,Waiting,Playing,End};
};

class BaseGamePlayer {

	public:
		int 	m_user_id;
		unsigned int 	m_fd;
		char			m_name[20];
		int				m_room_id;
		int				m_sex;
		int				m_pos_x,m_pos_y;
		int				m_player_status,m_face_id,m_body_id;
		int				x1,x2,y1,y2;

		string			m_SocketBuf;
		bool			m_ReadyFlag;



		GamePlayerStatus::Status	m_status;     //玩家状态


		BaseGamePlayer(void);
		virtual void	init(unsigned int id,char *p_name)=0;
		virtual void	GetPlayerStatus(char *buf) =0 ;
		virtual void	clear(void)=0;
		virtual void	SetData(unsigned int fd,char *ext)=0;

		void	AddSocketBuf(char *);
		int		test_XY( int d_x,int d_y);
		int		SetXY(int u_x,int u_y);

};

class GamePlayer : public BaseGamePlayer {      //玩家用户类


	public:



		GamePlayer(void);

		void	init(unsigned int id,char *p_name);
		void	GetPlayerStatus(char *buf);
		void	clear(void);
		void	SetData(unsigned int fd,char *ext);

};



class GameServer {      //游戏规则类


	public:

		GameServerStatus::Status	m_status;
		BaseGamePlayer				**m_GamePlayer;

		int				min_player;
		int				max_player;
		int				cur_player;
		int				m_room_id;

		bool			m_CanPlayFlag,m_TimeFlag;
		

		int				Players[500];   //玩家下标 0 为创建者
		char			room_name[40];
		char			room_passwd[40];

						GameServer(void);

		int				GetPlayerSlot(int player_id);
		void			GetStatus(char *buf);
		void			Game_init(int room_id,int max); //原始初始化
		void			send_all(char *,int);
		void			send_all2(char *,int);
		void			send_playerlist(void);

		int				join(int player_id);
		int				leave(int player_id);
		void			play_change_slot(int player_id,int new_slot);
		void			GetAllPlayer(char *buf);


		void			PlayerReady(int player_id);

		virtual void	process(int player_id,char p_msg2,char p_msg3,char *p_data);
		virtual void	time_process(void);

		void			Round_init(void); //每局初始化
		void			Round_start(void) {} //每局初始化
		void			Round_process(void) {} //每局初始化
		void			Round_end(void) {} //每局初始化
		virtual void	Round_exit(void); //每局初始化

		void			Game_exit(void) ; //结束
};


class GameRoomServer {  //游戏大厅类

	private:		

	public:

		int Max_GameServer;
		int Max_GamePlayer;
		int OnlinePlayer;
		time_t up_time;
		char			My_version[20];

		//通信变量部份

		char p_level,p_msg1,p_msg2,p_msg3,p_data[1024];

		GameServer	*m_GameServer[100];
		BaseGamePlayer	*m_GamePlayer[1024];

		GameRoomServer(void);	

		int FindGameServer(GameServerStatus::Status status);
		int CreateGameServer(int player_id,char *param);
		int JoinGameServer(int room_id,int player_id);
		int LeaveGameServer(int room_id,int player_id);
		
		int DeleteGameServer(int id);

		int PlayerJoin(char *name,char *passwd);
		int PlayerExit(char *name);
		int CheckPlayerExist(char *name);
		virtual int CheckPlayerLogin(const char *u_name,const char *u_pass,const char *u_ext) { return 0; }
		//virtual int SavePlayerInfo(int player_id,const char *name)=0;
		//int SavePlayerInfo(int player_id,const char *name);
		
		int GetNewGamePlayer(void);

		void GetAllPlayer(char *buf);

		void ShowAllGame(void);

		int  FindPlayer_BySocket(unsigned int fd);

		//信息处理
		void process(Socket *socket, const char *data);
		virtual void my_process(char p_msg1,char p_msg2,char p_msg3,char *p_data,int player_id,int server_n);
		virtual void time_process(void);
		void send_cmd_all (char p_level,char p_msg1,char p_msg2,char *msg,unsigned int filter_socket);

		int SendAll(void);
};

class DataSQL {

	public:

		MYSQL mysql;
		MYSQL_RES *result;
		MYSQL_ROW row;

		int num_rows,error_no;

		char error_str[1024];
		
		DataSQL(void);

		int  ConnectDB(const char *host,const char *user,const char *pass,const char *db);
		int  Query(const char *sql);
		int  DoQuery(const char *sql);
		void FreeResult(void);
		int  GetData(void);
		int  CheckConnect(void);

};
void send_cmd_msg(char *buf,char p_level,char p_msg1,char p_msg2,char *p_data);

#endif

⌨️ 快捷键说明

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