📄 network.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 + -