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

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>
            一本一道久久综合狠狠老精东影业 | 欧美麻豆久久久久久中文| 中文在线一区| 日韩视频在线观看免费| 亚洲国产另类 国产精品国产免费| 两个人的视频www国产精品| 久久亚洲一区| 亚洲电影免费观看高清| 亚洲狼人综合| 一区二区日韩伦理片| 亚洲视频导航| 欧美在线亚洲| 蜜月aⅴ免费一区二区三区| 欧美69视频| 国产精品毛片| 在线观看视频日韩| 亚洲精品一区二区网址 | 国产精品久久久久久户外露出| 欧美色另类天堂2015| 国产乱码精品一区二区三区忘忧草| 国产女人aaa级久久久级| 好吊视频一区二区三区四区| 亚洲精选一区| 久久精品视频导航| 欧美激情一区在线观看| 一区二区高清| 久久亚洲免费| 国产精品一区二区三区免费观看| 亚洲国产成人午夜在线一区| 亚洲少妇自拍| 免费看精品久久片| 亚洲综合色网站| 噜噜噜在线观看免费视频日韩| 国产精品毛片va一区二区三区| 亚洲精品美女在线观看| 西瓜成人精品人成网站| 久久午夜电影网| 99国产精品国产精品久久 | 久久久久久9| 欧美日韩午夜| 亚洲高清资源| 久久久久久久一区二区三区| aⅴ色国产欧美| 欧美激情国产日韩| 亚洲国产精品一区| 久久这里只有精品视频首页| 亚洲男人av电影| 欧美另类久久久品| 亚洲日本va午夜在线影院| 久久精品国产77777蜜臀| 一本色道久久综合亚洲二区三区| 免费观看成人网| 极品日韩久久| 裸体素人女欧美日韩| 午夜精品福利在线观看| 国产精品捆绑调教| 亚洲在线中文字幕| 亚洲天堂网在线观看| 欧美网站在线| 亚洲欧美激情一区| 亚洲一区二区三区视频| 国产精品美女在线观看| 午夜精品一区二区三区在线视 | 亚洲黄色三级| 免费欧美高清视频| 亚洲国产精品久久久久婷婷老年| 久久在线免费| 久久免费精品视频| 亚洲国产精品一区二区尤物区| 久久人人97超碰人人澡爱香蕉| 亚洲影院色在线观看免费| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 久久国产精品99国产| 国产一区二区三区日韩欧美| 久久久久.com| 久久精品理论片| 在线播放日韩| 亚洲国产精品国自产拍av秋霞| 欧美大片在线看| 亚洲天堂黄色| 午夜精品久久久久久久久久久久| 国产欧美一区二区精品秋霞影院| 久久久99免费视频| 美女图片一区二区| 一区二区三区三区在线| 亚洲欧美日韩精品久久| 精品成人a区在线观看| 欧美激情一区二区三区四区 | 一本色道久久综合狠狠躁篇怎么玩 | 欧美高清日韩| 欧美日韩国产综合视频在线观看中文| 一本色道久久综合狠狠躁篇的优点| 亚洲欧洲精品一区二区三区 | 亚洲免费电影在线观看| 一区二区三区你懂的| 国产一区二区高清| 亚洲激情中文1区| 国产精品夜夜夜| 亚洲高清自拍| 国产精品一区二区久久久久| 欧美激情国产日韩精品一区18| 欧美日韩理论| 久久免费偷拍视频| 国产精品成人午夜| 欧美成人蜜桃| 国产午夜精品福利| 亚洲欧洲在线免费| 国产主播一区二区三区四区| 亚洲免费成人av电影| 黄色国产精品| 亚洲一区免费看| 一本色道久久综合| 久久夜色精品国产亚洲aⅴ | 欧美日韩在线播放| 久久综合五月天婷婷伊人| 欧美日韩精品一本二本三本| 久久久五月天| 国产精品免费小视频| 亚洲国产综合91精品麻豆| 国产亚洲欧美另类中文| 在线综合欧美| 在线亚洲+欧美+日本专区| 老巨人导航500精品| 久久精品成人欧美大片古装| 欧美午夜精品久久久久久浪潮| 欧美刺激性大交免费视频| 国产一区导航| 欧美一级夜夜爽| 亚洲欧美在线看| 欧美色欧美亚洲另类七区| 亚洲三级电影在线观看| 亚洲国产精品悠悠久久琪琪| 久久aⅴ国产欧美74aaa| 亚洲欧美综合精品久久成人| 欧美日韩亚洲国产精品| 亚洲人精品午夜在线观看| 亚洲精品国产精品国自产观看浪潮| 久久精品伊人| 久久夜精品va视频免费观看| 国产一区二区三区精品久久久| 欧美在线首页| 久久一本综合频道| 国内视频一区| 久久久精品性| 免费看成人av| 9国产精品视频| 亚洲美女尤物影院| 日韩午夜在线观看视频| 欧美国产精品v| 亚洲日本理论电影| 国产精品99久久久久久久女警| 欧美日韩综合在线免费观看| 一本色道久久综合一区| 午夜一区不卡| 国产一区二区三区无遮挡| 久久精品国产成人| 欧美福利网址| 在线亚洲伦理| 国产精品呻吟| 久久成人资源| 亚洲国产精品女人久久久| 一区二区三区.www| 国产女人aaa级久久久级| 久久天堂国产精品| 日韩一区二区免费看| 欧美一区二区三区婷婷月色| 黑人中文字幕一区二区三区| 另类专区欧美制服同性| 亚洲看片一区| 久久久之久亚州精品露出| 亚洲三级国产| 国产香蕉97碰碰久久人人| 免费看精品久久片| 亚洲一区二区在线免费观看| 麻豆freexxxx性91精品| 日韩一级免费观看| 国产亚洲精品高潮| 欧美精品国产| 久久成人免费日本黄色| 9国产精品视频| 蜜桃av综合| 午夜宅男欧美| 日韩天堂在线视频| 国产亚洲欧美在线| 欧美日韩国产美女| 久久蜜桃精品| 午夜免费日韩视频| 亚洲精选在线观看| 免费成人av在线| 久久国产精品一区二区| 一区二区免费看| 亚洲大片免费看| 国产欧美一级| 国产精品久久久久久av福利软件| 开元免费观看欧美电视剧网站| 亚洲欧美国产三级| 99视频热这里只有精品免费| 欧美成人综合在线| 巨胸喷奶水www久久久免费动漫| 午夜精品久久|