亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? network1.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
#include	"network.h"
#include	"marco.h"


LPDIRECTPLAY            DP_lpIDC=NULL;     // DirectPlay Object
DPID                    DP_dcoID=0;        // 用于存儲本玩家在網絡中ID值
LPGUID                  DP_g_lpGuid;		// 用于保存本游戲的GUID的指針
HANDLE                  DP_dphEvent = NULL;
GUID					DP_pGuid=CB_GUID;	//用于保存本游戲的GUID


//用于保存DirectPlay所提供的網絡服務的信息
struct	EnumCallback			DP_EnumCb[10];


//用于保存在網絡中已經存在的Session的一些信息
struct	EnumSessionCallback		DP_EnumSessionCb[256];


//用于保存網絡對戰中每個玩家的名字和網絡ID值

PlayerInfo				DP_PlayerInformation[MAX_PLAYERS];


HWND                    DP_hWndMain=NULL;//用于保存游戲中所使用的窗口句柄
int	                    DP_IsHost;//用于標示本進程在游戲中是否為主機,留著可能擴充使用

BYTE                    DP_CommBuff[200][BUFFER_MAX_BYTE];//此二維數組用做循環消息隊列,存儲網絡消息
BYTE                    DP_SendMessageBuff[BUFFER_MAX_BYTE];//用于存儲玩家要發送的消息
BYTE					DP_ReadMessage[BUFFER_MAX_BYTE];//用于將消息隊列中的消息讀出并傳給調用者
int						DP_ProviderNO=-1;//用于返回玩家對網絡服務的選擇
int						DP_CreateOrConnect=-1;//用于返回玩家對建立還是聯接游戲的選擇
int						DP_SessionNO=-1;//用于返回玩家對已經創建的游戲Session的選擇
int						DP_MessageQueueStart;//標示消息隊列的起始序號
int						DP_MessageQueueEnd;//標示消息隊列的結束序號
int						DP_MessageQueueFull;//標示消息隊列是否滿了
int						DP_NumPlayer=0;//標示已經有的游戲人數
LPSTR					DP_FullName;//玩家給Session起的名字
LPSTR					DP_NickName;//玩家給本人起的在游戲中的名字
int						DP_ProviderNum=0;

//////////////////////////用于給GAME結構賦值////////////////////////////
extern	struct GAME_STRUCT		GAME;
extern	HWND					hwndGame;//用于發送消息給LHJ!
//////////////////////////用于給GAME結構賦值////////////////////////////


//網絡部分和外部模塊的接口
int		DP_NetworkInterface(int	Action, HWND   MainWndHandle)
{

	int		i=0;


	switch( Action )
		{
			case	DP_INIT_NETWORK_STEP_1:
					i=DP_RemoteCreateStep1( MainWndHandle );
					if( i!=OK )
						{
							return (i);
						}
					break;
			case	DP_INIT_NETWORK_STEP_2:
					i=DP_RemoteCreateStep2();
					if( i!=OK )
						{
							return(i);
						}
					break;
			case	DP_CREATE_SESSION:
					i=DP_CreateSession();
					if( i!=OK )
						{
							return (i);
						}
					break;
			case	DP_GET_SESSION:
					i=DP_GetSession();
					if( i!=OK )
						{
							return (i);
						}
					break;
			case	DP_CONNECT_SESSION:
					i=DP_ConnectSession();
					if( i!=OK )
						{
							return (i);
						}
					break;
			case	DP_SEND_MESSAGE:
					i=DP_SendGameMessages();
					if( i!=OK )
						{
							return (i);
						}
					break;
			case	DP_RECEIVE_MESSAGE:
					i=DP_ReceiveGameMessages();
					if( i!=OK )
						{
							return (i);
						}
					break;
			case	DP_DESTROY_GAME:
					i=DP_DestroyGame();
					if( i!=OK )
						{
							return (i);
						}
					break;
			case	DP_READ_MESSAGE_QUEUE:
					i=DP_ReadMessageQueue();
					if( i!=OK )
						{
							return (i);
						}
					break;
			case	DP_QUERY_OWN_INFORMATION:
					i=DP_QueryOwnInfor();
					return (i);
					break;
			case	DP_QUERY_PROVIDER:
					i=DP_QueryProvider();
					return(i);
					break;
			default		:
					#ifdef	DEBUG
					MessageBox(NULL,"Do not know this input Action!"," Error",MB_OK);
					#endif
					return ( DP_ERROR_INPUT_ACTION );
					break;
		}
	return ( OK );

	
}



//用于在玩家離開游戲時,釋放各指針和恢復一些值的初始值
int DP_DestroyGame( void )
{
	HRESULT hr;
	int		i;
	int		j;

	
	//將DirectPlay的對象指針釋放掉

    if( DP_dcoID != 0 )
    {
        hr = DP_lpIDC->/*lpVtbl->*/DestroyPlayer(//DP_lpIDC,
										 DP_dcoID);

		//判斷是否正確的釋放了DirectPlay的對象指針

		if ( hr!=DP_OK )
			{
				#ifdef	DEBUG
				MessageBox(DP_hWndMain,"Free DirectPlay Object Point Error!"," Error",MB_OK);
				#endif
				return	(DP_ERROR_FREE_DIRECTPLAY_OBJECT);
			}
    }
	DP_SendDestroyPlayers();
	DP_ProviderNO=-1;
	DP_CreateOrConnect=-1;
	DP_SessionNO=-1;
	DP_ProviderNum=0;
	if(DP_lpIDC!=NULL)
		{
			DP_lpIDC->Release();
			DP_lpIDC=NULL;
		}
    DP_dcoID=0;
	for(i=0;i<10;i++)
		{
			DP_EnumCb[i].PointGUID.Data1=0;
			DP_EnumCb[i].PointGUID.Data2=0;
			DP_EnumCb[i].PointGUID.Data3=0;
			DP_EnumCb[i].PointGUID.Data4[0]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[1]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[2]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[3]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[4]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[5]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[6]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[7]=(BYTE)'\0';
			for(j=0;j<256;j++)
				{DP_EnumCb[i].PointDesc[j]=(BYTE)'\0';}
		}
	for(i=0;i<256;i++)
		{
			for(j=0;j<DPSESSIONNAMELEN;j++)
				{
					DP_EnumSessionCb[i].PointDPGameDesc.szSessionName[j]='\0';
				}
			DP_EnumSessionCb[i].PointDPGameDesc.dwSession=0;
		}
	for(i=0;i<MAX_PLAYERS;i++)
		{
			for(j=0;j<MAX_NAME_LENGTH;j++)
				{
					DP_PlayerInformation[i].DP_NickName[j]='\0';
				}
			DP_PlayerInformation[i].DP_dcoID=0;

		}
	DP_hWndMain=NULL;
	DP_IsHost=DP_OTHER;
	for(i=0;i<20;i++)
		{
			for(j=0;j<BUFFER_MAX_BYTE;j++)
				{DP_CommBuff[i][j]=(BYTE)'\0';}
		}
	for(i=0;i<BUFFER_MAX_BYTE;i++)
		{
			DP_SendMessageBuff[i]=(BYTE)'\0';
		}
	for(i=0;i<BUFFER_MAX_BYTE;i++)
		{
			DP_ReadMessage[i]=(BYTE)'\0';
		}
	DP_MessageQueueStart=0;
	DP_MessageQueueEnd=0;
	DP_MessageQueueFull=NO_FULL;
	DP_NumPlayer=0;
	delete (DP_FullName);
	DP_FullName=(LPSTR)NULL;
	delete (DP_NickName);
	DP_NickName=(LPSTR)NULL;

	return ( OK );

}
 


//用于最開始時,獲得系統提供的各種服務的類型
int	 DP_RemoteCreateStep1( HWND   MainWndHandle )
{
   
//  DPSESSIONDESC dpDesc; 
//	HRESULT hr;
	int		status;
	int		i;
	int		j;


//這一部份是對網絡模塊的一些變量進行初始化
	DP_ProviderNO=-1;
	DP_CreateOrConnect=-1;
	DP_SessionNO=-1;
	DP_ProviderNum=0;
//	DP_lpIDC=NULL;
    DP_dcoID=0;
	for(i=0;i<10;i++)
		{
			DP_EnumCb[i].PointGUID.Data1=0;
			DP_EnumCb[i].PointGUID.Data2=0;
			DP_EnumCb[i].PointGUID.Data3=0;
			DP_EnumCb[i].PointGUID.Data4[0]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[1]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[2]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[3]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[4]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[5]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[6]=(BYTE)'\0';
			DP_EnumCb[i].PointGUID.Data4[7]=(BYTE)'\0';
			for(j=0;j<256;j++)
				{DP_EnumCb[i].PointDesc[j]=(BYTE)'\0';}
		}
	for(i=0;i<256;i++)
		{
			for(j=0;j<DPSESSIONNAMELEN;j++)
				{
					DP_EnumSessionCb[i].PointDPGameDesc.szSessionName[j]='\0';
				}
			DP_EnumSessionCb[i].PointDPGameDesc.dwSession=0;
		}
	for(i=0;i<MAX_PLAYERS;i++)
		{
			for(j=0;j<MAX_NAME_LENGTH;j++)
				{
					DP_PlayerInformation[i].DP_NickName[j]='\0';
				}
			DP_PlayerInformation[i].DP_dcoID=0;

		}
	DP_hWndMain=NULL;
	DP_IsHost=DP_OTHER;
	for(i=0;i<20;i++)
		{
			for(j=0;j<BUFFER_MAX_BYTE;j++)
				{DP_CommBuff[i][j]=(BYTE)'\0';}
		}
	for(i=0;i<BUFFER_MAX_BYTE;i++)
		{
			DP_SendMessageBuff[i]=(BYTE)'\0';
		}
	for(i=0;i<BUFFER_MAX_BYTE;i++)
		{
			DP_ReadMessage[i]=(BYTE)'\0';
		}
	DP_MessageQueueStart=0;
	DP_MessageQueueEnd=0;
	DP_MessageQueueFull=NO_FULL;
	DP_NumPlayer=0;

	//將本游戲的窗口句柄(在游戲初始化的時候,由其他模塊生成)保存起來
	//另外還要判斷一下傳過來的窗口句柄是否為空

	if( MainWndHandle==NULL )
		{
			#ifdef	DEBUG
			MessageBox(NULL,"The Windows Handle is empty!"," Error",MB_OK);
			#endif	
			return	(DP_WINDOWS_HANDLE_EMPTY);
		}
	DP_hWndMain=MainWndHandle;	


    // Be sure we aren't already initialized.
	//確定本玩家并不在網絡中

    if (DP_lpIDC != NULL)
    {
		#ifdef	DEBUG
		MessageBox(DP_hWndMain,"You have be in network!"," Error",MB_OK);
		#endif
		DP_lpIDC->Release();
		DP_lpIDC=NULL;
//        return(DP_ALREADY_IN_NETWORK);
    }


	//得到DirectPlay提供的網絡服務類型

    status=DP_GetProvider(DP_hWndMain);
	if(status!=OK)
		{
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"Get Network Service Error!"," Error",MB_OK);
			#endif
			return(DP_ERROR_GET_NETWORK_SERVICE);
		}
	return ( OK );

}




//當玩家對系統提供的各種服務的類型作出了選擇以后,建立此項服務
int	DP_RemoteCreateStep2( void )
{

	if(DP_ProviderNO<0)
		{
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"Input Provider Choice Error!"," Error",MB_OK);
			#endif
			return	(DP_ERROR_INPUT_PROVIDER);
		}

	//建立玩家所選擇的網絡服務
	if (DP_DlgProcChooseProvider(DP_ProviderNO)==FALSE)
		{
			#ifdef DEBUG
			MessageBox(DP_hWndMain,"Choose Network Service Error!","  Error",MB_OK);
			#endif
			return(DP_ERROR_CREATE_NETWORK_SERVICE);
		}


	//對本地ID值進行判斷可能,因為可能存在網絡建立沒有錯誤,但是本地ID值卻仍然為空的現象
	//這步判斷只是為了增加安全性,按理說上面的判斷通過了,就不應該出現本地ID值為空的現象

    if (DP_lpIDC == NULL)
        {
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"Player ID can not create!","  Error",MB_OK);
			#endif
			return(DP_PLAYER_ID_EMPTY);
		}

	return ( OK );
}





/*int	RemoteCreateStep3( void )
{


	//判斷玩家的選擇是建立游戲或者是聯接游戲
	//如果傳過來的參數出現錯誤,則返回出錯信息給調用者

	if((DP_CreateOrConnect!=DP_CREATEGAME)&&(DP_CreateOrConnect!=DP_CONNECTGAME))
		{
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"Choice Create or Connect Error!","Error",MB_OK);
			#endif
			return FALSE;
		}

	//根據玩家的選擇,創建一個Session或者聯入一個Session中

    switch(DP_CreateOrConnect)//CreateGame())
    {

		//創建一個Session
		case DP_CREATEGAME://1:             // Create
			DP_IsHost = TRUE;
	        memset(&dpDesc, 0x00, sizeof(DPSESSIONDESC));
		    dpDesc.dwSize = sizeof(dpDesc);
			dpDesc.dwMaxPlayers = MAX_PLAYERS;
	        dpDesc.dwFlags = DPOPEN_CREATESESSION;
		    dpDesc.guidSession = DP_pGuid;
			strcpy( dpDesc.szSessionName, DP_FullName);
    
			OutputDebugString( "Step 4: Create, Open\n" );
			hr = DP_lpIDC->Open(//DP_lpIDC,
							 &dpDesc);
		    if (hr!= DP_OK)
			{
				DP_lpIDC->Release();
		        DP_lpIDC = NULL;
				#ifdef	DEBUG
				MessageBox(DP_hWndMain,"Create Game Error!"," Error",MB_OK);
				#endif
			    return(FALSE);
	        }
        
		    break;


		//聯入一個Session
		case DP_CONNECTGAME://2:             // Connect
			DP_IsHost = FALSE;
	        DP_g_lpGuid = (LPGUID) &DP_pGuid;

			OutputDebugString( "Step 5: Connect GetGame\n" );
			if (DP_GetGame(DP_hWndMain)==DP_ERROR_ENUM_SESSION)
				{
					#ifdef	DEBUG
					MessageBox(DP_hWndMain,"Enumerate Session Error!"," Error",MB_OK);
					#endif
					return	(DP_ERROR_ENUM_SESSION);
				}
			if(DP_DlgProcSelSession(DP_SessionNO)==FALSE)
				{
					#ifdef	DEBUG
					MessageBox(DP_hWndMain,"Open Session Error!"," Error",MB_OK);
					#endif
					return(DP_ERROR_OPEN_SESSION);
				}

			if (DP_lpIDC == NULL)
				{
					#ifdef	DEBUG
					MessageBox(DP_hWndMain,"Player ID is empty!"," Error",MB_OK);
					#endif
					return(DP_PLAYER_ID_EMPTY);
				}
			break;

		default:
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"Input Session Choice Error!"," Error",MB_OK);
			#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美xxxx老人做受| 亚洲天堂成人在线观看| 欧美日韩免费观看一区三区| 成人av高清在线| 亚洲欧美日韩在线不卡| 欧美一级理论片| 欧美日韩国产a| 欧美日韩三级一区| 欧美怡红院视频| 91久久线看在观草草青青| 成a人片亚洲日本久久| 国产一区 二区| 久久99久久99小草精品免视看| 日本不卡在线视频| 亚洲一级电影视频| 综合久久久久久| 亚洲视频一区在线观看| 国产精品久久久久影院| 中国av一区二区三区| 国产欧美精品国产国产专区| 欧美一区二区福利视频| 日韩精品一区二区三区三区免费 | 日韩电影一二三区| 亚洲高清不卡在线| 五月开心婷婷久久| 日韩电影在线免费看| 亚洲一区av在线| 亚洲成人午夜影院| 日韩在线卡一卡二| 美女脱光内衣内裤视频久久影院| 青青草原综合久久大伊人精品优势| 一区二区在线观看免费| 亚洲一级不卡视频| 日韩中文字幕亚洲一区二区va在线| 五月激情综合色| 亚洲一区二区欧美| 日韩电影一区二区三区| 国内成人免费视频| 成人免费看黄yyy456| 97精品视频在线观看自产线路二| 91成人在线观看喷潮| 欧美日韩你懂得| 欧美大白屁股肥臀xxxxxx| 久久只精品国产| 中文字幕视频一区二区三区久| 中文字幕视频一区| 亚洲午夜私人影院| 韩国精品主播一区二区在线观看| 久久99日本精品| 成人亚洲一区二区一| 在线看国产日韩| 日韩欧美成人一区| 国产精品久久久久久久久动漫| 伊人开心综合网| 美日韩一级片在线观看| 成人久久18免费网站麻豆| 欧洲精品在线观看| 日韩一区和二区| 欧美激情一区二区三区四区| 亚洲午夜三级在线| 国产麻豆91精品| 色综合亚洲欧洲| 91精品国产品国语在线不卡| 欧美国产欧美综合| 婷婷丁香久久五月婷婷| 国产传媒一区在线| 欧美精品自拍偷拍| 国产日韩成人精品| 天堂影院一区二区| 岛国精品一区二区| 91麻豆精品国产91久久久久久久久| 欧美国产精品专区| 亚洲影院在线观看| 成人一区在线看| 欧美欧美欧美欧美首页| 国产精品麻豆网站| 日韩精品成人一区二区在线| 国产激情一区二区三区桃花岛亚洲| 欧美午夜电影在线播放| 中文字幕乱码日本亚洲一区二区| 日韩高清不卡一区| 成人国产精品视频| 精品sm捆绑视频| 亚洲一区影音先锋| 丁香婷婷综合色啪| 欧美成人综合网站| 香蕉久久一区二区不卡无毒影院 | 色综合久久88色综合天天 | 亚洲日本一区二区三区| 久久99精品国产.久久久久久| 99精品久久99久久久久| 久久夜色精品国产欧美乱极品| 亚洲第一成年网| 欧美日韩免费一区二区三区视频| 亚洲综合视频在线| 欧美中文字幕不卡| 亚洲一区中文日韩| 在线观看视频91| 亚洲综合网站在线观看| 日本韩国一区二区| 亚洲一区二区在线播放相泽| 色999日韩国产欧美一区二区| 亚洲欧美国产77777| 99九九99九九九视频精品| 亚洲日本护士毛茸茸| 色综合久久天天| 亚洲高清在线精品| 欧美精品99久久久**| 蜜臀久久99精品久久久久宅男 | 国产午夜精品理论片a级大结局| 国产一区二区伦理片| 中文字幕乱码久久午夜不卡 | 日韩一级片在线观看| 久久99国产精品免费网站| 久久久久久夜精品精品免费| 国产精品综合视频| 中文字幕在线不卡一区| 99精品欧美一区二区蜜桃免费 | 色综合久久66| 天堂午夜影视日韩欧美一区二区| 欧美一级精品大片| 国产成人av一区| 亚洲精品亚洲人成人网| 在线播放91灌醉迷j高跟美女| 久久99精品久久久久| 国产清纯美女被跳蛋高潮一区二区久久w | 免费在线视频一区| 精品国产123| caoporen国产精品视频| 亚洲国产日韩在线一区模特| 欧美一区二区成人6969| 国产精品一区二区在线播放| 亚洲码国产岛国毛片在线| 欧美日韩国产另类一区| 国内精品伊人久久久久av影院| 国产精品系列在线| 欧美酷刑日本凌虐凌虐| 国产福利一区二区三区视频在线| 18欧美亚洲精品| 日韩欧美在线不卡| av动漫一区二区| 免费在线观看视频一区| 国产精品麻豆网站| 欧美日韩在线观看一区二区 | 成人免费观看av| 亚洲综合一区二区| 欧美精品一区二区三区四区 | caoporn国产一区二区| 无码av中文一区二区三区桃花岛| 久久久亚洲精品石原莉奈| 色88888久久久久久影院按摩 | 欧美日韩精品免费观看视频| 国产一区二区三区在线看麻豆| 亚洲乱码中文字幕| 久久综合久久99| 欧美日韩一区二区三区视频| 国产一区二区不卡| 亚洲成人7777| 中文字幕在线播放不卡一区| 欧美成人女星排行榜| 色综合久久九月婷婷色综合| 国产一区二区三区久久久 | 国产精品888| 日韩不卡一区二区三区| 亚洲欧美国产毛片在线| 久久亚洲精精品中文字幕早川悠里| 欧美三区免费完整视频在线观看| 大白屁股一区二区视频| 开心九九激情九九欧美日韩精美视频电影| 亚洲男帅同性gay1069| 久久亚洲综合av| 日韩一级视频免费观看在线| 在线观看视频91| 97se亚洲国产综合自在线不卡| 久久精品久久精品| 亚洲国产精品久久一线不卡| 136国产福利精品导航| 精品少妇一区二区三区| 欧美日韩综合在线| 99九九99九九九视频精品| 国产美女精品在线| 久久99精品久久久久婷婷| 日韩精品一二区| 亚洲成人免费在线| 亚洲一区二区三区三| 亚洲卡通欧美制服中文| 中文字幕国产精品一区二区| 精品国产一区二区三区忘忧草| 欧美妇女性影城| 欧美午夜一区二区| 日本韩国欧美一区二区三区| 91在线观看视频| 91色porny| 色综合久久六月婷婷中文字幕| 99精品视频中文字幕| 成人自拍视频在线观看| 国产精品亚洲一区二区三区在线| 精品亚洲国产成人av制服丝袜| 蜜桃久久av一区| 韩国女主播成人在线|