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

📄 cmultiplayer.h

📁 Visual C++ 游戏开发与设计实例 源代码(所有)
💻 H
字号:
// CMAIN LIB - APPLICATION AND DIRECT WRAPPER
//
// Written by Mauricio Teichmann Ritter
//
// Copyright (C) 2002, Brazil. All rights reserved.
// 
//

// cMultiplayer.h: interface for the cMultiplayer class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CMULTIPLAYER_H__1AA8D187_1064_40A7_A709_B2684653429F__INCLUDED_)
#define AFX_CMULTIPLAYER_H__1AA8D187_1064_40A7_A709_B2684653429F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "stdafx.h"
#include "cApplication.h"
#include "cMessageHandler.h"
#include <dplay8.h>
#include <vector>
#include <list>

using namespace std;

#define		PLAYERTYPE_HOST 1
#define		PLAYERTYPE_PEER 2

extern const GUID g_guidApp;


struct PLAYER_MESSAGE
{
	int					m_iType;
	BYTE*				pReceiveData;
};


struct PLAYER_INFO
{
	DPNID  dpnidPlayer;
};

struct HOST_NODE
{
    DPN_APPLICATION_DESC*   pAppDesc;
    IDirectPlay8Address*    pHostAddress;
    WCHAR*                  pwszSessionName;

    HOST_NODE*             pNext;
};

typedef vector<PLAYER_INFO*> PLAYERINFO_VECTOR;

typedef list<PLAYER_MESSAGE*> PLAYER_MESSAGES;
typedef list<PLAYER_MESSAGE*>::iterator PLAYERMESSAGE_ELEMENT;

class cMultiplayer  : public cMessageHandler
{
private:
	cMessageHandler*	m_pHandler;
	DWORD m_dwTcpPort;
	int m_iModemDevice;
	IDirectPlay8Peer    *m_pDP;
	IDirectPlay8Address	*m_pDeviceAddress;
	DPN_SERVICE_PROVIDER_INFO*  m_pdnSPInfo;
	DPN_SERVICE_PROVIDER_INFO*  m_pdnDeviceInfo;

	char m_sFlowControl[10];
	char m_sParity[10];
	char m_sStopBits[10];


	DWORD m_dwNumSP;
	DWORD m_dwNumDevices;
	int	m_iSPIndex;
	int m_iSerialDevice;

	HOST_NODE*	m_pHostList;
	int  m_iNumHosts;
	BOOL m_bCanConnect;

	int m_iPlayerType;

	DPNID m_dpnidHost;
	DPNID m_dpnidSelf;
	PLAYER_MESSAGES m_lstMessages;
	CRITICAL_SECTION	   m_csMessages;

	PLAYERINFO_VECTOR  m_lstPlayers;
public:
	void SetHandler(cMessageHandler *pHandler);
	void ReleaseMessage();
	int GetMyId();
	void FindHost();
	int GetHost();
	void RemoveMessage(PLAYER_MESSAGE* pMessage);
	PLAYER_MESSAGE* GetMessage(int iIndex);
	int GetNumMessages();
	void SendTo(DPNID dpnidTarget, int iType, LPBYTE lpBuffer, DWORD dwSize, DWORD dwFlags = DPNSEND_SYNC | DPNSEND_NOLOOPBACK);
	PLAYER_INFO* GetPlayerInfo(int iIndex);
	int GetNumConnected();
	BOOL IsHosting();
	void Connect(int iHost);
	BOOL GetCanConnect();
	void SetCanConnect(BOOL bValue);
	void GetSessionName(int iIndex, char* sValue, int iSize);
	int GetNumSessions();
	BOOL EnumSessions();
	BOOL Host(char* sSessionName);
	void AdvanceSPOption(int iOption);
	void GetSPOption(int iOption, char* szBuffer, DWORD dwBufferSize);
	char* GetSPOptionName(int iOption);
	int GetSPOptionType(int iOption);

	int GetSPIndex();
	void NextSP();
	int GetNumSPOptions();
	GUID* GetSPGuid(int iIndex);
	char* GetSPName(int iIndex);
	long GetNumSPs();
	void Destroy();
	void EnumServiceProviders();
	static HRESULT WINAPI cMultiplayer::StaticDirectPlayMessageHandler(
			PVOID pvUserContext,
			DWORD dwMessageId,
			PVOID pMsgBuffer );

	HRESULT WINAPI cMultiplayer::DirectPlayMessageHandler(
			PVOID pvUserContext,
			DWORD dwMessageId,
			PVOID pMsgBuffer );

	BOOL Initialize();
	cMultiplayer();
	virtual ~cMultiplayer();
	DWORD GetRegDWValue(char* lpszValue);
	char* GetRegStringValue(char* lpszValue, char* szBuffer, DWORD dwBufLen);
	void SetRegDWValue(char* lpszValueName, DWORD dwValue);
	void SetRegStringValue(char* lpszValueName, char* lpszValue);

protected:
	DWORD m_dwBaudRate;
	void EnumDevices();
};

#endif // !defined(AFX_CMULTIPLAYER_H__1AA8D187_1064_40A7_A709_B2684653429F__INCLUDED_)

⌨️ 快捷键说明

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