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

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

?? network.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
#include	"network.h"
#include	"marco.h"
#include	"net_face.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!
extern	struct	DP_NetworkInfor		DP_NetPlayerInfor[5];
extern	BOOL	GAME_bNetPlayerOK[GAME_PLAYER_MAX];
//////////////////////////用于給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;
//    if( DP_dcoID != 0 )
//		{
//			DP_lpIDC->/*lpVtbl->*/DestroyPlayer(//DP_lpIDC,
//											 DP_dcoID);
//		}
    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->Close();
		int	tt=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
			return(DP_ERROR_INPUT_SESSION_CHOICE);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久国产精品影院| 日本一不卡视频| 中文字幕成人av| 久久无码av三级| 久久久久久日产精品| 久久久久久久久久电影| 国产夜色精品一区二区av| 国产偷v国产偷v亚洲高清| 国产欧美一区二区三区在线看蜜臀 | 日韩精品一区在线| 久久只精品国产| 中文av一区二区| 悠悠色在线精品| 亚洲成人精品一区| 日本一道高清亚洲日美韩| 精品在线免费视频| 成人晚上爱看视频| 日本久久一区二区三区| 欧美性感一类影片在线播放| 91精品国产一区二区三区蜜臀| 日韩精品自拍偷拍| 国产女主播视频一区二区| 国产精品国产三级国产a| 亚洲小少妇裸体bbw| 蜜桃久久久久久| 国产白丝网站精品污在线入口| 99久久国产综合色|国产精品| 欧美性一区二区| 精品国产乱码久久久久久浪潮| 亚洲国产激情av| 一区二区三区在线视频播放 | 国产99久久久国产精品潘金网站| 成人福利视频在线看| 在线影院国内精品| 欧美成人精品3d动漫h| 国产精品视频观看| 天天做天天摸天天爽国产一区 | 国产精品中文欧美| 在线日韩av片| 久久久一区二区三区| 亚洲精品美国一| 青青国产91久久久久久| 国产高清精品久久久久| 欧美自拍丝袜亚洲| 久久久一区二区三区| 一区二区三区在线视频免费观看| 久久精品久久久精品美女| 成人一区二区三区视频在线观看 | 夜夜精品浪潮av一区二区三区| 麻豆视频观看网址久久| 99久久精品免费看| 精品毛片乱码1区2区3区| 亚洲欧美日韩系列| 国产一区二区剧情av在线| 欧美图片一区二区三区| 久久影院视频免费| 日韩精品免费专区| 色综合久久88色综合天天6| 日韩欧美国产系列| 亚洲色图欧美在线| 国产乱子轮精品视频| 欧美日韩另类一区| 亚洲色图欧洲色图婷婷| 国产乱理伦片在线观看夜一区| 欧美区视频在线观看| 一区在线观看视频| 国产精品99久| 欧美一级高清片| 亚洲一二三四区不卡| av一二三不卡影片| 精品国产sm最大网站| 午夜私人影院久久久久| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 人禽交欧美网站| 色94色欧美sute亚洲13| 国产欧美一二三区| 激情综合网最新| 欧美一区二区三区四区高清| 一区二区三区日韩| 波多野结衣精品在线| 久久久久久亚洲综合影院红桃| 男人操女人的视频在线观看欧美 | 亚洲男人天堂av| 国产91高潮流白浆在线麻豆 | 国产精品嫩草影院com| 亚洲自拍都市欧美小说| 成人视屏免费看| 久久久久国产成人精品亚洲午夜 | 欧美综合在线视频| 26uuu色噜噜精品一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 在线精品视频一区二区| 亚洲激情在线激情| 99久久精品国产精品久久| 国产日韩欧美麻豆| 成人综合激情网| 国产亚洲精品资源在线26u| 国产毛片精品国产一区二区三区| 精品少妇一区二区三区在线播放 | 国产精品123| www一区二区| 国产成人综合亚洲91猫咪| 久久这里只有精品首页| 国产盗摄精品一区二区三区在线| 欧美精品一区男女天堂| 精品一区二区影视| 久久久一区二区三区| 国产91丝袜在线播放九色| 中文字幕不卡的av| av成人免费在线观看| 日韩理论片中文av| 在线观看国产精品网站| 午夜精品久久久久久久久久| 日韩一区二区在线看| 精品制服美女久久| 国产精品色婷婷久久58| 99国产精品国产精品毛片| 亚洲欧美经典视频| 欧美日韩精品欧美日韩精品一| 日韩av二区在线播放| 日韩三级视频在线观看| 国产成人av一区二区| 国产精品久久久久桃色tv| 一本一道久久a久久精品| 亚洲18色成人| 久久免费视频一区| 色综合久久88色综合天天6| 天天av天天翘天天综合网色鬼国产| 日韩免费一区二区| 国产a视频精品免费观看| 亚洲三级在线看| 欧美福利电影网| 国产v日产∨综合v精品视频| 一区二区三区精品在线| 欧美电影免费观看高清完整版在线| 成人精品在线视频观看| 亚洲女女做受ⅹxx高潮| 日韩免费看的电影| 不卡高清视频专区| 日本欧美一区二区三区| 国产人成一区二区三区影院| 欧美在线高清视频| 国产一区二区在线观看视频| 亚洲欧美国产三级| 日韩一区二区三区视频在线| 成人国产一区二区三区精品| 亚洲国产精品影院| 久久精品免费看| 一二三四区精品视频| 欧美一区二区国产| 91麻豆精品视频| 久久精品二区亚洲w码| 亚洲欧美一区二区三区国产精品| 91精品国产一区二区三区 | 欧美高清激情brazzers| 成人av资源网站| 蜜臀av性久久久久av蜜臀妖精| 亚洲欧美在线aaa| 精品裸体舞一区二区三区| 欧美综合欧美视频| 成人午夜视频在线观看| 美女一区二区视频| 一区二区不卡在线播放 | 亚洲欧美日韩在线播放| 精品动漫一区二区三区在线观看| 91豆麻精品91久久久久久| 国产精品99久久不卡二区| 亚洲18影院在线观看| 亚洲天堂免费看| 国产日韩欧美高清| 日韩欧美一级在线播放| 欧美在线一二三四区| 丁香五精品蜜臀久久久久99网站| 日本欧美大码aⅴ在线播放| 亚洲乱码国产乱码精品精可以看 | 日韩一区二区三区在线视频| 91在线视频网址| 国产成人精品三级| 久久精品国产一区二区三| 亚洲视频一区在线| 国产精品入口麻豆九色| 久久午夜老司机| 精品精品国产高清一毛片一天堂| 欧美精品色综合| 欧美日韩一区二区在线观看| 91免费精品国自产拍在线不卡| 国产二区国产一区在线观看| 麻豆91免费观看| 日本午夜精品视频在线观看| 亚洲一线二线三线久久久| 亚洲精品日产精品乱码不卡| 国产精品久久久久久久久免费樱桃| 久久品道一品道久久精品| 精品少妇一区二区三区在线播放| 欧美一级高清片| 欧美日韩国产高清一区| 欧美精品自拍偷拍| 欧美精品久久一区| 欧美一区二区三区思思人| 欧美一级高清片|