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

📄 network.h

📁 赤壁之战的游戏源代码
💻 H
字号:
/////////////////
// CBMap.h		:	《赤壁》网络通讯的数据结构
// CBMap.h		:	
//
// 版本0010		:	1997年1月15日
//
// 编写			:	董海
// written by	:	Dong Hai
//
// 编译器		:	Visual C++ 4.0
// Compiler		:	Visual C++ 4.0
//
// 版权			:	北京前导软件有限公司		1996-1997
// Copyright	:	WayAhead Software Co.Ltd.	1996-1997
/////////////////
// 此文件包括对游戏中网络部分的各种操作


#ifndef CB_INCLUDED
#define CB_INCLUDED
//#define	DEBUG

#define INITGUID
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <dplay.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>


#include "cbgame.h"


//用于存储网络消息的缓冲区的大小
//#define MAX_BUFFER_SIZE								256


//用于标示接收消息的队列是否满了
#define		FULL										1
#define		NO_FULL										0

//标示玩家是选择了创建游戏还是联接游戏
#define		DP_CREATEGAME								1000
#define		DP_CONNECTGAME								1001

//允许同时上网玩游戏的最大人数
#define		MAX_PLAYERS									4

//游戏中用来存储各种名字的长度的最大值的宏定义
#define		MAX_NAME_LENGTH								20

//各种返回值的宏定义
#define		OK											0
#define		DP_ERROR_ENUM_SESSION						-1000
#define		DP_ERROR_OPEN_SESSION						-1001
#define		DP_PLAYER_ID_EMPTY							-1002
#define		DP_ERROR_INPUT_SESSION_CHOICE				-1003
#define		DP_MESSAGE_QUEUE_FULL						-1004
#define		DP_ERROR_RECEIVE_MESSAGE					-1005
#define		DP_ERROR_SEND_MESSAGE						-1006
#define		DP_ERROR_GET_PROVIDER						-1007
#define		DP_ALREADY_IN_NETWORK						-1008
#define		DP_ERROR_GET_NETWORK_SERVICE				-1009
#define		DP_ERROR_CREATE_NETWORK_SERVICE				-1010
#define		DP_WINDOWS_HANDLE_EMPTY						-1011
#define		DP_ERROR_FREE_DIRECTPLAY_OBJECT				-1012
#define		DP_ERROR_CREATE_SESSION						-1013
#define		DP_ERROR_CREATE_PLAYER						-1014
#define		DP_ERROR_INPUT_ACTION						-1015
#define		DP_ERROR_INPUT_PROVIDER						-1016
#define		DP_SESSION_NAME_EMPTY						-1017
#define		DP_FRIENDLY_NAME_EMPTY						-1018
#define		DP_MESSAGE_QUEUE_EMPTY						-1019
#define		DP_NOT_ADD_PLAYER							-1020
#define		DP_NOT_DESTROY_PLAYER						-1021
#define		DP_ERROR_DEL_EMPTY_PLAYER					-1022
#define		DP_ERROR_INVALID_PARAMS						-1023
#define		DP_ERROR_GENERIC							-1024
#define		DP_ERROR_UNAVAILABLE						-1025
#define		DP_ERROR_UNSUPPORTED						-1026
#define		DP_ERROR_USER_CANCEL						-1027
#define		DP_ERROR_ACTIVE_PLAYERS						-1028
#define		DP_ERROR_NOT_CREATE_PLAYER					-1029
#define		DP_ERROR_NOT_CONNECT						-1030
#define		DP_NOT_ADD_PLAYERS							-1031
#define		DP_ERROR_INVALID_OBJECT						-1032
#define		DP_ERROR_INVALID_PLAYER						-1033
#define		DP_ERROR_BUSY								-1034
#define		DP_ERROR_EXCEPTION							-1035
#define		DP_ERROR_QUERY_PROVIDER_INFOR				-1036
#define		DP_NOT_FIND_PLAYER							-1037
#define		DP_IS_NOT_HOST								-1038



//关于添加,删除一个玩家的宏定义
#define		ADD_NEW_PLAYER_TO_SERVER					250
#define		ADD_PLAYERS_TO_ALL							251
#define		DESTROY_PLAYER								252
#define		DP_MESSAGE									253
#define		DP_MESSAGE_SYN								254//标示游戏同步的信号
#define		DP_MESSAGE_ANSWER							255//消息的应答信号
#define		DP_TALK										256//用于在联接游戏时,进行彼此交谈的信号类型
#define		DP_INIT_GAME								257
#define		DP_START_GAME								258
#define		DP_SYN_ANSWER								259//同步信号的应答
#define		DP_CTRL_SEND								260//网络中的控制权发送
#define		DP_CTRL_ANSWER								261//网络中的控制权发送以后的应答
#define		DP_CTRL_RETURN								262//标示网络中的控制权从新回到第一个玩家处
#define		DP_DESTROY_PLAYER							263//从游戏中删除一个玩家



//定义与其它模块的接口中所使用的宏定义
#define		DP_INIT_NETWORK_STEP_1						2000
#define		DP_INIT_NETWORK_STEP_2						2001
#define		DP_CREATE_SESSION							2002
#define		DP_GET_SESSION								2003
#define		DP_CONNECT_SESSION							2004
#define		DP_SEND_MESSAGE								2005
#define		DP_RECEIVE_MESSAGE							2006
#define		DP_DESTROY_GAME								2007
#define		DP_READ_MESSAGE_QUEUE						2008
#define		DP_QUERY_OWN_INFORMATION					2009
#define		DP_QUERY_PROVIDER							2010


//定义接收和发送的缓冲区的最大字节数
#define		BUFFER_MAX_BYTE								512


//用于定义私有消息的偏移量
#define		DP_MESSAGE_USE								0


//定义通知其它模块的消息类型
#define		DP_MESSAGE_RECEIVED							WM_USER+DP_MESSAGE_USE+1
#define		DP_MESSAGE_ADD_PLAYER						WM_USER+DP_MESSAGE_USE+2						


//用来定义本进程是创建者还是加入者或者什么都不是
#define		DP_HOST										4000
#define		DP_JOIN										4001
#define		DP_OTHER									4002


//定义发送给创建者还是加入者
#define		DP_SEND_TO_SERVER							5000
#define		DP_SEND_TO_ALL								5001


//提供的网络服务的类型的宏定义
#define		IPX											0
#define		TCPIP										1
#define		MODEM										2
#define		SERIAL										3


//函数说明

// 清除网络中的玩家,对全局变量进行初始化
//
int		DP_DestroyGame( void );

// 进行网络设置的第一步,读取系统提供的服务类型
// MainWndHandle是游戏中用到的窗口的句柄
int		DP_RemoteCreateStep1( HWND   MainWndHandle );

// 进行网络设置的第二步,根据玩家的选择建立网络服务
//
int		DP_RemoteCreateStep2( void );

// 进行网络设置的第三步
//
//int		RemoteCreateStep3( void );

// 根据玩家的输入建立网络游戏用到的Session
//
int		DP_CreateSession( void );

// 从网络中读取已经存在的Session的名字和有关信息
//
int		DP_GetSession( void );

// 根据玩家的选择,联接到网络中的指定的Session上
//
int		DP_ConnectSession( void );

// 用来具体的得到网络服务的类型和信息
// hWndCtl是游戏中使用的窗口句柄
int		DP_GetProvider(HWND hWndCtl);

// 用来具体的得到网络中已经存在的Session的信息
// hWndCtl是游戏中使用的窗口句柄
int		DP_GetGame(HWND hWndCtl);

// 用来具体的建立网络服务类型
// i是玩家选择的服务类型的编号
BOOL	DP_DlgProcChooseProvider(int	i);

// 此函数是EnumSession函数的回调函数
// 参数说明省略
BOOL FAR PASCAL DP_EnumSession(LPDPSESSIONDESC lpDPGameDesc, LPVOID lpContext, 
                            LPDWORD lpdwTimeOut, DWORD dwFlags);

// 此函数是DirectPlayEnumerate函数的回调函数
// 参数说明省略
BOOL FAR PASCAL DP_EnumSP(LPGUID lpGuid, LPSTR lpDesc, DWORD dwMajorVersion,
                       DWORD dwMinorVersion, LPVOID lpv);

// 用来具体的联接到玩家选择的Session上
// i是玩家选择的Session的编号
int		DP_DlgProcSelSession (int i);

// 用来接受网络中传过来的消息
//
extern	int		DP_ReceiveGameMessages( void );

// 用来发送玩家的信息给网络中的其他玩家
//
extern	int		DP_SendGameMessages(/*DWORD to*/);

// 用来判断发送过来的信息是否是添加玩家的信息,并添加玩家信息到玩家队列中
// fromID是发送方的ID值
int		DP_AddPlayers( DPID		fromID );

// 用来判断发送过来的信息是否是删除玩家的信息,并从玩家队列中删除之
// fromID是发送方的ID值
int		DP_DestroyPlayers( DPID		fromID );

// 用来发送删除玩家的信息给网络中的所有玩家
//
int		DP_SendDestroyPlayers( void );

// 用来发送添加玩家的信息给网络中的所有玩家
//
int		DP_SendAddPlayers( int SendToWho );

// 用来从消息队列中读取一条消息,并把它放到变量DP_ReadMessage中
//
int		DP_ReadMessageQueue( void );

// 从玩家的信息队列中查询玩家的信息
//
int		DP_QueryOwnInfor( void );

// 从系统中查询提供的网络服务的类型
//
int		DP_QueryProvider( void );

// 提供给调用者的统一的接口函数,利用Action参数可以调用网络服务的任何功能
// Action指出调用者需要的服务的类型
// MainWndHandle是游戏中使用的窗口的句柄
int		DP_NetworkInterface(int	Action, HWND   MainWndHandle);


struct	PlayerInfor
			{
				char		DP_NickName[MAX_NAME_LENGTH];//玩家给本人起的在游戏中的名字
				DPID        DP_dcoID;// 用于存储本玩家在网络中ID值
			};
typedef	struct	PlayerInfor	PlayerInfo;

struct	EnumCallback
			{
				GUID	PointGUID;
				BYTE	PointDesc[256];
			};

struct	EnumSessionCallback
			{
				DPSESSIONDESC PointDPGameDesc;
			};

//创建游戏的GUID;
// CB 09438c21-e06a-11ce-8681-00aa006c5d58
DEFINE_GUID(CB_GUID,0x09438c21,0xe06a,0x11CE,0x86,0x81,0x00,0xaa,0x00,0x6c,0x5d,0x58);


#endif

⌨️ 快捷键说明

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