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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rundb.~pas

?? M2原代碼 M2原代碼
?? ~PAS
字號:
unit RunDB;

interface
uses
  Windows,SysUtils,Grobal2,SDK,WinSock;
  procedure DBSocketThread(ThreadInfo:pTThreadInfo);stdcall;
  function DBSocketConnected():Boolean;
  function GetDBSockMsg(nQueryID:Integer;var nIdent:integer;var nRecog:integer;var sStr:String;dwTimeOut:LongWord;boLoadRcd:Boolean):Boolean;
  function MakeHumRcdFromLocal(var HumanRcd:THumDataInfo):Boolean;
  function LoadHumRcdFromDB(sAccount,sCharName,sStr:String;var HumanRcd:THumDataInfo;nCertCode:Integer):Boolean;
  function SaveHumRcdToDB(sAccount,sCharName:String;nSessionID:Integer;var HumanRcd:THumDataInfo):Boolean;
  function SaveRcd(sAccount,sCharName:String;nSessionID:Integer;var HumanRcd:THumDataInfo):Boolean; //004B42C8
  function LoadRcd(sAccount,sCharName,sStr:String;nCertCode:Integer;var HumanRcd:THumDataInfo):Boolean;
  procedure SendDBSockMsg(nQueryID:Integer;sMsg:String);
  function GetQueryID(Config:pTConfig):Integer;
implementation

uses M2Share, svMain, HUtil32, EDcode;
procedure DBSocketRead(Config:pTConfig);
var
  dwReceiveTimeTick:LongWord;
  nReceiveTime:Integer;
  sRecvText:String;
  nRecvLen:Integer;
  nRet:Integer;
begin
  if Config.DBSocket = INVALID_SOCKET then exit;

  dwReceiveTimeTick:=GetTickCount();
  nRet:=ioctlsocket(Config.DBSocket, FIONREAD, nRecvLen);
  if (nRet = SOCKET_ERROR) or (nRecvLen = 0) then begin
    nRet:=WSAGetLastError;
    Config.DBSocket:=INVALID_SOCKET;
    Sleep(100);
    Config.boDBSocketConnected:=False;
    exit;
  end;
  SetLength(sRecvText,nRecvLen);
  nRecvLen:=recv(Config.DBSocket,Pointer(sRecvText)^,nRecvLen,0);
  SetLength(sRecvText, nRecvLen);

  Inc(Config.nDBSocketRecvIncLen,nRecvLen);
  if (nRecvLen <> SOCKET_ERROR) and (nRecvLen > 0) then begin
    if nRecvLen > Config.nDBSocketRecvMaxLen then Config.nDBSocketRecvMaxLen:=nRecvLen;
    EnterCriticalSection(UserDBSection);
    try
      Config.sDBSocketRecvText:=Config.sDBSocketRecvText + sRecvText;
      if not Config.boDBSocketWorking then begin
        Config.sDBSocketRecvText:='';
      end;
    finally
      LeaveCriticalSection(UserDBSection);
    end;
  end;

  Inc(Config.nDBSocketRecvCount);
  nReceiveTime:=GetTickCount - dwReceiveTimeTick;
  if Config.nDBReceiveMaxTime < nReceiveTime then Config.nDBReceiveMaxTime:=nReceiveTime;
end;

procedure DBSocketProcess(Config:pTConfig;ThreadInfo:pTThreadInfo);
var
  s          :TSocket;
  name       :sockaddr_in;
  HostEnt    :PHostEnt;
  argp       :LongInt;
  readfds    :TFDSet;
  timeout    :TTimeVal;
  nRet       :Integer;
  boRecvData :BOOL;
  nRunTime   :Integer;
  dwRunTick  :LongWord;
begin
  s:=INVALID_SOCKET;
  if Config.DBSocket <> INVALID_SOCKET then
    s:= Config.DBSocket;
  dwRunTick:=GetTickCount();
  ThreadInfo.dwRunTick:=dwRunTick;
  boRecvData:=False;
  while True do begin
    if ThreadInfo.boTerminaled then break;
    if not boRecvData then Sleep(1)
    else Sleep(0);
    boRecvData:=False;
    nRunTime:=GetTickCount - ThreadInfo.dwRunTick;
    if ThreadInfo.nRunTime < nRunTime then ThreadInfo.nRunTime:=nRunTime;
    if ThreadInfo.nMaxRunTime < nRunTime then ThreadInfo.nMaxRunTime:=nRunTime;
    if GetTickCount - dwRunTick >= 1000 then begin
      dwRunTick:=GetTickCount();
      if ThreadInfo.nRunTime > 0 then Dec(ThreadInfo.nRunTime);
    end;

    ThreadInfo.dwRunTick:=GetTickCount();
    ThreadInfo.boActived:=True;
    ThreadInfo.nRunFlag:=125;
    if (Config.DBSocket = INVALID_SOCKET) or (s = INVALID_SOCKET) then begin
      if Config.DBSocket <> INVALID_SOCKET then begin
        Config.DBSocket := INVALID_SOCKET;
        Sleep(100);
        ThreadInfo.nRunFlag:=126;
        Config.boDBSocketConnected:=False;
      end;
      if s <> INVALID_SOCKET then begin
        closesocket(s);
        s:=INVALID_SOCKET;
      end;
      if Config.sDBAddr = '' then Continue;
        
      s:=socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
      if s = INVALID_SOCKET then Continue;

      ThreadInfo.nRunFlag:=127;

      HostEnt:=gethostbyname(PChar(@Config.sDBAddr[1]));
      if HostEnt = nil then Continue;

      PInteger(@name.sin_addr.S_addr)^:=PInteger(HostEnt.h_addr^)^;
      name.sin_family:=HostEnt.h_addrtype;
      name.sin_port:=htons(Config.nDBPort);
      name.sin_family:=PF_INET;

      ThreadInfo.nRunFlag:=128;
      if connect(s,name,SizeOf(name)) = SOCKET_ERROR then begin
        nRet:=WSAGetLastError;

        closesocket(s);
        s:=INVALID_SOCKET;
        Continue;
      end;

      argp:=1;
      if ioctlsocket(s,FIONBIO,argp) = SOCKET_ERROR then begin
        closesocket(s);
        s:=INVALID_SOCKET;
        Continue;
      end;
      ThreadInfo.nRunFlag:=129;
      Config.DBSocket:=s;
      Config.boDBSocketConnected:=True;
    end;
    readfds.fd_count:=1;
    readfds.fd_array[0]:=s;
    timeout.tv_sec:=0;
    timeout.tv_usec:=20;
    ThreadInfo.nRunFlag:=130;
    nRet:=select(0,@readfds,nil,nil,@timeout);
    if nRet = SOCKET_ERROR then begin
      ThreadInfo.nRunFlag:=131;
      nRet:=WSAGetLastError;
      if nRet = WSAEWOULDBLOCK then begin
        Sleep(10);
        Continue;
      end;
      ThreadInfo.nRunFlag:=132;
      nRet:=WSAGetLastError;
      Config.nDBSocketWSAErrCode:=nRet - WSABASEERR;
      Inc(Config.nDBSocketErrorCount);
      Config.DBSocket:=INVALID_SOCKET;
      Sleep(100);
      Config.boDBSocketConnected:=False;
      closesocket(s);
      s:=INVALID_SOCKET;
      Continue;
    end;
    boRecvData:=True;
    ThreadInfo.nRunFlag:=133;
    while True do begin
      if nRet <= 0 then break;
      DBSocketRead(Config);
      Dec(nRet);
    end;
  end;
  if Config.DBSocket <> INVALID_SOCKET then begin
    Config.DBSocket:=INVALID_SOCKET;
    Config.boDBSocketConnected:=False;
  end;
  if s <> INVALID_SOCKET then begin
    closesocket(s);
  end;
end;
procedure DBSocketThread(ThreadInfo:pTThreadInfo);stdcall;
var
  nErrorCount:Integer;
ResourceString
  sExceptionMsg = '[Exception] DBSocketThread';
begin
  nErrorCount:=0;
  while True do begin
    try
      DBSocketProcess(ThreadInfo.Config,ThreadInfo);
      break;
    except
      Inc(nErrorCount);
      if nErrorCount > 10 then break;
      MainOutMessage(sExceptionMsg);
    end;
  end;
  ExitThread(0);
end;

function DBSocketConnected():Boolean;
begin
{$IF DBSOCKETMODE = TIMERENGINE}
  Result:=FrmMain.DBSocket.Socket.Connected;
{$ELSE}
  Result:=g_Config.boDBSocketConnected;
{$IFEND}
end;

function GetDBSockMsg(nQueryID:Integer;var nIdent:integer;var nRecog:integer;var sStr:String;dwTimeOut:LongWord;boLoadRcd:Boolean):Boolean;
var
  boLoadDBOK:Boolean;
  dwTimeOutTick:LongWord;
  s24,s28,s2C,sCheckFlag,sDefMsg,s38:String;
  nLen:Integer;
  nCheckCode:Integer;
  DefMsg:TDefaultMessage;
ResourceString
  sLoadDBTimeOut = '[RunDB] 讀取人物數據超時...';
  sSaveDBTimeOut = '[RunDB] 保存人物數據超時...';
begin
  boLoadDBOK:=False;
  Result:=False;
  dwTimeOutTick:=GetTickCount();
  While(True) do begin
    if (GetTickCount - dwTimeOutTick) > dwTimeOut then begin
      n4EBB6C:=n4EBB68;
      break;
    end;
    s24:='';
    EnterCriticalSection(UserDBSection);
    try
      if Pos('!',g_Config.sDBSocketRecvText) > 0 then begin
        s24:=g_Config.sDBSocketRecvText;
        g_Config.sDBSocketRecvText:='';
      end;
    finally
      LeaveCriticalSection(UserDBSection);
    end;
    if s24 <> '' then begin
      s28:='';
      s24:=ArrestStringEx(s24,'#','!',s28);
      if s28 <> '' then begin
        s28:=GetValidStr3(s28, s2C, ['/']);
        nLen:=Length(s28);
        if (nLen >= SizeOf(TDefaultMessage)) and (Str_ToInt(s2C,0) = nQueryID) then begin
            nCheckCode:=MakeLong(Str_ToInt(s2C,0) xor 170,nLen);
            sCheckFlag:=EncodeBuffer(@nCheckCode,SizeOf(Integer));
            if CompareBackLStr(s28,sCheckFlag,Length(sCheckFlag)) then begin
              if nLen = DEFBLOCKSIZE then begin
                sDefMsg:=s28;
                s38:=''; // -> 004B3F56
              end else begin//004B3F1F
                sDefMsg:=Copy(s28,1,DEFBLOCKSIZE);
                s38:=Copy(s28,DEFBLOCKSIZE + 1,Length(s28) - DEFBLOCKSIZE -6);
              end;//004B3F56
              DefMsg:=DecodeMessage(sDefMsg);
              nIdent:=DefMsg.Ident;
              nRecog:=DefMsg.Recog;
              sStr:=s38;
              boLoadDBOK:=True;
              Result:=True;
              break;
            end else begin//004B3F87
              Inc(g_Config.nLoadDBErrorCount); // -> 004B3FA5
              break;
            end;
        end else begin//004B3F90
          Inc(g_Config.nLoadDBErrorCount);// -> 004B3FA5
          break;
        end;
      end;//004B3FA5
    end else begin//004B3F99
      Sleep(1);
    end;
  end;
  //end;//004B3FA5
  if not boLoadDBOK then begin
    if boLoadRcd then begin
      MainOutMessage(sLoadDBTimeOut);
    end else begin
      MainOutMessage(sSaveDBTimeOut);
    end;
  end;//004B3FD7
  if (GetTickCount - dwTimeOutTick) > dwRunDBTimeMax then begin
    dwRunDBTimeMax:=GetTickCount - dwTimeOutTick;
  end;
  g_Config.boDBSocketWorking:=False;
end;
function MakeHumRcdFromLocal(var HumanRcd:THumDataInfo):Boolean;
begin
  FillChar(HumanRcd,SizeOf(THumDataInfo),#0);
  HumanRcd.Data.Abil.Level:=30;
  Result:=True;
end;
function LoadHumRcdFromDB(sAccount,sCharName,sStr:String;var HumanRcd:THumDataInfo;nCertCode:Integer):Boolean; //004B3A68
begin
  Result:=False;
  FillChar(HumanRcd,SizeOf(THumDataInfo),#0);
  if LoadRcd(sAccount,sCharName,sStr,nCertCode,HumanRcd) then begin
    if (HumanRcd.Data.sChrName = sCharName) and ((HumanRcd.Data.sAccount = '') or (HumanRcd.Data.sAccount = sAccount)) then
      Result:=True;
  end;
  Inc(g_Config.nLoadDBCount);
end;
function SaveHumRcdToDB(sAccount,sCharName:String;nSessionID:Integer;var HumanRcd:THumDataInfo):Boolean; //004B3B5C
begin
  Result:=SaveRcd(sAccount,sCharName,nSessionID,HumanRcd);
  Inc(g_Config.nSaveDBCount);
end;
function SaveRcd(sAccount,sCharName:String;nSessionID:Integer;var HumanRcd:THumDataInfo):Boolean; //004B42C8
var
  nQueryID:Integer;
  nIdent:Integer;
  nRecog:Integer;
  sStr:String;
begin
  nQueryID:=GetQueryID(@g_Config);
  Result:=False;
  n4EBB68:=101;
  SendDBSockMsg(nQueryID,EncodeMessage(MakeDefaultMsg(DB_SAVEHUMANRCD,nSessionID,0,0,0)) + EncodeString(sAccount) + '/' + EncodeString(sCharName) + '/' + EncodeBuffer(@HumanRcd,SizeOf(THumDataInfo)));
  if GetDBSockMsg(nQueryID,nIdent,nRecog,sStr,5000,False) then begin
    if (nIdent = DBR_SAVEHUMANRCD) and (nRecog = 1) then
      Result:=True;
  end;
end;

//004B4080 
function LoadRcd(sAccount,sCharName,sStr:String;nCertCode:Integer;var HumanRcd:THumDataInfo):Boolean;
var
  Defmsg:TDefaultMessage;
  LoadHuman:TLoadHuman;
  nQueryID:Integer;
  nIdent,nRecog:Integer;
  sHumanRcdStr:String;
  sDBMsg,sDBCharName:String;
begin
  nQueryID:=GetQueryID(@g_Config);
  DefMsg:=MakeDefaultMsg(DB_LOADHUMANRCD,0,0,0,0);
  LoadHuman.sAccount:=sAccount;
  LoadHuman.sChrName:=sCharName;
  LoadHuman.sUserAddr:=sStr;
  LoadHuman.nSessionID:=nCertCode;

  sDBMsg:=EncodeMessage(DefMsg) + EncodeBuffer(@LoadHuman,SizeOf(TLoadHuman));
  n4EBB68:=100;
  {
  MainOutMessage('Send DB Socket Load HumRcd Msg ... ' +
                 LoadHuman.sAccount + '/' +
                 LoadHuman.sChrName + '/' +
                 LoadHuman.sUserAddr + '/' +
                 IntToStr(LoadHuman.nSessionID));
  }
  SendDBSockMsg(nQueryID,sDBMsg);
  if GetDBSockMsg(nQueryID,nIdent,nRecog,sHumanRcdStr,5000,True) then begin
    Result:=False;
    if nIdent = DBR_LOADHUMANRCD then begin
      if nRecog = 1 then begin
        sHumanRcdStr:=GetValidStr3(sHumanRcdStr,sDBMsg,['/']);
//        MainOutMessage(s24);
        sDBCharName:=DecodeString(sDBMsg);
        if sDBCharName = sCharName then begin
          if GetCodeMsgSize(SizeOf(THumDataInfo)*4/3) = length(sHumanRcdStr) then begin
            DecodeBuffer(sHumanRcdStr,@HumanRcd,SizeOf(THumDataInfo));
            Result:=True;
          end;
        end else Result:=False; //004B4267
      end else Result:=False; //004B426D
    end else Result:=False; //004B4273
  end else Result:=False; //004B4279
end;
//004B3BEC
procedure SendDBSockMsg(nQueryID:Integer;sMsg:String);
var
  sSendMsg:String;
  nCheckCode:Integer;
  sCheckStr:String;
  boSendData:Boolean;
  Config:pTConfig;
  ThreadInfo:pTThreadInfo;
  timeout:TTimeVal;
  writefds:TFDSet;
  nRet:Integer;
  s:TSocket;
begin
  Config:=@g_Config;
  ThreadInfo:=@g_Config.DBSocketThread;
  if not DBSocketConnected then exit;
  EnterCriticalSection(UserDBSection);
  try
    Config.sDBSocketRecvText:='';
  finally
    LeaveCriticalSection(UserDBSection);
  end;
  nCheckCode:=MakeLong(nQueryID xor 170,length(sMsg) + 6);
  sCheckStr:=EncodeBuffer(@nCheckCode,SizeOf(Integer));
  sSendMsg:='#' + IntToStr(nQueryID) + '/' + sMsg  + sCheckStr + '!';
  Config.boDBSocketWorking:=True;
{$IF DBSOCKETMODE = TIMERENGINE}
  FrmMain.DBSocket.Socket.SendText(sSendMsg);
{$ELSE}

  s:=Config.DBSocket;
  boSendData:=False;
  while True do begin
    if not boSendData then Sleep(1)
    else Sleep(0);
    boSendData:=False;
    ThreadInfo.dwRunTick:=GetTickCount();
    ThreadInfo.boActived:=True;
    ThreadInfo.nRunFlag:=128;

    ThreadInfo.nRunFlag:=129;
    timeout.tv_sec:=0;
    timeout.tv_usec:=20;

    writefds.fd_count:=1;
    writefds.fd_array[0]:=s;

    nRet:=select(0,nil,@writefds,nil,@timeout);
    if nRet = SOCKET_ERROR then begin
        nRet:=WSAGetLastError();
        Config.nDBSocketWSAErrCode:=nRet - WSABASEERR;
        Inc(Config.nDBSocketErrorCount);
        if nRet = WSAEWOULDBLOCK then begin
          Continue;
        end;
        if Config.DBSocket = INVALID_SOCKET then break;
        Config.DBSocket:=INVALID_SOCKET;
        Sleep(100);
        Config.boDBSocketConnected:=False;
        break;
    end;
    if nRet <= 0 then begin
      Continue;
    end;
    boSendData:=True;
    nRet:=send(s,sSendMsg[1],length(sSendMsg),0);
    if nRet = SOCKET_ERROR then begin
      Inc(Config.nDBSocketErrorCount);
      Config.nDBSocketWSAErrCode:=WSAGetLastError - WSABASEERR;
      Continue;
    end;
    Inc(Config.nDBSocketSendLen,nRet);
    break;
  end;  
{$IFEND}


end;

//004E3E04
function GetQueryID(Config:pTConfig):Integer;
begin
  Inc(Config.nDBQueryID);
  if Config.nDBQueryID >high(SmallInt) -1 then Config.nDBQueryID:=1;
  Result:=Config.nDBQueryID;
end;
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产免费人成在线观看| 国产毛片精品视频| 欧美国产欧美亚州国产日韩mv天天看完整| 91精品午夜视频| 欧美精品第1页| 欧美一区二区啪啪| 精品少妇一区二区三区日产乱码| 久久一夜天堂av一区二区三区| 欧美日韩dvd在线观看| 欧美一级片在线| 久久综合色一综合色88| 国产嫩草影院久久久久| 亚洲欧洲日产国码二区| 亚洲精品高清在线观看| 亚洲成人av在线电影| 麻豆精品一区二区综合av| 经典三级视频一区| 成人av网在线| 欧美在线你懂的| 91精品欧美一区二区三区综合在| 日韩欧美二区三区| 国产精品高清亚洲| 天天操天天干天天综合网| 久久福利视频一区二区| 99久久婷婷国产精品综合| 欧美三级中文字幕| 国产日产欧美一区二区三区| 中文字幕av不卡| 夜夜爽夜夜爽精品视频| 久久av中文字幕片| 久久激情综合网| 成人黄页毛片网站| 欧美精品日韩一区| 亚洲国产精品传媒在线观看| 亚洲午夜视频在线| 国产成人免费在线观看| 欧美视频一二三区| 国产精品美女久久久久久| 五月激情综合婷婷| hitomi一区二区三区精品| 7777精品伊人久久久大香线蕉完整版 | 日韩美女久久久| 秋霞电影网一区二区| 成人精品gif动图一区| 在线成人免费视频| 国产精品欧美综合在线| 亚洲一级二级三级在线免费观看| 国产一区二区三区四区五区入口| 色欧美日韩亚洲| 国产亚洲美州欧州综合国| 午夜视频在线观看一区二区| 成人ar影院免费观看视频| 欧美大片日本大片免费观看| 亚洲一区二区三区免费视频| 成人sese在线| 久久久久久久久久久久久女国产乱 | 久久久一区二区三区捆绑**| 亚洲午夜在线电影| 色综合中文字幕国产| 日本一区二区不卡视频| 国内精品伊人久久久久av影院 | 日韩免费电影网站| 婷婷国产v国产偷v亚洲高清| 色婷婷激情综合| 国产精品传媒入口麻豆| 国产sm精品调教视频网站| 2023国产精品视频| 韩国三级电影一区二区| 欧美一卡二卡在线| 蜜桃视频第一区免费观看| 欧美日韩不卡一区| 日韩电影在线免费看| 欧美放荡的少妇| 日韩高清在线不卡| 91精品国产综合久久福利软件| 婷婷夜色潮精品综合在线| 欧美日韩国产综合一区二区| 天天色天天爱天天射综合| 欧美一区二区三区在线观看| 婷婷中文字幕一区三区| 日韩精品一区二区三区视频在线观看| 男女视频一区二区| 久久奇米777| 不卡一区二区三区四区| 亚洲另类在线制服丝袜| 欧美三级电影在线观看| 蜜桃传媒麻豆第一区在线观看| 欧美一区二区不卡视频| 国产精品1区2区3区| 亚洲欧洲在线观看av| 欧美日韩一区三区| 午夜精品一区二区三区免费视频| 欧美一区二区美女| 大陆成人av片| 亚洲一区二区av在线| 日韩欧美精品在线视频| 国产米奇在线777精品观看| 国产精品毛片高清在线完整版| 在线视频综合导航| 久久99久久精品| 成人免费在线视频观看| 91.xcao| 成人亚洲精品久久久久软件| 一区二区三国产精华液| 26uuu亚洲| 色猫猫国产区一区二在线视频| 日本大胆欧美人术艺术动态| 国产日韩精品一区二区三区| 欧美无砖专区一中文字| 国产九色sp调教91| 亚洲国产精品尤物yw在线观看| 久久综合色天天久久综合图片| 色诱视频网站一区| 国产精品18久久久久久vr| 亚洲一区二区三区四区在线免费观看 | 日韩午夜小视频| 99riav一区二区三区| 久久超级碰视频| 亚洲综合色网站| 国产精品欧美经典| 欧美成人a∨高清免费观看| 欧美综合在线视频| 99综合电影在线视频| 国精品**一区二区三区在线蜜桃| 一区二区在线观看视频在线观看| 久久久久久久久一| 精品久久久久久久久久久久久久久久久 | 色老汉一区二区三区| 大胆亚洲人体视频| 九一九一国产精品| 婷婷久久综合九色综合伊人色| 国产精品久久精品日日| 久久青草国产手机看片福利盒子 | 亚洲成av人片在线观看无码| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产欧美一区二区三区鸳鸯浴| 欧美美女一区二区三区| 日本道在线观看一区二区| 国产精品夜夜嗨| 精品亚洲欧美一区| 亚洲v中文字幕| 成人免费一区二区三区视频| 欧美妇女性影城| 欧美日韩精品久久久| 色婷婷综合久久久中文一区二区 | 日本亚洲天堂网| 五月婷婷久久丁香| 亚洲第一成人在线| 亚洲综合图片区| 亚洲成av人在线观看| 五月激情综合色| 日韩成人午夜精品| 欧美国产精品久久| 国产亚洲一区二区三区四区| 久久综合九色综合欧美98| 精品美女一区二区| 久久精品男人的天堂| 中文字幕国产精品一区二区| 亚洲国产精品激情在线观看| 国产精品区一区二区三| 亚洲欧洲性图库| 亚洲午夜激情av| 首页欧美精品中文字幕| 蜜桃视频在线观看一区二区| 精品一区二区三区av| 国产黄色成人av| 色香色香欲天天天影视综合网| 欧美日韩一区二区在线观看视频| 51精品国自产在线| 制服视频三区第一页精品| 欧美精品一区二区三区在线| 国产精品日日摸夜夜摸av| 国产精品久久久久久久久免费丝袜| 亚洲四区在线观看| 日韩国产欧美在线视频| 国产成人综合亚洲网站| 91久久奴性调教| 日韩三级精品电影久久久| 中文乱码免费一区二区| 亚洲国产精品一区二区www在线 | 亚洲一区二区av电影| 奇米色777欧美一区二区| 国产成都精品91一区二区三| 色婷婷激情综合| www日韩大片| 亚洲一区成人在线| 国v精品久久久网| 欧美天堂一区二区三区| 精品福利av导航| 亚洲午夜国产一区99re久久| 国产精品一区二区视频| 欧美亚洲国产bt| 久久久www免费人成精品| 亚洲国产精品欧美一二99| 国产精品一区二区不卡| 91精品国产一区二区| 亚洲丝袜美腿综合| 国产精品一二三区在线| 欧美一区午夜视频在线观看| 综合激情成人伊人|