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

隨筆-341  評論-2670  文章-0  trackbacks-0
    這次展示如何將一個(gè)服務(wù)器端的C++類讓客戶端調(diào)用。使用早上剛剛開發(fā)完的工具,用戶可以不用處理任何傳輸過程中的連接和編碼解碼等操作。這次實(shí)現(xiàn)一個(gè)四則運(yùn)算的語法分析器,客戶端發(fā)送表達(dá)式,服務(wù)器端傳回語法樹(繼承樹那個(gè)模型),客戶端將語法樹傳回去,服務(wù)器端傳回運(yùn)算結(jié)果。

    首先在服務(wù)器端定義語法樹:
 1 class Expression : public VL_Base
 2 {
 3 public:
 4     typedef VL_AutoPtr<Expression>        Ptr;
 5 
 6     virtual VDouble Evaluate()
 7     {
 8         return 0;
 9     }
10 };
11 
12 class NumberExpression : public Expression
13 {
14 public:
15     VDouble                    Number;
16 
17     NumberExpression()
18     {
19         Number=0;
20     }
21 
22     NumberExpression(VDouble aNumber)
23     {
24         Number=aNumber;
25     }
26 
27     VDouble Evaluate()
28     {
29         return Number;
30     }
31 };
32 
33 enum BinaryType
34 {
35     btAdd,
36     btSub,
37     btMul,
38     btDiv
39 };
40 
41 class BinaryExpression : public Expression
42 {
43 public:
44     Expression::Ptr            Left;
45     Expression::Ptr            Right;
46     BinaryType                Type;
47 
48     BinaryExpression()
49     {
50         Type=btAdd;
51     }
52 
53     BinaryExpression(Expression::Ptr aLeft , Expression::Ptr aRight , BinaryType aType)
54     {
55         Left=aLeft;
56         Right=aRight;
57         Type=aType;
58     }
59 
60     VDouble Evaluate()
61     {
62         switch(Type)
63         {
64         case btAdd:
65             return Left->Evaluate()+Right->Evaluate();
66         case btSub:
67             return Left->Evaluate()-Right->Evaluate();
68         case btMul:
69             return Left->Evaluate()*Right->Evaluate();
70         case btDiv:
71             return Left->Evaluate()/Right->Evaluate();
72         default:
73             return 0;
74         }
75     }
76 };

    其次使用Combinator寫一個(gè)語法分析器:
 1 enum TokenType
 2 {
 3     ttNumber,
 4     ttAdd,
 5     ttSub,
 6     ttMul,
 7     ttDiv,
 8     ttLeft,
 9     ttRight
10 };
11 
12 Expression::Ptr CreateNumber(const VL_CpToken& Token)
13 {
14     return new NumberExpression(VUnicodeString(Token.Start,Token.Length).ToDouble());
15 }
16 
17 Expression::Ptr CreateBinary(const VL_CpPair<Expression::Ptr , VL_CpList<VL_CpPair<VL_CpToken , Expression::Ptr>>>& Input)
18 {
19     Expression::Ptr Result=Input.First;
20     VL_CpList<VL_CpPair<VL_CpToken , Expression::Ptr>>::Node::Ptr Current=Input.Second.Head;
21     while(Current)
22     {
23         switch(Current->Data.First.ID)
24         {
25         case ttAdd:
26             Result=new BinaryExpression(Result,Current->Data.Second,btAdd);
27             break;
28         case ttSub:
29             Result=new BinaryExpression(Result,Current->Data.Second,btSub);
30             break;
31         case ttMul:
32             Result=new BinaryExpression(Result,Current->Data.Second,btMul);
33             break;
34         case ttDiv:
35             Result=new BinaryExpression(Result,Current->Data.Second,btDiv);
36             break;
37         }
38         Current=Current->Next;
39     }
40     return Result;
41 }
42 
43 class ExpressionParser
44 {
45 public:
46     Expression::Ptr Parse(VUnicodeString Input)
47     {
48         VL_CpLexer Lexer;
49         Lexer
50             <<Token(false,_UnsignedFloat,ttNumber)
51             <<Token(false,L"+",ttAdd)
52             <<Token(false,L"-",ttSub)
53             <<Token(false,L"*",ttMul)
54             <<Token(false,L"/",ttDiv)
55             <<Token(false,L"(",ttLeft)
56             <<Token(false,L")",ttRight)
57             ;
58 
59         typedef VL_CpLexedTypes<Expression::Ptr> Types;
60         Types::Rule Factor,Term,Expr;
61 
62         Factor=(CreateNumber<<=Token(ttNumber))||(Token(ttLeft)>Expr<Token(ttRight));
63         Term=CreateBinary<<=(Factor+**((Token(ttMul)||Token(ttDiv))+Factor));
64         Expr=CreateBinary<<=(Term+**((Token(ttAdd)||Token(ttSub))+Term));
65         Types::Parser Parser=Expr;
66 
67         VL_CpLexer::_Result LexerResult=Lexer.Parse(Input.Buffer());
68         if(LexerResult.First.Head && !LexerResult.Second.First)
69         {
70             Types::Parser::_FullResult ParserResult=Parser.Parse(LexerResult.First.Head,true);
71             if(ParserResult.Head)
72             {
73                 return ParserResult.Head->Data.First;
74             }
75         }
76         return 0;
77     }
78 
79     VDouble Evaluate(Expression::Ptr Expr)
80     {
81         return Expr->Evaluate();
82     }
83 };

    最后將這4個(gè)類注冊進(jìn)服務(wù)器:
 1 /*********************************************************************************************************
 2 反射
 3 *********************************************************************************************************/
 4 
 5 VL_BEGIN_INSPECTOR_DECLARATION
 6 
 7     VL_BEGIN_BASE_CLASS(Expression)
 8     VL_END_CLASS(Expression)
 9 
10     VL_BEGIN_SUB_CLASS(NumberExpression,Expression)
11         VL_ADD_CLASS_MEMBER(Number)
12     VL_END_CLASS(NumberExpression)
13 
14     VL_BEGIN_ENUM(BinaryType,false)
15         VL_ADD_ENUM_MEMBER(btAdd)
16         VL_ADD_ENUM_MEMBER(btSub)
17         VL_ADD_ENUM_MEMBER(btMul)
18         VL_ADD_ENUM_MEMBER(btDiv)
19     VL_END_ENUM(BinaryType)
20 
21     VL_BEGIN_SUB_CLASS(BinaryExpression,Expression)
22         VL_ADD_CLASS_MEMBER(Left)
23         VL_ADD_CLASS_MEMBER(Right)
24         VL_ADD_CLASS_MEMBER(Type)
25     VL_END_CLASS(BinaryExpression)
26 
27     VL_BEGIN_BASE_CLASS(ExpressionParser)
28         VL_ADD_CLASS_METHOD(Parse)
29         VL_ADD_CLASS_METHOD(Evaluate)
30     VL_END_CLASS(ExpressionParser)
31 
32     VL_BEGIN_INSPECTOR_MANAGER(ExpressionManager)
33         VL_BIND_INSPECTOR(Expression)
34         VL_BIND_INSPECTOR(NumberExpression)
35         VL_BIND_INSPECTOR(BinaryExpression)
36         VL_BIND_INSPECTOR(ExpressionParser)
37     VL_END_INSPECTOR_MANAGER
38 
39 VL_END_INSPECTOR_DECLARATION
40 
41 /*********************************************************************************************************
42 主程序
43 *********************************************************************************************************/
44 
45 void vlmain()
46 {
47     GetConsole()->SetTitle(L"Vczh HTTP Server");
48     GetConsole()->SetTestMemoryLeaks(true);
49     GetConsole()->SetPauseOnExit(false);
50     GetConsole()->WriteLine(L"主機(jī)名稱:"+GetHostName());
51     GetConsole()->WriteLine(L"主機(jī)地址:"+GetIpv4Address());
52 
53     VL_ObjectServer Server(VL_GET_INSPECTOR_MANAGER(ExpressionManager),8080,8081,L"expression");
54     Server.Start();
55     GetConsole()->WriteLine(L"按回車結(jié)束服務(wù)程序:");
56     GetConsole()->WaitForEnter();
57 }

    注意代碼配置的HTTP端口是8080,Service端口是8081。首先是服務(wù)器端的截圖:

    然后就可以使用上面的地址(或者寫成localhost,如果是本地調(diào)試的話)和端口打開一個(gè)服務(wù)器自動產(chǎn)生的網(wǎng)站,在上面可以下載已經(jīng)生成的客戶端的代碼:


    建立一個(gè)客戶端工程,將這個(gè)遠(yuǎn)程調(diào)用的庫的源代碼包含進(jìn)去之后,將.h和.cpp下載了加進(jìn)工程,然后修改#include的地址,就可以編譯了:

    于是我們就可以立刻調(diào)用這個(gè)類了。注意算法的實(shí)現(xiàn)仍然在服務(wù)器端,生成的expression.h/.cpp只負(fù)責(zé)在網(wǎng)絡(luò)上傳輸你的參數(shù)和服務(wù)器的結(jié)果
 1 #include "..\..\..\..\VL++\Library\Platform\VL_Console.h"
 2 #include "expression.h"
 3 
 4 using namespace vl;
 5 using namespace vl::platform;
 6 
 7 void vlmain()
 8 {
 9     GetConsole()->SetTitle(L"Vczh HTTP Client");
10     GetConsole()->SetTestMemoryLeaks(true);
11     GetConsole()->SetPauseOnExit(true);
12 
13     try
14     {
15         ExpressionParser Parser;
16         VUnicodeString Input;
17         GetConsole()->WriteLine(L"請輸入四則運(yùn)算表達(dá)式,若直接回車則視為結(jié)束。");
18         while(true)
19         {
20             GetConsole()->Write(L"");
21             GetConsole()->Read(Input);
22             if(Input==L"")
23             {
24                 break;
25             }
26             VL_AutoPtr<Expression> Expr=Parser.Parse(Input);
27             if(Expr)
28             {
29                 GetConsole()->WriteLine(L"結(jié)果:"+VUnicodeString(Parser.Evaluate(Expr)));
30             }
31             else
32             {
33                 GetConsole()->WriteLine(L"出現(xiàn)語法錯誤。");
34             }
35         }
36     }
37     catch(const VL_ObjectClientError& e)
38     {
39         GetConsole()->WriteLine(L"發(fā)生錯誤:"+e.Message);
40     }
41     GetConsole()->WriteLine(L"結(jié)束運(yùn)行。");
42 }

    然后我們看看運(yùn)行結(jié)果:

    成功了!只需要在服務(wù)器端注冊一個(gè)類,客戶端就可以這么調(diào)用了。而且無論數(shù)據(jù)結(jié)構(gòu)有什么繼承還有各種各樣的容器都不成問題,還可以在不修改已有代碼的情況下,擴(kuò)展成支持STL或者其他各種容器的系統(tǒng)。

    最后附上服務(wù)器生成的客戶端頭文件和代碼文件。首先是頭文件:
 1 /*******************************************************************************
 2 Vczh Library++ 2.0
 3 C++遠(yuǎn)程對象客戶端::expression
 4 開發(fā)者:陳梓瀚
 5 
 6 *******************************************************************************/
 7 #ifndef VCZH_LIBRARY_PLUS_PLUS_2_0_C_PLUS_PLUS_REMOTE_OBJECT_CLIENT_EXPRESSION
 8 #define VCZH_LIBRARY_PLUS_PLUS_2_0_C_PLUS_PLUS_REMOTE_OBJECT_CLIENT_EXPRESSION
 9 
10 #include "Library\Data\Inspector\VL_ObjectClient.h"
11 
12 using namespace vl;
13 using namespace vl::collection;
14 using namespace vl::inspector;
15 
16 enum BinaryType
17 {
18     btAdd,
19     btDiv,
20     btMul,
21     btSub,
22 };
23 
24 class Expression : public VL_Base
25 {
26 public:
27 };
28 
29 class BinaryExpression : public Expression
30 {
31 public:
32     VL_AutoPtr<Expression> Left;
33     VL_AutoPtr<Expression> Right;
34     BinaryType Type;
35 };
36 
37 class ExpressionParser : public VL_ObjectClient
38 {
39 protected:
40     VL_InspectorManager::Ptr FManager;
41 
42     VL_InspectorManager::Ptr GetInspectorManager();
43 public:
44     ExpressionParser();
45 
46     VDouble Evaluate(VL_AutoPtr<Expression> _0);
47     VL_AutoPtr<Expression> Parse(VUnicodeString _0);
48 };
49 
50 class NumberExpression : public Expression
51 {
52 public:
53     VDouble Number;
54 };
55 
56 #endif

    然后是代碼文件:
 1 #include "expression.h"
 2 
 3 VL_BEGIN_INSPECTOR_DECLARATION
 4 
 5     VL_BEGIN_ENUM(BinaryType,false)
 6         VL_ADD_ENUM_MEMBER(btAdd)
 7         VL_ADD_ENUM_MEMBER(btDiv)
 8         VL_ADD_ENUM_MEMBER(btMul)
 9         VL_ADD_ENUM_MEMBER(btSub)
10     VL_END_ENUM(BinaryType)
11 
12     VL_BEGIN_BASE_CLASS(Expression)
13     VL_END_CLASS(Expression)
14 
15     VL_BEGIN_SUB_CLASS(BinaryExpression,Expression)
16         VL_ADD_CLASS_MEMBER(Left)
17         VL_ADD_CLASS_MEMBER(Right)
18         VL_ADD_CLASS_MEMBER(Type)
19     VL_END_CLASS(BinaryExpression)
20 
21     VL_BEGIN_BASE_CLASS(ExpressionParser)
22         VL_ADD_CLASS_METHOD(Evaluate)
23         VL_ADD_CLASS_METHOD(Parse)
24     VL_END_CLASS(ExpressionParser)
25 
26     VL_BEGIN_SUB_CLASS(NumberExpression,Expression)
27         VL_ADD_CLASS_MEMBER(Number)
28     VL_END_CLASS(NumberExpression)
29 
30     VL_BEGIN_INSPECTOR_MANAGER(expressionManager)
31         VL_BIND_INSPECTOR(BinaryType)
32         VL_BIND_INSPECTOR(Expression)
33         VL_BIND_INSPECTOR(BinaryExpression)
34         VL_BIND_INSPECTOR(ExpressionParser)
35         VL_BIND_INSPECTOR(NumberExpression)
36     VL_END_INSPECTOR_MANAGER
37 
38 VL_END_INSPECTOR_DECLARATION
39 
40 /*********************************************************************************************************
41 ExpressionParser
42 *********************************************************************************************************/
43 
44 VL_InspectorManager::Ptr ExpressionParser::GetInspectorManager()
45 {
46     return FManager;
47 }
48 
49 ExpressionParser::ExpressionParser():VL_ObjectClient(L"192.168.11.13:8081",L"ExpressionParser")
50 {
51     FManager=VL_GET_INSPECTOR_MANAGER(expressionManager);
52     SetMethodResult(L"Evaluate",FManager->GetInspector(L"VDouble"));
53     AddMethodParameter(L"Evaluate",FManager->GetInspector(L"Expression"));
54     SetMethodResult(L"Parse",FManager->GetInspector(L"Expression"));
55     AddMethodParameter(L"Parse",FManager->GetInspector(L"VUnicodeString"));
56 }
57 
58 VDouble ExpressionParser::Evaluate(VL_AutoPtr<Expression> _0)
59 {
60     VL_ObjectInspector::Ptr ResultInspector;
61     VDouble ResultVariable;
62     VPointer ResultData=&ResultVariable;
63     VPointer Parameters[1];
64     Parameters[0]=_0.Object();
65     Invoke(L"Evaluate",Parameters,ResultInspector,ResultData);
66     return ResultVariable;
67 }
68 
69 VL_AutoPtr<Expression> ExpressionParser::Parse(VUnicodeString _0)
70 {
71     VL_ObjectInspector::Ptr ResultInspector;
72     VPointer ResultData=0;
73     VPointer Parameters[1];
74     Parameters[0]=&_0;
75     Invoke(L"Parse",Parameters,ResultInspector,ResultData);
76     return (Expression*)ResultData;
77 }
78 

    現(xiàn)在只完成了單向操作,服務(wù)器端還不能調(diào)用客戶端提供的服務(wù)。等這個(gè)完成之后,就寫一個(gè)完整的Demo,然后把代碼放出來供下載。
posted on 2009-07-03 18:07 陳梓瀚(vczh) 閱讀(4170) 評論(14)  編輯 收藏 引用 所屬分類: C++

評論:
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-03 18:26 | Len3d_
能用來做網(wǎng)絡(luò)渲染否?  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-03 18:35 | Bill Hsu
這個(gè)很強(qiáng)……  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-03 18:40 | XXOOXX
對象打包和解包的DEMO么。
不錯的。
  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-03 21:55 | 陳梓瀚(vczh)
@Len3d_
以后加入對stream的支持,就可以了。  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-03 23:45 | 99網(wǎng)上書城
對象打包和解包的DEMO么。
不錯的。  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-04 00:27 | shuren99
對象打包和解包的DEMO么  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-04 02:32 | 路南平
很好 學(xué)習(xí)了  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-04 04:42 | 空明流轉(zhuǎn)
你要能把那個(gè)類注冊去掉,就神了。  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-05 18:00 | 巫云
類注冊恐怕很難去掉吧,樓主這個(gè)是不是類似MS的DCOM了?  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-05 18:09 | 陳梓瀚(vczh)
@巫云
類似web service  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-06 21:09 | 凡客誠品
不錯  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-06 21:10 | 凡客誠品
@99網(wǎng)上書城
不錯啊你!  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-07-07 22:41 | SOS
拍手。  回復(fù)  更多評論
  
# re: 實(shí)現(xiàn)C++遠(yuǎn)程調(diào)用類的操作。 2009-11-12 21:15 | linclon
樓主很強(qiáng),很佩服!  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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国内精品久久| 欧美一进一出视频| 欧美成人有码| 在线综合亚洲| 久久先锋影音av| 欧美日韩三级| 国产综合香蕉五月婷在线| 亚洲全部视频| 欧美一级专区免费大片| 欧美高清视频一区二区三区在线观看 | 免费观看国产成人| 欧美午夜激情视频| 国产亚洲一区在线| 99re6这里只有精品视频在线观看| 亚洲天堂免费观看| 久久婷婷蜜乳一本欲蜜臀| 91久久久久久久久久久久久| 欧美国产日本| 亚洲免费小视频| 欧美另类在线观看| 激情久久五月天| 亚洲午夜视频| 亚洲第一主播视频| av成人国产| 久久一二三区| 亚洲网站在线看| 欧美精品1区2区| 精品不卡在线| 久久激情视频| 亚洲亚洲精品在线观看| 欧美**字幕| 激情另类综合| 久久国产精品久久久久久久久久| 亚洲精品国产精品国自产在线| 久久国产精品久久w女人spa| 国产精品国产福利国产秒拍| 日韩一级欧洲| 欧美大香线蕉线伊人久久国产精品| 亚洲一区影音先锋| 国产精品xxxav免费视频| 亚洲国产成人精品久久| 浪潮色综合久久天堂| 欧美伊人久久久久久久久影院| 国产精品久久久一区麻豆最新章节 | 免费视频亚洲| 欧美在线观看天堂一区二区三区| 国产精品欧美精品| 亚洲伊人伊色伊影伊综合网| 亚洲国产视频一区| 免费试看一区| 亚洲国产精品一区二区www| 久久久久se| 久久本道综合色狠狠五月| 国产三级欧美三级| 久久久亚洲一区| 久久久国产精品一区二区中文| 国模精品一区二区三区| 久久精品99久久香蕉国产色戒 | 欧美激情久久久久久| 久久成人免费视频| 狠狠色狠狠色综合| 欧美成人69av| 欧美福利视频网站| 一本色道久久综合| 亚洲午夜精品久久| 国内精品一区二区三区| 免费看亚洲片| 欧美美女福利视频| 亚洲综合日韩中文字幕v在线| 亚洲自拍都市欧美小说| 国产资源精品在线观看| 免费在线成人| 欧美日韩国产亚洲一区| 欧美一级艳片视频免费观看| 久久精品视频免费观看| 日韩午夜在线电影| 亚洲欧美日韩在线观看a三区| 一区精品在线播放| 日韩视频专区| 狠狠入ady亚洲精品经典电影| 亚洲精品日本| 亚洲一区二区毛片| 亚洲国产精品成人综合色在线婷婷 | 亚洲影院免费| 在线成人av网站| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美性猛片xxxx免费看久爱| 久久久久久婷| 欧美日韩午夜精品| 久久躁狠狠躁夜夜爽| 欧美人与性禽动交情品| 久久成人免费视频| 欧美日韩国产天堂| 免费在线日韩av| 国产美女一区二区| 亚洲精品女av网站| 国产女人aaa级久久久级| 亚洲福利视频二区| 国产一区二区三区四区五区美女| 亚洲日韩视频| 在线观看成人一级片| 亚洲一区二区三区四区五区黄| 亚洲国产老妈| 久久精品在这里| 欧美在线欧美在线| 欧美性猛交xxxx乱大交蜜桃| 欧美激情一区二区三区成人| 国产美女精品在线| 亚洲一区国产视频| 亚洲视频在线观看视频| 狼人天天伊人久久| 久久视频免费观看| 国产精品一区二区久久精品| 一二三区精品福利视频| 日韩午夜剧场| 欧美精品一区二区三区在线播放| 免播放器亚洲| 在线日韩视频| 久久人91精品久久久久久不卡 | 蜜桃av一区二区在线观看| 国产精品亚洲成人| 亚洲一区精品电影| 午夜精品久久久久久99热| 欧美日韩在线亚洲一区蜜芽| 亚洲精品一区二区三区福利| 亚洲精品欧美日韩| 欧美区在线观看| 日韩视频三区| 亚洲永久免费视频| 国产精品日韩一区二区三区| 亚洲欧美美女| 久久久久久久一区| 影音先锋国产精品| 欧美成人高清| 亚洲国产毛片完整版| 99热免费精品在线观看| 欧美日韩精品伦理作品在线免费观看 | 亚洲激情视频在线| 日韩视频免费| 国产精品99久久久久久久女警 | 欧美日一区二区在线观看| 亚洲欧洲精品一区二区| 一区二区三区欧美视频| 欧美亚男人的天堂| 亚洲欧美一区二区视频| 久久久水蜜桃| 亚洲日本成人女熟在线观看| 欧美日本一区二区三区| 中国女人久久久| 久久精品亚洲一区| 亚洲经典一区| 国产精品国产三级国产aⅴ浪潮| 亚洲在线视频| 欧美成人三级在线| 亚洲一级黄色片| 好看的日韩视频| 欧美理论片在线观看| 亚洲午夜av在线| 免费不卡在线观看av| 亚洲精品影院在线观看| 国产精品久久久久久久午夜| 久久久青草婷婷精品综合日韩| 亚洲国产片色| 欧美一区二区啪啪| 亚洲精品偷拍| 国产亚洲一区在线播放| 欧美人与性动交a欧美精品| 欧美一级片一区| 亚洲精品一区二区三区不| 卡通动漫国产精品| 亚洲欧美在线免费观看| 亚洲福利国产| 国产区精品视频| 欧美日韩国内自拍| 蜜臀99久久精品久久久久久软件| 亚洲图片欧洲图片av| 亚洲春色另类小说| 久久久91精品| 一区二区激情小说| 在线观看日韩av电影| 国产精品一区二区三区久久| 欧美福利在线观看| 久久久久久久波多野高潮日日| 中文国产成人精品久久一| 欧美黄色成人网| 玖玖玖免费嫩草在线影院一区| 午夜精品久久久久久久蜜桃app| 亚洲激情网站| 激情综合色综合久久| 国产欧美一区二区精品性|