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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cmultiplayer.cpp

?? 一個(gè)2D的賽車游戲 在VC下運(yùn)行 開發(fā)庫DIRECTX8.1以上
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
// CMAIN LIB - APPLICATION AND DIRECT WRAPPER
//
// Written by Mauricio Teichmann Ritter
//
// Copyright (C) 2002, Brazil. All rights reserved.
// 
//


// cMultiplayer.cpp: implementation of the cMultiplayer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "cMultiplayer.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


cMultiplayer::cMultiplayer()
{
	m_pdnSPInfo = NULL;
	m_pdnDeviceInfo = NULL;
	m_pDP = NULL;
	m_pDeviceAddress = NULL;
	m_iSPIndex = 0;
	m_iSerialDevice = NULL;
	m_iModemDevice = NULL;
	m_dwTcpPort = NULL;
	m_dwBaudRate = NULL;
	m_sFlowControl[0] = NULL;
	m_sParity[0] = NULL;
	m_sStopBits[0] = NULL;

	m_pHostList = NULL;
	m_iNumHosts = 0;
	m_bCanConnect = TRUE;
	m_iPlayerType = 0;
	m_dpnidHost = 0;
	m_dpnidSelf = 0;
	m_pDP = NULL;

	m_pHandler = NULL;


}

cMultiplayer::~cMultiplayer()
{

}

BOOL cMultiplayer::Initialize()
{
	HRESULT	hr;

	hr = CoCreateInstance( CLSID_DirectPlay8Peer, NULL, 
									   CLSCTX_INPROC_SERVER,
									   IID_IDirectPlay8Peer, 
									   (LPVOID*) &m_pDP);
	if(hr != 0)
	{
#ifdef _DEBUG
		Log("HRES: %d - %s\n", hr, DXGetErrorString8(hr));
#endif
		return FALSE;
	}

	// Initialize DirectPlay
	hr = m_pDP->Initialize(this, StaticDirectPlayMessageHandler, 0);

	if(hr != 0)
	{
#ifdef _DEBUG
	Log("HRES: %d - %s\n", hr, DXGetErrorString8(hr));
#endif
		return FALSE;
	}

	m_lstPlayers.clear();

	InitializeCriticalSection(&m_csMessages);

	m_dpnidSelf = 0;
	m_dpnidHost = 0;

	return TRUE;
}

HRESULT WINAPI cMultiplayer::StaticDirectPlayMessageHandler(
  PVOID pvUserContext,
  DWORD dwMessageId,
  PVOID pMsgBuffer )
{
	return ((cMultiplayer*)pvUserContext)->DirectPlayMessageHandler(pvUserContext, dwMessageId, pMsgBuffer);
}

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

	switch( dwMessageId )
	{
	case DPN_MSGID_CREATE_PLAYER:
		DPNMSG_CREATE_PLAYER* pCreatePlayer;
		pCreatePlayer = (DPNMSG_CREATE_PLAYER*)pMsgBuffer;

		if(m_iPlayerType == PLAYERTYPE_HOST)
		{

			PLAYER_INFO*		pPlayerInfo;
			pPlayerInfo = new PLAYER_INFO;
			pPlayerInfo->dpnidPlayer = pCreatePlayer->dpnidPlayer;

			PLAYERINFO_VECTOR::iterator theIterator;
			BOOL						bAdd = TRUE;

			for(theIterator = m_lstPlayers.begin();theIterator != m_lstPlayers.end();theIterator++)
			{
				if( (*theIterator)->dpnidPlayer == pCreatePlayer->dpnidPlayer)
					bAdd = FALSE;
			}

			if(bAdd)
			{
				if(m_dpnidSelf == 0)
					m_dpnidSelf = pCreatePlayer->dpnidPlayer;
				else
					m_lstPlayers.push_back(pPlayerInfo);

		#ifdef _DEBUG
				Log("DPN_MSGID_CREATE_PLAYER: %d\n", pCreatePlayer->dpnidPlayer);
		#endif
			}
		}
		else
		{
			if(m_dpnidSelf == 0)
				m_dpnidSelf = pCreatePlayer->dpnidPlayer;
	#ifdef _DEBUG
			Log("DPN_MSGID_CREATE_PLAYER SELF: %d\n", m_dpnidSelf);
	#endif
			FindHost();
		}
		break;

	case DPN_MSGID_CONNECT_COMPLETE:
		DPNMSG_CONNECT_COMPLETE* pConnect;
		pConnect = (DPNMSG_CONNECT_COMPLETE*)pMsgBuffer;
		//m_iMyId = *((int*)pConnect->pvApplicationReplyData);
#ifdef _DEBUG
		Log("DPN_MSGID_CONNECT_COMPLETE\n");
#endif
		break;
	case DPN_MSGID_INDICATE_CONNECT:
#ifdef _DEBUG
		Log("DPN_MSGID_INDICATE_CONNECT: %d\n", m_bCanConnect);
#endif			

		if(m_bCanConnect)
			return DPN_OK;
		else
			return DPNERR_GENERIC;
		break;
	case DPN_MSGID_ENUM_HOSTS_QUERY:
		return DPN_OK;
		break;
    case DPN_MSGID_ENUM_HOSTS_RESPONSE:
        PDPNMSG_ENUM_HOSTS_RESPONSE     pEnumHostsResponseMsg;
        const DPN_APPLICATION_DESC*     pAppDesc;
        HOST_NODE*                      pHostNode;
        WCHAR*                          pwszSession;

		pwszSession = NULL;
		pHostNode = NULL;
    
        pEnumHostsResponseMsg = (PDPNMSG_ENUM_HOSTS_RESPONSE) pMsgBuffer;
        pAppDesc = pEnumHostsResponseMsg->pApplicationDescription;
    
        // Insert each host response if it isn't already present
        //EnterCriticalSection(&g_csHostList);

    
        for (pHostNode = m_pHostList; pHostNode; pHostNode = pHostNode->pNext)
        {
            if( pAppDesc->guidInstance == pHostNode->pAppDesc->guidInstance)
            {
                // This host is already in the list
                pHostNode = NULL;
                goto Break_ENUM_HOSTS_RESPONSE;
            }
        }
    
        // This host session is not in the list then so insert it.
        pHostNode = new HOST_NODE;
        if( pHostNode == NULL)
        {
            goto Break_ENUM_HOSTS_RESPONSE;
        }
    
        ZeroMemory(pHostNode, sizeof(HOST_NODE));
    
        // Copy the Host Address
        if( FAILED( pEnumHostsResponseMsg->pAddressSender->Duplicate(&pHostNode->pHostAddress ) ) )
        {
            goto Break_ENUM_HOSTS_RESPONSE;
        }
    
        pHostNode->pAppDesc = new DPN_APPLICATION_DESC;
    
        if( pHostNode == NULL)
        {
            goto Break_ENUM_HOSTS_RESPONSE;
        }
    
        ZeroMemory(pHostNode->pAppDesc, sizeof(DPN_APPLICATION_DESC));
        memcpy(pHostNode->pAppDesc, pAppDesc, sizeof(DPN_APPLICATION_DESC));
    
        // Null out all the pointers we aren't copying
        pHostNode->pAppDesc->pwszSessionName = NULL;
        pHostNode->pAppDesc->pwszPassword = NULL;
        pHostNode->pAppDesc->pvReservedData = NULL;
        pHostNode->pAppDesc->dwReservedDataSize = 0;
        pHostNode->pAppDesc->pvApplicationReservedData = NULL;
        pHostNode->pAppDesc->dwApplicationReservedDataSize = 0;
    
		m_iNumHosts++;
        if( pAppDesc->pwszSessionName)
        {
            pwszSession = new WCHAR[wcslen(pAppDesc->pwszSessionName) + 1];
        
            if( pwszSession)
            {
                wcscpy(pwszSession, pAppDesc->pwszSessionName);
            }
        }
    
        pHostNode->pwszSessionName = pwszSession;
    
        // Insert it onto the front of the list
        pHostNode->pNext = m_pHostList;// ? m_pHostList->pNext : NULL;
        m_pHostList = pHostNode;
        pHostNode = NULL;
    
Break_ENUM_HOSTS_RESPONSE:

        //LeaveCriticalSection(&g_csHostList);       

        if( pHostNode )
        {
            if(pHostNode->pHostAddress)
				pHostNode->pHostAddress->Release();

            if(pHostNode->pAppDesc)
			{
				delete[] pHostNode->pAppDesc;
			}
            delete pHostNode;
        }
        break;

	 case DPN_MSGID_RECEIVE:
        {
            PDPNMSG_RECEIVE     pMsg;
			
			PLAYER_MESSAGE*		pPlayerMessage;
			pMsg = (PDPNMSG_RECEIVE) pMsgBuffer;
			//int iTmp;

			pPlayerMessage = (PLAYER_MESSAGE*) pMsg->pReceiveData;

#ifdef _DEBUG
			//Log("DPN_MSGID_RECEIVE - dwSize:%d  dwDataSize: %d Type %d\n", pMsg->dwSize, pMsg->dwReceiveDataSize, pPlayerMessage->m_iType);
#endif	

			if(m_pHandler)
			{
				m_pHandler->IncomingMessage(pPlayerMessage->m_iType, pMsg->dpnidSender, pMsg->pReceiveData+sizeof(int), pMsg->dwReceiveDataSize-sizeof(int));
			}
            break;
        }

	}

	return DPN_OK;
}



void cMultiplayer::EnumServiceProviders()
{
	HRESULT	hr;

    DWORD                       dwSize          = 0;


    // 確定需要的buffer大小
    hr = m_pDP->EnumServiceProviders(NULL, NULL, NULL, &dwSize, &m_dwNumSP, 0);

	m_pdnSPInfo = (DPN_SERVICE_PROVIDER_INFO*) new BYTE[dwSize];
#ifdef _DEBUG
	Log("SP Size: %d NumSP: %d\n", dwSize, m_dwNumSP);
#endif
    //Fill the buffer with service provider information
    hr = m_pDP->EnumServiceProviders(NULL, NULL, m_pdnSPInfo, &dwSize, &m_dwNumSP, 0);
	
	DWORD	dwSp;

	dwSp = GetRegDWValue("ServiceProvider");
	if(dwSp != NULL)
	{
		int i = 0;
		SetRegDWValue("ServiceProvider", (DWORD) i);

		for(i=0;i<(int)m_dwNumSP;i++)
		{
			if(*GetSPGuid(i) == CLSID_DP8SP_TCPIP)
			{
				SetRegDWValue("ServiceProvider", (DWORD) i);
				m_iSPIndex = i;
				return;
			}
		}
	}
	else
	{
		m_iSPIndex = dwSp;
	}

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_MODEM ||
	   *GetSPGuid(m_iSPIndex) == CLSID_DP8SP_SERIAL)
	{
		EnumDevices();
	}

}

void cMultiplayer::Destroy()
{
	HRESULT	hr;

	if(m_pdnSPInfo)
		delete[] m_pdnSPInfo;

	if(m_pdnDeviceInfo)
		delete[] m_pdnDeviceInfo;

	
	if(m_pDP)
	{
		hr = m_pDP->Close(0); 
	}

	if(m_pDeviceAddress)
		m_pDeviceAddress->Release();

	if(m_pDP)
	{
		m_pDP->Release();
		m_pDP = NULL;
	}

	if(m_pHostList)
	{
		HOST_NODE*	pTmp;
		pTmp = m_pHostList;
		while(pTmp != NULL)
		{
			pTmp = m_pHostList->pNext;
			delete m_pHostList;
			m_pHostList = pTmp;
		}
	}

	PLAYERINFO_VECTOR::iterator theIterator;

	for(theIterator = m_lstPlayers.begin();theIterator != m_lstPlayers.end();theIterator++)
	{
		delete *theIterator;
	}
	m_lstPlayers.clear();


	PLAYERMESSAGE_ELEMENT	MessageIterator;
	for(MessageIterator = m_lstMessages.begin();MessageIterator != m_lstMessages.end();MessageIterator++)
	{
		free( (*MessageIterator)->pReceiveData);
		delete *MessageIterator;
	}

	m_lstMessages.clear();
}

long cMultiplayer::GetNumSPs()
{
	return m_dwNumSP;
}

char* cMultiplayer::GetSPName(int iIndex)
{
	if(iIndex >= (int) m_dwNumSP)
		return NULL;

	DPN_SERVICE_PROVIDER_INFO* pSPInfoEnum;

	pSPInfoEnum = m_pdnSPInfo;

	int	iTmp = 0;
	while(iTmp != iIndex)
	{
		pSPInfoEnum++;
		iTmp++;
	}

	if(pSPInfoEnum->guid == CLSID_DP8SP_MODEM)
		return "MODEM";
	if(pSPInfoEnum->guid == CLSID_DP8SP_TCPIP)
		return "TCP-IP NETWORK";
	if(pSPInfoEnum->guid == CLSID_DP8SP_IPX)
		return "IPX NETWORK";
	if(pSPInfoEnum->guid == CLSID_DP8SP_SERIAL)
		return "SERIAL PORT";
	
	/*case CLSID_DP8SP_TCPIP:
		return "TCPIP NETWORK";
	case CLSID_DP8SP_SERIAL:
		return "SERIAL PORT";*/

	return NULL;

}

GUID* cMultiplayer::GetSPGuid(int iIndex)
{
	if(iIndex >= (int)  m_dwNumSP)
		return NULL;

	DPN_SERVICE_PROVIDER_INFO* pSPInfoEnum;

	pSPInfoEnum = m_pdnSPInfo;

	int	iTmp = 0;
	while(iTmp != iIndex)
	{
		pSPInfoEnum++;
		iTmp++;
	}

	return &pSPInfoEnum->guid;
}

int cMultiplayer::GetNumSPOptions()
{
	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_MODEM)
		return 2;

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_TCPIP)
		return 1;

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_SERIAL)
		return 5;

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_IPX)
		return 1;
	
	return 0;
}

void cMultiplayer::NextSP()
{
	m_iSPIndex++;
	if(m_iSPIndex >= (int) m_dwNumSP)
		m_iSPIndex = 0;

	SetRegDWValue("ServiceProvider", (DWORD) m_iSPIndex);
	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_MODEM ||
	   *GetSPGuid(m_iSPIndex) == CLSID_DP8SP_SERIAL)
	{
		EnumDevices();
	}
}

int cMultiplayer::GetSPIndex()
{
	return m_iSPIndex;
}

void cMultiplayer::GetSPOption(int iOption, char* szBuffer, DWORD dwBufferSize)
{
	DPN_SERVICE_PROVIDER_INFO* pDeviceInfoEnum;

	pDeviceInfoEnum = m_pdnDeviceInfo;

	int	iTmp = 0;


	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_MODEM)
	{
		switch(iOption)
		{
		case 0:
			return;
		case 1:
			return;
		}
	}

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_TCPIP)
	{
		switch(iOption)
		{
		case 0:
			if(!m_dwTcpPort)
				m_dwTcpPort =  GetRegDWValue("TcpIpPort");
			if(!m_dwTcpPort)
			{
				m_dwTcpPort = -1;
				SetRegDWValue("TcpIpPort", m_dwTcpPort);
			}

			if(m_dwTcpPort == -1)
				sprintf(szBuffer, "DEFAULT");
			else
				sprintf(szBuffer, "%d", m_dwTcpPort);
			break;
		}
	}

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_SERIAL)
	{
		switch(iOption)
		{
		case 0:
			if(!m_iSerialDevice)
				m_iSerialDevice =  GetRegDWValue("SerialDevice");
			if(!m_iSerialDevice)
			{
				m_iSerialDevice = 0;
				SetRegDWValue("SerialDevice", m_iSerialDevice);
			}

			while(iTmp != m_iSerialDevice)
			{
				pDeviceInfoEnum++;
				iTmp++;
			}

			sprintf(szBuffer, "%S", pDeviceInfoEnum->pwszName);
			break;
		case 1:
			if(!m_dwBaudRate)
				m_dwBaudRate =  GetRegDWValue("BaudRate");
			if(!m_dwBaudRate)
			{
				m_dwBaudRate = DPNA_BAUD_RATE_9600;
				SetRegDWValue("BaudRate", m_dwBaudRate);
			}

			sprintf(szBuffer, "%d BPS", m_dwBaudRate);
			break;
		case 2:
			if(!m_sFlowControl[0])
				GetRegStringValue("FlowControl", m_sFlowControl, 10);
			if(!m_sFlowControl[0])
			{
				sprintf(m_sFlowControl, "%S", DPNA_FLOW_CONTROL_NONE);
				SetRegStringValue("FlowControl", m_sFlowControl);
			}

			sprintf(szBuffer, "%s", m_sFlowControl);
			break;
		case 3:
			if(!m_sParity[0])
				GetRegStringValue("Parity", m_sParity, 10);
			if(!m_sParity[0])
			{
				sprintf(m_sParity, "%S", DPNA_PARITY_NONE);
				SetRegStringValue("Parity", m_sParity);
			}

			sprintf(szBuffer, "%s", m_sParity);
			break;
		case 4:
			if(!m_sStopBits[0])
				GetRegStringValue("StopBits", m_sStopBits, 10);
			if(!m_sStopBits[0])
			{
				sprintf(m_sStopBits, "%S", DPNA_STOP_BITS_ONE);
				SetRegStringValue("StopBits", m_sStopBits);
			}

			sprintf(szBuffer, "%s", m_sStopBits);
			break;
		}
	}

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_IPX)
	{
		switch(iOption)
		{
		case 0:
			break;
		}
	}

	return;
}

char* cMultiplayer::GetSPOptionName(int iOption)
{
	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_MODEM)
	{
		switch(iOption)
		{
		case 0:
			return "DEVICE";
		case 1:
			return "PHONE NUMBER";
		}
	}

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_TCPIP)
	{
		switch(iOption)
		{
		case 0:
			return "PORT NUMBER";
		}
	}

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_SERIAL)
	{
		switch(iOption)
		{
		case 0:
			return "DEVICE";
		case 1:
			return "BAUD RATE";
		case 2:
			return "FLOW CONTROL";
		case 3:
			return "PARITY";
		case 4:
			return "STOP BITS";
		}
	}

	if(*GetSPGuid(m_iSPIndex) == CLSID_DP8SP_IPX)
	{
		switch(iOption)
		{
		case 0:
			return "PORT NUMBER";
		}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影在线免费| 欧美人伦禁忌dvd放荡欲情| 99久久er热在这里只有精品15 | 91精品欧美综合在线观看最新 | 韩国女主播一区二区三区| 国产高清无密码一区二区三区| 成人免费视频app| 91国偷自产一区二区三区观看| 欧美裸体bbwbbwbbw| 久久午夜羞羞影院免费观看| 亚洲日本在线视频观看| 视频在线观看91| 国产乱子伦视频一区二区三区 | 午夜精品一区在线观看| 日韩精品一区在线观看| 欧美精品一级二级| 国产午夜一区二区三区| 亚洲国产日韩a在线播放性色| 日本欧美一区二区在线观看| 成人免费电影视频| 91精品国模一区二区三区| 国产精品伦理一区二区| 亚洲bt欧美bt精品777| 风间由美一区二区三区在线观看 | 国产精品久久精品日日| 视频一区在线播放| 成人动漫中文字幕| 日韩欧美专区在线| 亚洲欧美日韩一区二区| 久久精品国产网站| 在线亚洲欧美专区二区| 久久久一区二区| 香蕉影视欧美成人| 波多野结衣在线一区| 日韩欧美成人一区二区| 一区二区不卡在线视频 午夜欧美不卡在 | 国产精品资源在线观看| 欧美久久婷婷综合色| 日韩毛片一二三区| 国产综合久久久久影院| 91精品国产综合久久福利软件| ㊣最新国产の精品bt伙计久久| 老色鬼精品视频在线观看播放| 欧美在线综合视频| 国产人久久人人人人爽| 亚洲精品少妇30p| 亚洲精品成人在线| 日韩午夜av一区| 久久这里只有精品视频网| 国产女人aaa级久久久级 | 麻豆精品视频在线观看| 精品久久久久一区二区国产| 欧美精品视频www在线观看| 成人小视频免费观看| 国产毛片精品视频| 午夜av电影一区| 亚洲最新视频在线观看| 在线观看亚洲a| 国产成人综合网| 精品久久久久久无| 国产传媒一区在线| 樱花影视一区二区| 欧美成人官网二区| 99久免费精品视频在线观看 | 国产午夜一区二区三区| jlzzjlzz亚洲女人18| 天堂午夜影视日韩欧美一区二区| 91精品国产综合久久香蕉的特点 | 成人免费视频一区二区| 寂寞少妇一区二区三区| 琪琪久久久久日韩精品| 国产精品久线在线观看| 精品国产青草久久久久福利| 欧美午夜电影网| 亚洲综合一二三区| 欧美日韩久久久| 亚洲自拍欧美精品| 在线免费视频一区二区| 亚洲欧美日韩中文字幕一区二区三区| 国产91精品免费| 国产精品污www在线观看| 成人亚洲一区二区一| 国产精品入口麻豆原神| 粉嫩一区二区三区在线看| 国产午夜久久久久| 蜜桃精品视频在线| 精品久久久久久久久久久久久久久| 一区二区三区四区高清精品免费观看 | 美女性感视频久久| 欧美videos大乳护士334| 黄色精品一二区| 国产人成亚洲第一网站在线播放 | 国产精品初高中害羞小美女文| av电影天堂一区二区在线| 综合精品久久久| 日本精品一区二区三区四区的功能| 伊人色综合久久天天| 欧美日韩三级视频| 蜜臀精品久久久久久蜜臀| 26uuu国产在线精品一区二区| 国产精品456| 自拍偷在线精品自拍偷无码专区 | 免费视频最近日韩| 久久久久免费观看| 成人国产精品免费观看动漫| 亚洲男人天堂av网| 欧美一区二区三区色| 国产一区二区在线观看免费 | 99精品一区二区三区| 亚洲一区二区三区影院| 欧美一二三区精品| 成人黄色网址在线观看| 一区二区三区日韩欧美| 91精品久久久久久蜜臀| 国产乱妇无码大片在线观看| 亚洲欧洲性图库| 欧美精品视频www在线观看| 国产在线一区二区| 亚洲欧美一区二区三区孕妇| 91麻豆精品国产91久久久资源速度 | 色一情一乱一乱一91av| 日韩成人av影视| 中文字幕巨乱亚洲| 91精品黄色片免费大全| 成人91在线观看| 日产国产欧美视频一区精品| 日本一区二区三区在线不卡| 欧美午夜精品久久久| 国产成人免费在线| 五月天丁香久久| 国产精品免费av| 制服丝袜亚洲精品中文字幕| 成人看片黄a免费看在线| 日本三级亚洲精品| 亚洲精品乱码久久久久久久久| 日韩精品一区二区三区视频播放| 91亚洲精华国产精华精华液| 精品亚洲aⅴ乱码一区二区三区| 亚洲理论在线观看| 久久精品一区二区三区四区| 欧美日韩免费电影| 97超碰欧美中文字幕| 精品一区二区三区的国产在线播放| 亚洲免费大片在线观看| 精品免费日韩av| 欧美日韩综合色| 99精品视频在线观看| 精东粉嫩av免费一区二区三区| 一区二区三区免费观看| 国产日韩欧美高清在线| 日韩色视频在线观看| 欧美日韩一区精品| 一本久久a久久免费精品不卡| 九九精品视频在线看| 亚洲成人动漫精品| 亚洲人成网站影音先锋播放| 26uuu国产日韩综合| 欧美日韩国产精品成人| 91在线免费视频观看| 久久99国产精品久久99| 亚洲图片欧美一区| 91麻豆精品国产91久久久使用方法 | 欧美性感一区二区三区| 国产在线观看免费一区| 天堂一区二区在线| 亚洲成av人片| 亚洲精品亚洲人成人网| 久久婷婷色综合| 欧美午夜精品理论片a级按摩| 91在线精品一区二区| 国产精品自拍在线| 麻豆精品国产91久久久久久| www国产亚洲精品久久麻豆| 欧美一区二区三区视频在线| 色婷婷综合久久久久中文| 国产盗摄精品一区二区三区在线| 韩国中文字幕2020精品| 天天综合网 天天综合色| 日韩伦理免费电影| 欧美国产日韩一二三区| 国产欧美日韩在线观看| 日韩午夜激情av| 欧美一二三四在线| 欧美日韩成人在线| 欧美精品在欧美一区二区少妇 | 亚洲图片欧美综合| 亚洲三级视频在线观看| 亚洲欧美日韩成人高清在线一区| 亚洲国产精品国自产拍av| 欧美精品一区二区久久婷婷| 欧美日韩精品欧美日韩精品一| 欧美图片一区二区三区| 在线观看亚洲精品视频| 一本大道久久a久久综合婷婷| 成人三级伦理片| 99久久精品免费看国产免费软件| 国产99一区视频免费| 国产一区 二区| 懂色av一区二区夜夜嗨| 成人中文字幕在线|