青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

邏輯層: 類World實(shí)現(xiàn)了wow的World,所有的邏輯處理
  MaNGOS 下載,編譯,配置和運(yùn)行的基本步驟 下載和安裝msysgit,用于代碼管理我使用的是Git-1.6.5.1-preview20091022.exe 
  下載和安裝tortoisegit,用于代碼管理我使用的是TortoiseGit-1.3.2.0-32bit.msi 
  使用git://github.com/mangos/mangos.git,從github提取mangos代碼 
  采用Git GUI工具的Clone Existing Repository,得到 mangos代碼(我的是9560,安裝UDB參考這) 
  使用git://github.com/scriptdev2/scriptdev2.git,從github提取scriptdev2代碼 
  采用Git GUI工具的Clone Existing Repository,得到 scriptdev2代碼. 
  編譯mangos我用的是VC9,打開(kāi)mangoswinmangosdVC90.sln進(jìn)行構(gòu)造,構(gòu)造完成后,會(huì)得到mangosbinWin32_Debug文件夾 
  編譯scriptdev2我用的是VC9,打開(kāi)mangoswinscriptdev2VC90.sln進(jìn)行構(gòu)造,構(gòu)造完成后,會(huì)得到scriptdev2binWin32_Debug文件夾也可參考 
  pandore 
  拷貝mangossrcmangosd目錄下的mangosd.conf.dist.in為mangosbinWin32_Debugmangosd.conf 
  拷貝mangossrcrealmd目錄下的realmd.conf.dist.in為mangosbinWin32_Debugrealmd.conf 
  從http://www.wowtaiwan.com.tw/下載和安裝臺(tái)服WOW,并升級(jí)到最新版本我使用的是臺(tái)服WOW 3.3.2 build 11403 
  ,采用MaNGOS的工具ad從wow的MPQ中抽取map,得到的所有的map數(shù)據(jù)文件,文件命名規(guī)范為map_id(3位) tileY(2位) tileX(2位).map,如文件名為0002035.map,代表的是Azeroth(地圖id為000,tile坐標(biāo)為(35,20). 注:WOW客戶端的Tile對(duì)應(yīng)mangos中的grid,WOW客戶端的Chunk對(duì)應(yīng)mangos中的cell(1cell = 4 chunk) 
  按照常規(guī)流程(包括建立數(shù)據(jù)庫(kù)和配置服務(wù)器)把服務(wù)器跑起來(lái),使用account create zzh1234567 zzh1234567 創(chuàng)建一個(gè)賬號(hào),使用account set gmlevel zzh1234567 3設(shè)置為超級(jí)用戶 
  配置好客戶端后,運(yùn)行WOW,順利登陸,呵呵 
  通過(guò)安裝UDB來(lái)豐富場(chǎng)景FULL DB 9560 : HERE,參考這,在我安裝DB9560的時(shí)候,發(fā)現(xiàn)Mangos在LoadCreatureAddons的時(shí)候,加載creature template addons出錯(cuò),Mangos只要求creature template addons有7個(gè)字段,而creature template addons有9個(gè)字段我現(xiàn)在只是簡(jiǎn)單地跳過(guò)LoadCreatureAddons的調(diào)用 
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客 
運(yùn)行Mangos (運(yùn)行Mangos一節(jié)過(guò)期,是以前我針對(duì)國(guó)服3.1.3版本進(jìn)行的安裝配置) ,采用MaNGOS的工具ad從wow的MPQ中抽取map,得到的所有的map數(shù)據(jù)文件,文件命名規(guī)范為map_id(3位) tileY(2位) tileX(2位).map,如文件名為0002035.map,代表的是Azeroth(地圖id為000,tile坐標(biāo)為(35,20). 注:WOW客戶端的Tile對(duì)應(yīng)mangos中的grid,WOW客戶端的Chunk對(duì)應(yīng)mangos中的cell(1cell = 4 chunk) 
  配置好客戶端后,運(yùn)行WOW,順利登陸,呵呵 
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客 
Mangos代碼閱讀 
  Mangos有13個(gè)工程 
  使用了4個(gè)外部工具庫(kù),分別是: 跨平臺(tái)的網(wǎng)絡(luò)通訊框架The ADAPTIVE Communication Environment (ACE) 
  壓縮庫(kù)zlib 
  Socket通信庫(kù) C++ Sockets Library (使用在realmd工程中,和使用在Mangosd工程中的RASocket,負(fù)責(zé)處理Remote Administration其他地方?jīng)]有使用到這個(gè)C++ Sockets Library )發(fā)現(xiàn)在C++ Sockets Library的TcpSocket::Open中存在一個(gè)問(wèn)題,在n = connect(s, ad, ad);語(yǔ)句執(zhí)行后,如果n=-1,C++ Sockets Library會(huì)檢測(cè)是否ERR為WSAEWOULDBLOCK,否則表示成功,但在動(dòng)態(tài)庫(kù)中使用TcpSocket的時(shí)候,我發(fā)現(xiàn)n = connect(s, ad, ad);語(yǔ)句執(zhí)行后,n=-1,ERR會(huì)為0,這個(gè)時(shí)候連接也是成功了,但TcpSocket::Open會(huì)當(dāng)做不成功處理我發(fā)現(xiàn)這個(gè)問(wèn)題,但沒(méi)有時(shí)間去探究原因,也許并不是一個(gè)問(wèn)題 
  C++的并行編程模板庫(kù)Threading Building Blocks (tbb 和 tbbmalloc) 
  Mangos的實(shí)現(xiàn)分為:登錄服務(wù)器(realmd)和世界服務(wù)器(mangosd+game)realmd和mangos共用了Mangos公共庫(kù)(shared) 
  工程shared 
  提供了通用功能,包括了數(shù)據(jù)庫(kù)的封裝類,實(shí)現(xiàn)了對(duì)MySql的訪問(wèn),同樣,我們可以編寫(xiě)派生類來(lái)支持其他的數(shù)據(jù)庫(kù) 
  工程script 
  提供了腳本接口,并實(shí)現(xiàn)了簡(jiǎn)單的幾個(gè)腳本,封裝為DLL,提供給game使用,具體可參考:MaNGOS腳本接口 
  通過(guò)使用不同的腳本DLL來(lái)替換share的這個(gè)DLL,可以讓game具有更強(qiáng)的AIScriptDev2 就是一個(gè)這樣的庫(kù)ScriptDev2 is a replacement for the Script Library that comes with MaNGOS( http://www.getmangos.com ) written in C++ and is compatible with Windows and Linux. It provides scripts for NPCs, Boss events, and Items currently. Once ScriptDev2 is compiled it is automatically run by MaNGOS on server startup. 
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客

工程mangosd 
  mangos是世界服務(wù)器的管理器,負(fù)責(zé)初始化工作和啟動(dòng)世界服務(wù)器各層的線程,這些工作主要是由類Master來(lái)實(shí)現(xiàn)具體是: 使用三個(gè)數(shù)據(jù)庫(kù)對(duì)象WorldDatabase和CharacterDatabase和loginDatabase,初始化三大數(shù)據(jù)庫(kù):World Database和Character Database和login Database,并為每個(gè)數(shù)據(jù)庫(kù)的訪問(wèn)都啟動(dòng)一個(gè)DB delay threads具體的數(shù)據(jù)庫(kù)操作功能都是由Mangos公共庫(kù)shared來(lái)提供 
  調(diào)用sWorld.SetInitialWorldSettings,對(duì)World進(jìn)行初始化,包括加載所有的游戲數(shù)據(jù)和初始化各種更新定時(shí)器和郵件定時(shí)器,還有些其他的初始化工作類World的成員函數(shù)SetInitialWorldSettings調(diào)用成員函數(shù)LoadConfigSettings解析mangosd.conf,解析后內(nèi)容放入uint32 m_configs[CONFIG_VALUE_COUNT]中 
  加載的游戲數(shù)據(jù)有: 
  DBC數(shù)據(jù) 
  Objects數(shù)據(jù) 
  Spells數(shù)據(jù) 
  Pooling數(shù)據(jù) 
  Game Event數(shù)據(jù) 
  loot數(shù)據(jù) 
  技能數(shù)據(jù) 
  所有其他的游戲數(shù)據(jù),包括Waypoints和Trainers等等等 
  腳本數(shù)據(jù) 
  其他的初始化工作有: 
  初始化MapManager,啟動(dòng)Map System 
  初始化Battlegrounds,啟動(dòng)BattleGround System 
  初始化DailyQuestResetTime 
  初始化sGameEventMgr,Starting Game Event system 
  類Master啟動(dòng)WorldRunnable,開(kāi)始游戲邏輯Heartbeat for the World,由Master創(chuàng)建,并設(shè)置線程為最高優(yōu)先級(jí) 
  類Master啟動(dòng)CliRunnable:Command Line Interface handling thread,由Master創(chuàng)建CliRunnable運(yùn)行時(shí)候會(huì)生成一個(gè)WorldDatabase線程,在接收到輸入后會(huì)調(diào)用sWorld.QueueCliCommand把Cmd放入到World::cliCmdQueue中 
  mangosd的線程總共有(1+3+1+1+1+2 +1 =10)10個(gè)線程 主線程Master 
  2個(gè)網(wǎng)絡(luò)線程ReactorRunnable(可配置數(shù)目)(網(wǎng)絡(luò)層) 
  一個(gè)World線程(邏輯層) 
  三個(gè)DB線程(數(shù)據(jù)層) 
  一個(gè)CLI線程(輸入層),運(yùn)行時(shí)候會(huì)生成一個(gè)WorldDatabase線程 
  一個(gè)RA線程(管理層) 
  一個(gè)freeze catcher 線程(可選) 
  工程g3dlite:游戲邏輯層的底層庫(kù) 
  工程framework:系統(tǒng)框架 
  工程realm 
  負(fù)責(zé)登陸和選擇游戲服務(wù)器,進(jìn)行負(fù)載均衡用到了C++ Sockets Library進(jìn)行登錄處理,采用select I/O模型實(shí)現(xiàn)了Wow, Mangos登錄時(shí)的SRP6認(rèn)證客戶端作為它的client連接到realm server認(rèn)證和選擇了mangos server就斷開(kāi) 而mangos server和realm server則不進(jìn)行連接,只是通過(guò)數(shù)據(jù)庫(kù)交互數(shù)據(jù):mangos server把自己的狀態(tài)和擁有的角色數(shù)放入庫(kù)中realm server會(huì)讀取數(shù)據(jù)庫(kù)中的這些信息來(lái)獲知mangos server的狀態(tài) 數(shù)據(jù)庫(kù)realm的realmlist表保存了realm的列表 
  realm通過(guò)如下事件處理函數(shù)來(lái)負(fù)責(zé)登陸和選擇游戲服務(wù)器 
  const AuthHandler table[] = 
  { 
  { AUTH_LOGON_CHALLENGE, STATUS_CONNECTED, &AuthSocket::_HandleLogonChallenge }, 
  { AUTH_LOGON_PROOF, STATUS_CONNECTED, &AuthSocket::_HandleLogonProof }, 
  { AUTH_RECONNECT_CHALLENGE, STATUS_CONNECTED, &AuthSocket::_HandleReconnectChallenge}, 
  { AUTH_RECONNECT_PROOF, STATUS_CONNECTED, &AuthSocket::_HandleReconnectProof }, 
  { REALM_LIST, STATUS_AUTHED, &AuthSocket::_HandleRealmList }, 
  { XFER_ACCEPT, STATUS_CONNECTED, &AuthSocket::_HandleXferAccept }, 
  { XFER_RESUME, STATUS_CONNECTED, &AuthSocket::_HandleXferResume }, 
  { XFER_CANCEL, STATUS_CONNECTED, &AuthSocket::_HandleXferCancel } 
  }; 登錄處理: 
  user登錄到realm server進(jìn)行身份認(rèn)證,并選擇登錄上哪個(gè)mangos serveruser登錄到mangos server后,將不再和realm server交互 
  參考: Wow 服務(wù)器解析 
  工程game 
  game:是Mangos的核心代碼,網(wǎng)絡(luò)層和邏輯層代碼(采用了ACE反應(yīng)器(Reactor)模式) 
  網(wǎng)絡(luò)層: WorldSocket :負(fù)責(zé)網(wǎng)絡(luò)IO,而類WorldSession負(fù)責(zé)邏輯處理WorldSocket和WorldSession分別在獨(dú)立的線程ReactorRunnable和WorldRunnable中運(yùn)行,使用WorldSession中的消息隊(duì)列_recvQueue來(lái)進(jìn)行數(shù)據(jù)緩沖在WorldSocket接收到網(wǎng)咯輸入后,會(huì)調(diào)用m_Session->QueuePacket (new_pct);把網(wǎng)絡(luò)包放入WorldSession的_recvQueue所以,可以看到WorldSocket 是Mangos game的網(wǎng)絡(luò)層,而WorldSession是邏輯處理層WorldSocketMgr是網(wǎng)絡(luò)層的一個(gè)管理器,它負(fù)責(zé)指派WorldSocket歸哪個(gè)ReactorRunnable管理(Mangos可創(chuàng)建多個(gè)ReactorRunnable,缺省是2個(gè)) 
  WorldSocketMgr(Manages all sockets connected to peers and network threads)管理所有的連接WorldSocketWorldSocketMgr的WorldSocketMgr::StartNetwork對(duì)8085(缺省)端口進(jìn)行偵聽(tīng)邏輯處理的循環(huán)是在World::Update中循環(huán)處理包括: 
  刷新更新定時(shí)器 
  刷新游戲定時(shí)器和處理游戲關(guān)閉 
  處理日常任務(wù) 
  處理拍賣 
  刷新SessionsWorld::UpdateSessions會(huì)調(diào)用所有WorldSession的WorldSession::Update在WorldSession::Update中進(jìn)行邏輯處理 
  處理天氣 
  刷新uptime table 
  刷新Objects,包括maps,transport,creatures,,,, 
  刷新所有running battlegrounds 
  刷新SqlResultQueue, 邏輯層和數(shù)據(jù)層是通過(guò)Queue來(lái)進(jìn)行異步操作的(用了AsyncPQuery和SqlResultQueue) 
  處理尸體移除 
  處理游戲事件 
  處理 Move all creatures with "delayed move" and remove and delete all objects with "delayed remove" 
  處理InstanceSaveManager的刷新 
  調(diào)用World::ProcessCliCommands,處理CLI從cliCmdQueue取得cmd進(jìn)行解析執(zhí)行所有有效的Cmd,都可以在ChatHandler::getCommandTable中找到 
  類WorldSession: 類WorldSession負(fù)責(zé)邏輯處理 
  void WorldSession::SendPacket(WorldPacket const* packet) 負(fù)責(zé)發(fā)包給客戶端,直接發(fā)包,沒(méi)有輸出緩沖隊(duì)列 
  在WorldSession::Update中進(jìn)行邏輯處理World::UpdateSessions會(huì)調(diào)用所有WorldSession的WorldSession::Update 
  執(zhí)行語(yǔ)句OpcodeHandler& opHandle = opcodeTable[packet->GetOpcode()];得到opHandle 
  根據(jù)得到的opHandle,執(zhí)行(this->*opHandle.handler)(*packet); 
  WorldSession::HandlePlayerLogin處理玩家登陸游戲 
  構(gòu)建Player 
  Player::LoadFromDB從數(shù)據(jù)庫(kù)中加載玩家數(shù)據(jù)在Player::LoadFromDB中會(huì)調(diào)用SetMap(MapManager::Instance().CreateMap(GetMapId() , this));加載當(dāng)前player所在的map 
  Player::SetPosition在Player運(yùn)動(dòng)的時(shí)候,改變位置,保存處理夸區(qū) 
  類Map實(shí)現(xiàn)了一個(gè)state machine,采用state pattern組織了Gid的4個(gè)state object:InvalidState;ActiveState;IdleState;RemovalState 
  game中的管理器有: ObjectMgr 
  mMangosStringLocaleMap 關(guān)聯(lián)到mangos_string table 
  m_scriptNames 關(guān)聯(lián)到tables: creature_template;gameobject_template;item_templat e;areatrigger_scripts;instance_template 
  mCreatureLocaleMap 關(guān)聯(lián)到locales_creature table 
  mGameObjectLocaleMap關(guān)聯(lián)到locales_gameobject table 
  mItemLocaleMap關(guān)聯(lián)到locales_item table 
  mQuestLocaleMap –> locales_quest 
  mNpcTextLocaleMap –> locales_npc_text 
  mPageTextLocaleMap –> locales_page_text 
  mGossipMenuItemsLocaleMap –> locales_gossip_menu_option 
  mPointOfInterestLocaleMap –> locales_points_of_interest 
  … 
  對(duì)象類層次 
  對(duì)象的類層次如下,所有的Object都由ObjectMgr進(jìn)行管理ObjectMgr以GUID方式,管理了characters,creature,item_instance,gameobject,auctionhouse,mail,item_text,corpse,arena_team,character_equipmentsets 
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客

Player狀態(tài) 
  /// Player state 
  enum SessionStatus 
  { 
  STATUS_AUTHED = 0, ///< Player authenticated (_player==NULL, m_playerRecentlyLogout = false or will be reset before handler call, m_GUID have garbage) 
  STATUS_LOGGEDIN, ///< Player in game (_player!=NULL, m_GUID == _player->GetGUID(), inWorld()) 
  STATUS_TRANSFER, ///< Player transferring to another map (_player!=NULL, m_GUID == _player->GetGUID(), !inWorld()) 
  STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT, ///< _player!= NULL or _player==NULL && m_playerRecentlyLogout, m_GUID store last _player guid) 
  STATUS_NEVER ///< Opcode not accepted from client (deprecated or server side only) 
  }; 
  生物狀態(tài) 
  enum DeathState 
  { 
  ALIVE = 0, 
  JUST_DIED = 1, 
  CORPSE = 2, 
  DEAD = 3, 
  JUST_ALIVED = 4, 
  DEAD_FALLING= 5 
  }; 
  玩家登陸 
  服務(wù)器端在連接打開(kāi)后,會(huì)發(fā)SMSG_AUTH_CHALLENGE到客戶端客戶端從服務(wù)器端發(fā)送回來(lái)的種子和 SRP6 數(shù)據(jù)中產(chǎn)生隨機(jī)種子,生成 SHA1 字符串,用這些數(shù)據(jù)生成 CMSG_AUITH_SESSION 數(shù)據(jù)包,發(fā)送給服務(wù)端這個(gè)過(guò)程是沒(méi)有經(jīng)過(guò)加密的 
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客
  客戶端發(fā)送SMSG_AUTH_SESSION到服務(wù)器 
  服務(wù)器處理SMSG_AUTH_SESSION 
  服務(wù)器發(fā)送SMSG_AUTH_RESPONSE給客戶端 
  服務(wù)器發(fā)送SMSG_ADDON_INFO給客戶端 
  服務(wù)器發(fā)送SMSG_CLIENTCACHE_VERSION給客戶端 
  服務(wù)器發(fā)送SMSG_TUTORIAL_FLAGS給客戶端 
  packet結(jié)構(gòu) SMSG_AUTH_SESSION 是client packet有一個(gè)頭部(ClientPktHeader),后面是數(shù)據(jù)塊 
  SMSG_AUTH_RESPONSE 是server packet有一個(gè)頭部(ServicePktHeader),后面是數(shù)據(jù)塊 
  SMSG_AUTH_RESPONSE 的包組織 
  SMSG_AUTH_RESPONSE 的opcode是01EE,ByteBuffer大小為1 + 4 + 1 + 4 + 1=11一個(gè)SMSG_AUTH_RESPONSE 的數(shù)據(jù)如下: 在構(gòu)造了SMSG_AUTH_RESPONSE packet后,WorldSocket::SendPacket會(huì)根據(jù)SMSG_AUTH_RESPONSE packet構(gòu)造出一個(gè)ServerPktHeader,并對(duì)ServerPktHeader中的數(shù)據(jù)header進(jìn)行加密發(fā)送加密采用m_Crypt.EncryptSend ((uint8*)header.header, header.getHeaderLength()); WorldSocket::handle_input_header會(huì)對(duì)從客戶端接收來(lái)的數(shù)據(jù)進(jìn)行解密,解密采用m_Crypt.DecryptRecv ((uint8*) m_Header.rd_ptr (), sizeof (ClientPktHeader)); 
  角色枚舉 玩家登上服務(wù)器后,從客戶端發(fā)送SMSG_CHAR_ENUM到服務(wù)器 
  在服務(wù)器端 
  根據(jù){ "CMSG_CHAR_ENUM", STATUS_AUTHED, &WorldSession::HandleCharEnumOpcode },服務(wù)器會(huì)調(diào)用WorldSession::HandleCharEnumOpcode 
  WorldSession::HandleCharEnumOpcode會(huì)調(diào)用CharacterDatabase.AsyncPQuery,進(jìn)行異步查詢后,調(diào)用CharacterHandler::HandleCharEnumCallback 
  CharacterHandler::HandleCharEnumCallback會(huì)回頭調(diào)用session->HandleCharEnum(result); 
  WorldSession::HandleCharEnum根據(jù)characters數(shù)據(jù)庫(kù)的查詢結(jié)果,調(diào)用Player::BuildEnumData,加載角色數(shù)據(jù),構(gòu)造SMSG_CHAR_ENUM返回包,然后發(fā)送回客戶端 
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客
  角色創(chuàng)建 
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客 
  角色的初始化裝備在CharStartOutfit.dbc 
  角色的創(chuàng)建和選擇的設(shè)置都在 ChrRaces.dbc 
  角色的創(chuàng)建屬性都在Playercreateinfo,包括出生地和出生屬性 
  playercreateinfo_item表是創(chuàng)建一個(gè)新人物時(shí),人物默認(rèn)帶的所有Item的表 
  playercreateinfo_spell表是創(chuàng)建一個(gè)新人物時(shí),人物默認(rèn)帶的所有Spell的表 
角色刪除 
  Mangos代碼閱讀 - 陳波 - cp7618@yeah的博客

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区免费在线观看 | 亚洲欧美第一页| 国产精品欧美久久| 久久久久久91香蕉国产| 亚洲视频免费在线| 亚洲午夜高清视频| 久久免费高清| 欧美精品二区| 国产精品大全| 亚洲国产成人精品久久| 亚洲人成亚洲人成在线观看| 999亚洲国产精| 久久精品91| 麻豆九一精品爱看视频在线观看免费| 久久久久久久激情视频| 国产亚洲女人久久久久毛片| 欧美激情综合五月色丁香| 亚洲国产国产亚洲一二三| 亚洲神马久久| 国产精品久久久久久久久婷婷 | 久色成人在线| 免费一级欧美片在线播放| 亚洲高清激情| 亚洲午夜精品17c| 欧美在线视频播放| 欧美成人亚洲| 国产日韩欧美精品在线| 亚洲国产欧美日韩精品| 一区二区欧美亚洲| 久久这里有精品视频| 亚洲美女精品一区| 校园春色综合网| 欧美精品在线观看91| 国内精品久久久久国产盗摄免费观看完整版 | 欧美国产激情| 在线视频一区观看| 久久综合综合久久综合| 国产精品国产三级国产aⅴ入口| 国产一区二三区| 一区二区av| 麻豆精品国产91久久久久久| 中文亚洲视频在线| 欧美成人精品在线观看| 国产亚洲高清视频| 亚洲欧美日本伦理| 亚洲激情亚洲| 蜜臀va亚洲va欧美va天堂| 国产欧美三级| 亚洲欧美日韩网| 日韩系列欧美系列| 免费成人美女女| 黄色精品在线看| 欧美专区在线观看| 亚洲素人一区二区| 欧美三级精品| 一区二区三区**美女毛片| 欧美成人一区在线| 久久久久在线观看| 经典三级久久| 久久综合狠狠| 久久精品伊人| 国产精品视频99| 海角社区69精品视频| 欧美一级免费视频| 午夜精品久久久久久久99水蜜桃 | 久久综合导航| 欧美自拍偷拍午夜视频| 国产麻豆视频精品| 亚洲在线网站| 亚洲国产专区| 久久久久久久久久久一区| 国产在线成人| 欧美不卡视频一区| 牛夜精品久久久久久久99黑人| 亚洲国产婷婷| 亚洲全黄一级网站| 欧美日韩国产免费观看| 亚洲中字黄色| 欧美一区二区日韩| 亚洲电影第1页| 亚洲国产精品成人va在线观看| 欧美成人69av| 亚洲毛片一区| 亚洲在线免费| 国产精品午夜在线| 久久国产一二区| 久久激情视频免费观看| 在线欧美一区| 99精品国产在热久久下载| 欧美国产三级| 亚洲欧美伊人| 久久久久国产精品午夜一区| 亚洲日韩中文字幕在线播放| 亚洲剧情一区二区| 国产精品久久久久久av下载红粉| 欧美一区二区精品在线| 久久久久久91香蕉国产| 日韩亚洲欧美中文三级| 亚洲图片欧美午夜| 1024成人| 亚洲视频一区二区| 亚洲福利视频专区| 欧美日韩亚洲综合| 国产精品福利在线| 欧美电影免费观看网站| 欧美精品日韩www.p站| 亚洲欧美另类在线观看| 久久精品国产精品亚洲综合| 亚洲第一主播视频| 亚洲午夜视频在线观看| 亚洲黄一区二区| 国产精品99久久久久久久久久久久 | 久久精品视频在线看| 女人色偷偷aa久久天堂| 欧美一区二视频| 欧美精品一区三区在线观看| 久久gogo国模啪啪人体图| 欧美激情bt| 久久久久久久999精品视频| 欧美精品久久久久久久免费观看 | 欧美一区二区| 激情丁香综合| 欧美日韩中文字幕在线| 亚洲欧美日韩在线不卡| 久久久久久色| 一区二区三区黄色| 国模套图日韩精品一区二区| 国产免费亚洲高清| 欧美日韩国产bt| 欧美大香线蕉线伊人久久国产精品| 欧美一区成人| 美国十次成人| 亚洲日韩成人| 欧美三区在线观看| 欧美高清视频在线观看| 亚洲国产女人aaa毛片在线| 午夜免费在线观看精品视频| 亚洲欧美国产毛片在线| 欧美日韩成人激情| 国产精品爱啪在线线免费观看| 欧美成人精品在线| 久久精品日产第一区二区三区| 亚洲日韩欧美视频| 久久综合给合久久狠狠色 | 日韩视频―中文字幕| 中文亚洲欧美| 亚洲欧洲日韩在线| 中日韩美女免费视频网址在线观看| 久久综合色一综合色88| 久久久久久久高潮| 小辣椒精品导航| 一本色道88久久加勒比精品| 久久久久欧美精品| 一区二区三区欧美| 久久国产免费看| 亚洲一区二区视频在线| 国产日韩精品入口| 嫩草伊人久久精品少妇av杨幂| 蜜臀va亚洲va欧美va天堂| 一二三区精品| 亚洲国产欧美日韩另类综合| 欧美在线观看一区| 久久久蜜桃精品| 亚洲久色影视| 欧美三级欧美一级| 91久久国产精品91久久性色| 国产精品性做久久久久久| 亚洲欧美综合v| 欧美福利在线| 亚洲欧美日韩久久精品 | 国产欧美日韩精品丝袜高跟鞋| 亚洲国产欧美一区二区三区同亚洲| 亚洲先锋成人| 亚洲国产精品va在线看黑人动漫| 美日韩在线观看| 亚洲日韩视频| 亚洲——在线| 在线不卡亚洲| 欧美成人国产| 午夜精彩国产免费不卡不顿大片| 国产精品高清一区二区三区| 免费成人高清视频| 久久精品人人做人人爽| 国产日韩精品一区观看| 欧美国产日韩一区二区在线观看| 亚洲精品视频一区二区三区| 欧美高清一区| 亚洲激情图片小说视频| 亚洲欧洲一区二区在线播放| 欧美韩国日本一区| 一本在线高清不卡dvd| 午夜在线播放视频欧美| 久久精品国产视频| 国产一区二区三区久久| 久久综合中文字幕| 久久精品国产v日韩v亚洲 | 欧美精品v国产精品v日韩精品| 亚洲精品免费网站| 亚洲美女在线一区| 欧美区亚洲区|