📄 datastruct.h
字号:
#pragma once
#include "DoubleList.h"
#define MAX_BUFFER 256
#define PORT 7000
typedef struct {
int Room;
int Desk;
SOCKET hHost;
SOCKET hClient;
char GameName[10];
char HostName[10];
char ClientName[10];
char HostMsg[MAX_BUFFER];
char ClientMsg[MAX_BUFFER];
int HostCount;
int ClientCount;
}GameInfo,*LPGameInfo;//用于保存游戏信息,每建立一个游戏创建一个
typedef struct {
int Room;
int Desk;
char Name[10];
SOCKET Sock;
}LoginInfo,Game;//登陆的消息内容,以及用于m_io_group中为每一个用户保存信息
typedef struct {
char GameName[10];
}CreateInfo,JoinInfo;//创建和参加游戏的消息内容
typedef struct {
char GameName[10];
int player;
int numplayers;
}StartInfo;//开始游戏消息内容
typedef struct {
char Msg[MAX_BUFFER];
}MsgInfo;//游戏中发送信息的消息内容
typedef struct {
int MsgType;
int Size;
char Buffer[MAX_BUFFER];//消息内容,根据type不同代表不同的消息
}GameMsg;//发送的数据包结构
typedef struct
{
OVERLAPPED Overlapped;
WSABUF DataBuf;
CHAR Buffer[sizeof(GameMsg)];
//DWORD BytesSEND;
//DWORD BytesRECV;
Game gameinfo;
int type;
} PER_IO_OPERATION_DATA, * LPPER_IO_OPERATION_DATA;//完成端口的io结构
typedef struct
{
SOCKET Socket;
} PER_HANDLE_DATA, * LPPER_HANDLE_DATA;//完成端口的key结构
typedef CDoubleList<PER_IO_OPERATION_DATA, 10> IO_GROUP;
typedef CDoubleList<PER_HANDLE_DATA, 10> KEY_GROUP;
typedef IO_GROUP::ITERATOR IO_POS;
typedef KEY_GROUP::ITERATOR KEY_POS;
DWORD WINAPI ServerWorkerThread(LPVOID CompletionPortID);
int SendToClient(SOCKET sock,char *buf,int buflen,int nType,LPPER_IO_OPERATION_DATA pConText);
IO_GROUP m_io_group;//io结构的双链表,保存所有sock的io结构
KEY_GROUP m_key_group;//key结构的双链表
typedef CDoubleList<GameInfo, 10> GameInfo_GROUP;
typedef GameInfo_GROUP::ITERATOR GameInfo_POS;
GameInfo_GROUP gameInfo_group;//游戏的双链表,每创建一个游戏分配一个空间
enum
{
IOCP_RECV,
IOCP_SEND
};//服务器端完成端口消息的类型
enum
{
GAME_STATE_LOGIN,
GAME_STATE_CREATE,
GAME_STATE_JOIN,
GAME_STATE_START,
GAME_STATE_MSG,
GAME_STATE_END,
SERVER_SUCCESS,
SERVER_FAIL,
GAME_STATE_EXIT
};//发送的数据包的类型
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -