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

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>
            香蕉久久一区二区不卡无毒影院| 欧美一区二区三区四区在线观看| 久久综合免费视频影院| 亚洲欧美三级伦理| 亚洲欧美日韩成人| 久久国产精品久久久久久电车| 午夜在线一区| 久久久久久网| 欧美大片免费看| 欧美性开放视频| 国产欧美日本一区视频| 国产一区在线免费观看| 在线欧美日韩国产| 一本色道久久精品| 欧美一区二区在线视频| 免费看亚洲片| 99国产精品一区| 亚洲女性裸体视频| 麻豆9191精品国产| 欧美视频一区二区在线观看 | 久久夜色精品国产亚洲aⅴ | 性欧美videos另类喷潮| 久久国产一区二区| 欧美激情女人20p| 国产美女扒开尿口久久久| 在线日本欧美| 亚洲欧美精品suv| 蜜臀av一级做a爰片久久| 日韩午夜电影av| 久久亚洲春色中文字幕| 国产精品免费一区二区三区观看| 亚洲电影免费观看高清| 亚洲欧美日韩在线综合| 亚洲高清激情| 国产伦理一区| 一区二区欧美视频| 欧美视频一区在线观看| 亚洲午夜av在线| 国产一区高清视频| 亚洲网址在线| 亚洲国产一区视频| 久久精品视频导航| 国产精品高潮呻吟久久av无限| 在线成人免费观看| 欧美综合第一页| 这里只有视频精品| 欧美二区视频| **性色生活片久久毛片| 久久精品91| 亚洲一区二区三区精品在线| 欧美精品www| 亚洲欧洲一区二区在线播放| 久久精品国产清自在天天线| 亚洲一级免费视频| 国产精品成人一区二区三区吃奶 | 欧美aⅴ一区二区三区视频| 噜噜噜久久亚洲精品国产品小说| 亚洲中字黄色| 久久国产精品99久久久久久老狼 | 99视频精品全部免费在线| 欧美 日韩 国产精品免费观看| 国产主播在线一区| 久久精品国产久精国产思思| 免费看精品久久片| 男女激情久久| 亚洲精品国久久99热| 欧美激情91| 亚洲一区二区三区在线观看视频| 久久精品夜色噜噜亚洲aⅴ| 国产视频欧美视频| 久久国产视频网| 欧美在线免费播放| 国产一区美女| 欧美承认网站| 欧美精品三级在线观看| 亚洲午夜激情在线| 亚洲欧美变态国产另类| 国内偷自视频区视频综合| 免费欧美日韩| 欧美日韩国产一区二区| 亚欧美中日韩视频| 久久精品国产欧美激情| 亚洲黄色影院| 一本色道久久88综合亚洲精品ⅰ| 国产精品v欧美精品∨日韩| 久久riav二区三区| 国产手机视频一区二区| 亚洲永久免费精品| 亚洲已满18点击进入久久| 欧美一区二区三区的| 免费观看成人| 欧美成人精品影院| 在线成人www免费观看视频| 国色天香一区二区| 久久久精品欧美丰满| 美乳少妇欧美精品| 国产毛片久久| 亚洲国产成人久久| 亚洲欧洲免费视频| 欧美激情精品久久久久久大尺度| 性感少妇一区| 亚洲黄色在线看| 免费在线国产精品| 欧美激情综合五月色丁香小说| 亚洲美女视频在线免费观看| 午夜精品久久久久久久白皮肤| 国产亚洲一区精品| 欧美1区免费| 国产精品国产a级| 久久久久久久久伊人| 亚洲视频一区二区| 亚洲人成网站999久久久综合| 欧美精品粉嫩高潮一区二区 | 国内精品视频一区| 欧美国产日韩xxxxx| 99riav1国产精品视频| 亚洲欧美综合| 欧美人与性动交a欧美精品| 国产精品99久久久久久人| 亚洲欧洲综合| 亚洲精品久久久蜜桃| 日韩一区二区精品| 久久精品亚洲乱码伦伦中文| 在线播放日韩| 欧美日韩一区二区在线观看| 亚洲免费一区二区| 欧美一区国产二区| 最新国产成人在线观看| 亚洲色在线视频| 欧美一区免费视频| 日韩视频专区| 久久成人精品电影| 久久精品成人一区二区三区蜜臀| 欧美精品麻豆| 欧美视频免费在线| 欧美国产精品久久| 亚洲尤物影院| 在线成人黄色| 亚洲美女91| 欧美午夜一区二区三区免费大片 | 久久成人一区二区| 欧美精品97| 亚洲人体一区| 久久精品国产一区二区三| 久久一区中文字幕| 亚洲人体一区| 欧美黄免费看| 亚洲国产99| 国产精品欧美风情| 亚洲精品欧美日韩| 日韩图片一区| 欧美激情精品久久久久久黑人 | 亚洲综合欧美日韩| 亚洲欧美999| 国产亚洲综合精品| 午夜欧美视频| 久久成人免费网| 久色婷婷小香蕉久久| 久久亚洲视频| av成人免费| 美女图片一区二区| 久久在线免费观看| 欧美韩日一区二区三区| 欧美成人网在线| 久久er99精品| 亚洲欧洲精品一区二区三区 | 狠狠色综合网| 久久永久免费| 久久精品欧美日韩| 欧美a级大片| 久久国产精品99精品国产| 久久综合久色欧美综合狠狠| 亚洲美女91| 麻豆国产va免费精品高清在线| 亚洲午夜一二三区视频| 久久久久久日产精品| 在线一区二区三区四区| 欧美大片网址| 亚洲美女淫视频| 亚洲欧美日韩国产一区二区| 国产精品蜜臀在线观看| 一本一本久久| 久久久青草婷婷精品综合日韩| 亚洲电影在线观看| 亚洲美女中文字幕| 午夜在线一区| 国产综合香蕉五月婷在线| 欧美国产日韩一区二区在线观看 | 国产精品第一区| 亚洲欧美国内爽妇网| 久久亚洲国产成人| 99视频一区二区三区| 国产精品系列在线| 亚洲三级影院| 欧美阿v一级看视频| 亚洲精选成人| 国产欧美视频一区二区| 美女主播一区| 亚洲精品一区二区三区四区高清| 久久综合中文|