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

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

?? network1.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
			return(DP_ERROR_INPUT_SESSION_CHOICE);
    }

	OutputDebugString( "Step 9: CreatePlayer\n" );
    if ((hr = DP_lpIDC->CreatePlayer(//DP_lpIDC, 
								  &DP_dcoID, DP_NickName,
								  "CB_Player", &DP_dphEvent)) != DP_OK)
    {
        DP_lpIDC->Close();
        DP_lpIDC->Release();
        DP_lpIDC = NULL;
        return(FALSE);
    }
    
    return(TRUE);

}*/


//此模塊是建立Session
int	DP_CreateSession( void )
{
	DPSESSIONDESC dpDesc; 
	HRESULT hr;


	if( DP_FullName==NULL )
		{
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"The Session Name is empty!"," Error",MB_OK);
			#endif
			return ( DP_SESSION_NAME_EMPTY );
		}
	if( DP_NickName==NULL )
		{
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"The Friendly Name is empty!"," Error",MB_OK);
			#endif
			return ( DP_FRIENDLY_NAME_EMPTY );
		}
	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" );
	//用于創建一個Session,只需用Open函數
	//將用于描述Session的結構的dwFlags設為DPOPEN_CREATESESSION
	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
			switch ( hr )
				{
					case	DPERR_INVALIDPARAMS:	
							return( DP_ERROR_INVALID_PARAMS );
							break;
					case	DPERR_GENERIC:
							return( DP_ERROR_GENERIC );
							break;
					case	DPERR_UNAVAILABLE:
							return( DP_ERROR_UNAVAILABLE );
							break;
					case	DPERR_UNSUPPORTED:
							return( DP_ERROR_UNSUPPORTED );
							break;
					case	DPERR_USERCANCEL:
							return( DP_ERROR_USER_CANCEL );
							break;
					case	DPERR_ACTIVEPLAYERS:
							return( DP_ERROR_ACTIVE_PLAYERS );
							break;
					case	DPERR_INVALIDOBJECT:
							return( DP_ERROR_INVALID_OBJECT );
							break;
				}


		    return( DP_ERROR_CREATE_SESSION );
		}

	//創建一個Player,其中的DP_NickName是玩家給自己起的名字
	if ((hr = DP_lpIDC->CreatePlayer(//DP_lpIDC, 
								  &DP_dcoID, DP_NickName,
								  "CB_Player", &DP_dphEvent)) != DP_OK)
		{
			DP_lpIDC->Close();
	        DP_lpIDC->Release();
		    DP_lpIDC = NULL;
			switch( hr )
				{
					case	DPERR_CANTCREATEPLAYER:
							return( DP_ERROR_NOT_CREATE_PLAYER );
							break;
					case	DPERR_NOCONNECTION:
							return( DP_ERROR_NOT_CONNECT );
							break;
					case	DPERR_CANTADDPLAYER:
							return( DP_NOT_ADD_PLAYERS );
							break;
					case	DPERR_INVALIDPARAMS:
							return( DP_ERROR_INVALID_PARAMS );
							break;
					case	DPERR_GENERIC:
							return( DP_ERROR_GENERIC );
							break;
					case	DPERR_INVALIDOBJECT:
							return( DP_ERROR_INVALID_OBJECT );
							break;
				}

			return( DP_ERROR_CREATE_PLAYER );
		}
	DP_IsHost = DP_HOST;
	DP_PlayerInformation[DP_NumPlayer].DP_dcoID=DP_dcoID;
	memcpy(DP_PlayerInformation[DP_NumPlayer].DP_NickName,DP_NickName,strlen((char *)(DP_NickName))+1);
	DP_NumPlayer++;
/*	if(DP_SendAddPlayers()!=OK)
		{
			DP_lpIDC->Close();
	        DP_lpIDC->Release();
		    DP_lpIDC = NULL;
			return( DP_ERROR_SEND_MESSAGE );
		}*/
	return ( OK );
}



//此模塊是用來得到已經在網絡中的Session信息
int		DP_GetSession( void )
{

//	HRESULT hr;
//	DP_IsHost = FALSE;
	DP_g_lpGuid = (LPGUID) &DP_pGuid;

	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);
		}
	return	( OK );

}




//根據玩家的選擇,確定聯接到哪個Session上
int		DP_ConnectSession( void )
{

	HRESULT hr;


	if(DP_SessionNO<0)
		{
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"Input Session Choice Error!"," Error",MB_OK);
			#endif
			return (DP_ERROR_INPUT_SESSION_CHOICE);
		}

	//通過玩家的選擇,打開一個Session
	if(DP_DlgProcSelSession(DP_SessionNO)!=OK)
		{
			#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);
		}

	//創建一個Player,其中的DP_NickName是玩家給自己起的名字
	if ((hr = DP_lpIDC->CreatePlayer(//DP_lpIDC, 
							  &DP_dcoID, DP_NickName,
							  "CB_Player", &DP_dphEvent)) != DP_OK)
		{
			DP_lpIDC->Close();
			DP_lpIDC->Release();
		    DP_lpIDC = NULL;
			switch( hr )
				{
					case	DPERR_CANTCREATEPLAYER:
							return( DP_ERROR_NOT_CREATE_PLAYER );
							break;
					case	DPERR_NOCONNECTION:
							return( DP_ERROR_NOT_CONNECT );
							break;
					case	DPERR_CANTADDPLAYER:
							return( DP_NOT_ADD_PLAYERS );
							break;
					case	DPERR_INVALIDPARAMS:
							return( DP_ERROR_INVALID_PARAMS );
							break;
					case	DPERR_GENERIC:
							return( DP_ERROR_GENERIC );
							break;
					case	DPERR_INVALIDOBJECT:
							return( DP_ERROR_INVALID_OBJECT );
							break;
				}


			return( DP_ERROR_CREATE_PLAYER );
		}
	DP_IsHost = DP_JOIN;
//	DP_PlayerInformation[DP_NumPlayer].DP_dcoID=DP_dcoID;
//	memcpy(DP_PlayerInformation[DP_NumPlayer].DP_NickName,DP_NickName,strlen((char *)(DP_NickName))+1);
//	DP_NumPlayer++;
	if(DP_SendAddPlayers( DP_SEND_TO_SERVER )!=OK)
		{
			DP_lpIDC->Close();
	        DP_lpIDC->Release();
		    DP_lpIDC = NULL;
			return( DP_ERROR_SEND_MESSAGE );
		}
	return	( OK );

}



//此模塊用來得到系統提供的服務類型
int DP_GetProvider(HWND hWndCtl)
{
	HRESULT hr;


	hr=DirectPlayEnumerate(DP_EnumSP,(LPVOID)hWndCtl);
	if(hr!=DP_OK)
		{
			#ifdef	DEBUG
			MessageBox(DP_hWndMain,"I can not get provider!"," Error",MB_OK);
			#endif
			switch( hr )
				{
					case	DPERR_EXCEPTION:
							return( DP_ERROR_EXCEPTION );
							break;
					case	DPERR_GENERIC:
							return( DP_ERROR_GENERIC );
							break;
				}
			return	(DP_ERROR_GET_PROVIDER);
		}
	return ( OK );

}


//從網絡中得到所有的Session信息
int DP_GetGame(HWND hWndCtl)
{

	    DPSESSIONDESC dpDesc;
		HRESULT hr;

 
        memset(&dpDesc, 0x00, sizeof(DPSESSIONDESC));
        dpDesc.dwSize = sizeof(dpDesc);
        dpDesc.guidSession = *DP_g_lpGuid;
        // enum sessions with 5 second timeout
		#ifdef	DDEBUG
		OutputDebugString( "Step 7: EnumSessions\n" );
		#endif
        hr=DP_lpIDC->/*lpVtbl->*/EnumSessions(//DP_lpIDC, 
											&dpDesc, (DWORD)1000, 
											DP_EnumSession, (LPVOID) hWndCtl, 
											(DWORD)NULL);
		if (hr!=DP_OK)
			{

				switch( hr )
					{
						case	DPERR_INVALIDPARAMS:
								return( DP_ERROR_INVALID_PARAMS );
								break;
						case	DPERR_INVALIDOBJECT:
								return( DP_ERROR_INVALID_OBJECT );
								break;
					}			
				return	(DP_ERROR_ENUM_SESSION);
			}
		return( OK );
}


//創建玩家選擇的服務類型
BOOL  DP_DlgProcChooseProvider(int	i)
{
	HRESULT hr;

	if (DP_lpIDC!=NULL)
		{
			DP_lpIDC->Release();
			DP_lpIDC=NULL;
//			return FALSE;
		}
//	DP_lpIDC=NULL;
	hr=DirectPlayCreate((LPGUID)&DP_EnumCb[i].PointGUID, &DP_lpIDC, NULL);
    switch(hr)
		{
			case	DPERR_GENERIC:
					return( DP_ERROR_GENERIC );
					break;
			case	DPERR_EXCEPTION:
					return( DP_ERROR_EXCEPTION );
					break;
			case	DPERR_UNAVAILABLE:
					return( DP_ERROR_UNAVAILABLE );
					break;
		}
	return TRUE;
	
}


//此函數用做EnumSession的回調函數
BOOL FAR PASCAL DP_EnumSession(LPDPSESSIONDESC lpDPGameDesc, LPVOID lpContext, 
                            LPDWORD lpdwTimeOut, DWORD dwFlags)
{
	static	int	i=0;

	if(DP_EnumSessionCb[0].PointDPGameDesc.dwSession==0)
		{i=0;}
    if( dwFlags & DPESC_TIMEDOUT )
    {
        return FALSE;       // don't try again
    }
	if(strcpy(DP_EnumSessionCb[i].PointDPGameDesc.szSessionName,
								lpDPGameDesc->szSessionName)==0)
								
		{return FALSE;}
	DP_EnumSessionCb[i].PointDPGameDesc.dwSession=lpDPGameDesc->dwSession;
	i++;
	return	(TRUE);

}


//此函數用做DirectPlayEnumerate的回調函數
BOOL FAR PASCAL DP_EnumSP(LPGUID lpGuid, LPSTR lpDesc, DWORD dwMajorVersion,
                       DWORD dwMinorVersion, LPVOID lpv)
{
//	static	int	i=0;


	//if(memcpy(&DP_EnumCb[i].PointGUID,lpGuid,sizeof(LPGUID))==0)
	//	{return FALSE;}
	DP_EnumCb[DP_ProviderNum].PointGUID.Data1=lpGuid->Data1;
	DP_EnumCb[DP_ProviderNum].PointGUID.Data2=lpGuid->Data2;
	DP_EnumCb[DP_ProviderNum].PointGUID.Data3=lpGuid->Data3;
	DP_EnumCb[DP_ProviderNum].PointGUID.Data4[0]=(BYTE)lpGuid->Data4[0];
	DP_EnumCb[DP_ProviderNum].PointGUID.Data4[1]=(BYTE)lpGuid->Data4[1];
	DP_EnumCb[DP_ProviderNum].PointGUID.Data4[2]=(BYTE)lpGuid->Data4[2];
	DP_EnumCb[DP_ProviderNum].PointGUID.Data4[3]=(BYTE)lpGuid->Data4[3];
	DP_EnumCb[DP_ProviderNum].PointGUID.Data4[4]=(BYTE)lpGuid->Data4[4];
	DP_EnumCb[DP_ProviderNum].PointGUID.Data4[5]=(BYTE)lpGuid->Data4[5];
	DP_EnumCb[DP_ProviderNum].PointGUID.Data4[6]=(BYTE)lpGuid->Data4[6];
	DP_EnumCb[DP_ProviderNum].PointGUID.Data4[7]=(BYTE)lpGuid->Data4[7];
	if(memcpy(&DP_EnumCb[DP_ProviderNum].PointDesc,lpDesc,strlen(lpDesc)+1)==0)
		{return FALSE;}
	DP_ProviderNum++;
	return	TRUE;
}



//此函數是用來打開玩家指定的Session
int	DP_DlgProcSelSession (int i)
{
    DPSESSIONDESC dpDesc;
    HRESULT hr = DP_OK + 10;


	memset(&dpDesc, 0x00, sizeof(DPSESSIONDESC));
	dpDesc.dwSize       = sizeof(dpDesc);
	dpDesc.guidSession  = *DP_g_lpGuid;
	dpDesc.dwFlags      = DPOPEN_OPENSESSION;
	dpDesc.dwSession    = DP_EnumSessionCb[i].PointDPGameDesc.dwSession;
	#ifdef	DEBUG
	OutputDebugString( "Step 8: Fall through, Open \n" );
	#endif	
	hr = DP_lpIDC->/*lpVtbl->*/Open(//DP_lpIDC, 
								 &dpDesc);

	if (hr== DP_OK)
		{
			return	(OK);
		}
	if (hr != DP_OK)
		{
			DP_lpIDC->/*lpVtbl->*/Close(/*DP_lpIDC*/);
			DP_lpIDC->/*lpVtbl->*/Release(/*DP_lpIDC*/);
			DP_lpIDC = NULL;
			switch ( hr )
				{
					case	DPERR_INVALIDPARAMS:	
							return( DP_ERROR_INVALID_PARAMS );
							break;
					case	DPERR_GENERIC:
							return( DP_ERROR_GENERIC );
							break;
					case	DPERR_UNAVAILABLE:
							return( DP_ERROR_UNAVAILABLE );
							break;
					case	DPERR_UNSUPPORTED:
							return( DP_ERROR_UNSUPPORTED );
							break;
					case	DPERR_USERCANCEL:
							return( DP_ERROR_USER_CANCEL );
							break;
					case	DPERR_ACTIVEPLAYERS:
							return( DP_ERROR_ACTIVE_PLAYERS );
							break;
					case	DPERR_INVALIDOBJECT:
							return( DP_ERROR_INVALID_OBJECT );
							break;
				}

			return (OK);
		}

	return(TRUE);
}


//該函數是用來接收網絡中的消息
int	 DP_ReceiveGameMessages( void )
{
    DPID                fromID, dcoReceiveID;
    DWORD               nBytes;
	int					i;
	int					j;

    if ( DP_lpIDC )
    {
        // read all messages in queue
		if(DP_MessageQueueFull==FULL)
			{
				#ifdef	DEBUG
				MessageBox(DP_hWndMain,"Message Queue Full!"," Error",MB_OK);
				#endif
				return  (DP_MESSAGE_QUEUE_FULL);
			}
        HRESULT status;
        nBytes = BUFFER_MAX_BYTE;
        status = DP_lpIDC->/*lpVtbl->*/Receive(// DP_lpIDC,
						                        &fromID,
												&dcoReceiveID,
												DPRECEIVE_ALL,
												DP_ReadMessage,
												&nBytes);
		if((status==DP_OK)&&(fromID!=DP_dcoID))
			{
				if(((i=DP_AddPlayers(fromID))==DP_NOT_ADD_PLAYER)&&(j=DP_DestroyPlayers(fromID))==DP_NOT_DESTROY_PLAYER)
					{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九九久久精品视频| 国产精品少妇自拍| 三级久久三级久久久| 99视频有精品| 一个色在线综合| 制服丝袜亚洲精品中文字幕| 日韩av一区二区在线影视| 91精品国产欧美日韩| 免费欧美在线视频| 久久色.com| 成人激情视频网站| 亚洲国产日日夜夜| 欧美成人r级一区二区三区| 国产精品99精品久久免费| 国产精品免费视频观看| 色婷婷av一区二区三区gif| 日韩精品成人一区二区三区| 亚洲精品在线观看网站| 成人av免费观看| 日韩精品欧美精品| 国产亚洲成年网址在线观看| 91网站视频在线观看| 偷窥少妇高潮呻吟av久久免费| 日韩视频一区二区在线观看| 粉嫩13p一区二区三区| 亚洲一区免费视频| 精品av久久707| 91网页版在线| 国产一区免费电影| 亚洲中国最大av网站| 26uuu亚洲| 欧美亚洲一区二区在线观看| 狠狠狠色丁香婷婷综合久久五月| 17c精品麻豆一区二区免费| 欧美日本一区二区三区| 国产精品一区二区在线播放| 亚州成人在线电影| 国产精品毛片无遮挡高清| 欧美电影在哪看比较好| 成人网男人的天堂| 日韩国产精品久久| 亚洲免费视频中文字幕| 精品久久久久久久人人人人传媒| 91福利小视频| 国产成人精品一区二| 日韩和欧美的一区| 综合网在线视频| 久久综合国产精品| 91精品国产综合久久精品麻豆 | 欧美性生活久久| 国产成人自拍在线| 老司机精品视频线观看86| 亚洲一区中文日韩| 日韩一区在线播放| 国产亚洲午夜高清国产拍精品| 欧美高清视频不卡网| 91久久国产综合久久| 成人一道本在线| 国精品**一区二区三区在线蜜桃| 午夜影院在线观看欧美| 亚洲蜜桃精久久久久久久| 国产精品网站在线| 久久久99精品免费观看不卡| 精品日韩欧美在线| 日韩午夜电影av| 69av一区二区三区| 欧美日韩高清在线播放| 精品视频在线免费观看| 在线视频国产一区| 色婷婷激情久久| 在线中文字幕一区| 91丨国产丨九色丨pron| 不卡免费追剧大全电视剧网站| 国内精品久久久久影院薰衣草 | 亚洲欧美一区二区在线观看| 国产精品每日更新| 亚洲国产成人一区二区三区| 国产三级三级三级精品8ⅰ区| 日韩欧美成人激情| 日韩精品一区二| 欧美精品一区二区三区久久久| 精品国产欧美一区二区| 精品久久久久久亚洲综合网| 欧美xxxxx裸体时装秀| 亚洲精品在线一区二区| 亚洲精品一区二区三区四区高清| www久久久久| 亚洲国产激情av| 一区二区三区在线观看国产| 亚洲午夜影视影院在线观看| 日韩精品成人一区二区三区| 美女诱惑一区二区| 国产乱色国产精品免费视频| 国产.欧美.日韩| 91免费看视频| 在线不卡的av| 国产亚洲精品免费| 亚洲乱码中文字幕综合| 亚洲小少妇裸体bbw| 奇米一区二区三区| 国产一区二区三区美女| 成人午夜av在线| 欧美日韩久久一区二区| 精品国产一二三区| 亚洲国产精品av| 亚洲成人自拍一区| 激情综合五月天| eeuss影院一区二区三区| 欧美日韩中文字幕精品| 精品国产sm最大网站免费看| 国产精品卡一卡二卡三| 亚洲福利视频一区| 国产福利91精品| 欧美性受xxxx| 国产精品麻豆一区二区| 日韩和欧美的一区| a美女胸又www黄视频久久| 91麻豆精品国产91久久久久| 国产精品久线观看视频| 日本aⅴ亚洲精品中文乱码| 国产精品88888| 欧美疯狂性受xxxxx喷水图片| 欧美激情一区在线| 视频一区视频二区中文| 91亚洲资源网| 久久久美女艺术照精彩视频福利播放 | 国产成人免费网站| 欧美色中文字幕| 国产午夜亚洲精品不卡| 亚洲电影激情视频网站| 成人一区二区在线观看| 91精品国产综合久久久蜜臀图片 | 亚洲成精国产精品女| 国产在线精品免费| 欧美日韩国产高清一区| 1024国产精品| 国产精品18久久久久久久久 | 国产日韩欧美精品在线| 性久久久久久久久久久久| av亚洲精华国产精华精| 久久在线免费观看| 日本系列欧美系列| 欧美在线观看视频一区二区三区| 久久久夜色精品亚洲| 天天射综合影视| 欧洲一区在线电影| 最新国产の精品合集bt伙计| 国产精品影视在线| 日韩精品在线网站| 日韩国产一区二| 欧美色倩网站大全免费| 一区二区三区毛片| 一本一道综合狠狠老| 中文字幕一区二区三区四区不卡| 国产福利一区二区三区视频在线| 欧美草草影院在线视频| 另类欧美日韩国产在线| 欧美一区二区三区视频免费| 亚洲成人午夜影院| 日韩一区二区三区精品视频| 一区二区三区四区中文字幕| 色悠久久久久综合欧美99| 国产精品家庭影院| 99riav久久精品riav| 中文字幕不卡在线观看| 盗摄精品av一区二区三区| 欧美激情在线观看视频免费| 国产成人在线看| 欧美激情一区二区三区蜜桃视频| 国产精品白丝jk白祙喷水网站| 久久久国产午夜精品| 国产91在线观看| 国产欧美日本一区视频| 成人国产精品视频| 日韩一区欧美小说| 欧美色综合网站| 麻豆专区一区二区三区四区五区| 欧美一级日韩一级| 另类欧美日韩国产在线| 精品对白一区国产伦| 国产大片一区二区| 中文字幕日本不卡| 欧美日韩一区成人| 美国一区二区三区在线播放| 精品国产免费久久| 国产成人免费在线| 亚洲在线中文字幕| 日韩三级伦理片妻子的秘密按摩| 韩国毛片一区二区三区| 亚洲欧美一区二区在线观看| 欧美色图免费看| 久久精品99久久久| 国产精品福利电影一区二区三区四区| 99在线视频精品| 午夜国产不卡在线观看视频| 91精品国产综合久久小美女| 国产成人av一区二区三区在线| 专区另类欧美日韩| 91精品国产手机| 成人av网在线|