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

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

?? sconnect.pas

?? 在Midas數據庫編程中
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
  finally
    if DidConnect then InternalClose;
  end;
end;

function TStreamedConnection.GetInterceptorList: OleVariant;
var
  List: TStringList;
  i: Integer;
begin
  Result := NULL;
  List := TStringList.Create;
  try
    GetPacketInterceptorList(List);
    if List.Count > 0 then
    begin
      Result := VarArrayCreate([0, List.Count - 1], varOleStr);
      for i := 0 to List.Count - 1 do
        Result[i] := List[i];
    end;
  finally
    List.Free;
  end;
end;

function TStreamedConnection.GetHandle: THandle;
begin
  if FHandle = 0 then
    FHandle := AllocateHwnd(WndProc);
  Result := FHandle;
end;

procedure TStreamedConnection.WndProc(var Message: TMessage);
begin
  try
    Dispatch(Message);
  except
    if Assigned(ApplicationHandleException) then
      ApplicationHandleException(Self);
  end;
end;

procedure TStreamedConnection.ThreadReceivedStream(var Message: TMessage);
var
  Data: IDataBlock;
begin
  Data := IDataBlock(Message.lParam);
  Data._Release;
  Interpreter.InterpretData(Data);
end;

procedure TStreamedConnection.ThreadException(var Message: TMessage);
begin
  DoError(Exception(Message.lParam));
end;

procedure TStreamedConnection.DoError(E: Exception);
begin
  raise E;
end;

procedure TStreamedConnection.TransportTerminated(Sender: TObject);
begin
  FTransport := nil;
  SetConnected(False);
end;

procedure TStreamedConnection.DoConnect;
var
  TempStr: string;
begin
  try
    if ServerGUID <> '' then
      TempStr := ServerGUID else
      TempStr := ServerName;
    if TempStr = '' then
      raise Exception.CreateResFmt(@SServerNameBlank, [Name]);
    InternalOpen;
    SetAppServer(Interpreter.CallCreateObject(TempStr));
  except
    InternalClose;
    raise;
  end;
end;

procedure TStreamedConnection.DoDisconnect;
begin
  inherited DoDisconnect;
  InternalClose;
end;

function TStreamedConnection.CreateTransport: ITransport;
begin
  Result := nil;
end;

function TStreamedConnection.GetInterpreter: TCustomDataBlockInterpreter;
begin
  if not Assigned(FInterpreter) then
    FInterpreter := TDataBlockInterpreter.Create(Self, SSockets);
  Result := FInterpreter;
end;

{ TStreamedConnection.IUnknown }

function TStreamedConnection.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE;
end;

function TStreamedConnection._AddRef: Integer;
begin
  Inc(FRefCount);
  Result := FRefCount;
end;

function TStreamedConnection._Release: Integer;
begin
  Dec(FRefCount);
  Result := FRefCount;
end;

{ TStreamedConnection.ISendDataBlock }

function TStreamedConnection.Send(const Data: IDataBlock; WaitForResult: Boolean): IDataBlock;
var
  Msg: TMsg;
  Context: Integer;
begin
  if FSupportCallbacks then
  begin
    if not Assigned(FTransport) then Exit;
    Data._AddRef;
    PostThreadMessage(FTransport.ThreadID, THREAD_SENDSTREAM, Ord(WaitForResult),
      Integer(Pointer(Data)));
    if WaitForResult then
      while True do
      begin
        if GetMessage(Msg, FHandle, THREAD_RECEIVEDSTREAM, THREAD_EXCEPTION) then
        begin
          if Msg.message = THREAD_RECEIVEDSTREAM then
          begin
            Result := IDataBlock(Msg.lParam);
            Result._Release;
            if (Result.Signature and ResultSig) = ResultSig then
              break else
              Interpreter.InterpretData(Result);
          end
          else if Msg.Message <> WM_NULL then
            DoError(Exception(Msg.lParam))
          else
            raise Exception.CreateRes(@SReturnError);
        end else
          raise Exception.CreateRes(@SReturnError);
      end
    else
      GetMessage(Msg, FHandle, THREAD_SENDNOTIFY, THREAD_SENDNOTIFY);
  end else
  begin
    if not Assigned(FTransIntf) then Exit;
    Context := FTransIntf.Send(Data);
    Result := FTransIntf.Receive(WaitForResult, Context);
  end;
  if Assigned(Result) and ((Result.Signature and asMask) = asError) then
    Interpreter.InterpretData(Result);
end;

{ TSocketTransport }

constructor TSocketTransport.Create;
begin
  inherited Create;
  FInterceptor := nil;
  FEvent := 0;
end;

destructor TSocketTransport.Destroy;
begin
  FInterceptor := nil;
  SetConnected(False);
  inherited Destroy;
end;

function TSocketTransport.GetWaitEvent: THandle;
begin
  FEvent := WSACreateEvent;
  WSAEventSelect(FSocket.SocketHandle, FEvent, FD_READ or FD_CLOSE);
  Result := FEvent;
end;

function TSocketTransport.GetConnected: Boolean;
begin
  Result := (FSocket <> nil) and (FSocket.Connected);
end;

procedure TSocketTransport.SetConnected(Value: Boolean);
begin
  if GetConnected = Value then Exit;
  if Value then
  begin
    if (FAddress = '') and (FHost = '') then
      raise ESocketConnectionError.CreateRes(@SNoAddress);
    FClientSocket := TClientSocket.Create(nil);
    FClientSocket.ClientType := ctBlocking;
    FSocket := FClientSocket.Socket;
    FClientSocket.Port := FPort;
    if FAddress <> '' then
      FClientSocket.Address := FAddress else
      FClientSocket.Host := FHost;
    FClientSocket.Open;
  end else
  begin
    FSocket.Close;
    FClientSocket.Free;
    if FEvent <> 0 then WSACloseEvent(FEvent);
  end;
end;

function TSocketTransport.Receive(WaitForInput: Boolean; Context: Integer): IDataBlock;
var
  RetLen, Sig, StreamLen: Integer;
  P: Pointer;
  FDSet: TFDSet;
  TimeVal: PTimeVal;
  RetVal: Integer;
  bFirst: boolean; {##Fix By Manuel Parma mparma@usa.net}
begin
  Result := nil;
  TimeVal := nil;
  FD_ZERO(FDSet);
  FD_SET(FSocket.SocketHandle, FDSet);
  if not WaitForInput then
  begin
    New(TimeVal);
    TimeVal.tv_sec := 0;
    TimeVal.tv_usec := 1;
  end;
  RetVal := select(0, @FDSet, nil, nil, TimeVal);
  if Assigned(TimeVal) then
    FreeMem(TimeVal);
  if RetVal = SOCKET_ERROR then
    raise ESocketConnectionError.Create(SysErrorMessage(WSAGetLastError));
  if (RetVal = 0) then Exit;
  RetLen := FSocket.ReceiveBuf(Sig, SizeOf(Sig));
  if RetLen <> SizeOf(Sig) then
    raise ESocketConnectionError.CreateRes(@SSocketReadError);
  CheckSignature(Sig);
  RetLen := FSocket.ReceiveBuf(StreamLen, SizeOf(StreamLen));
  if RetLen = 0 then
    raise ESocketConnectionError.CreateRes(@SSocketReadError);
  if RetLen <> SizeOf(StreamLen) then
    raise ESocketConnectionError.CreateRes(@SSocketReadError);
  Result := TDataBlock.Create as IDataBlock;
  Result.Size := StreamLen;
  Result.Signature := Sig;
  P := Result.Memory;
  Inc(Integer(P), Result.BytesReserved);
 {this next line is for safety , because I detect one case where the code can't not read
  the first time, 60000 is tentative, maybe INFINITE is correct}
  if (StreamLen > 0) then  WaitForSingleObject(FEvent, INFINITE{60000});{##Fix By Manuel Parma mparma@usa.net}
 {the next line maybe I can don't use , but I keep it because the same case in first time}
  bFirst := True; {##Fix By Manuel Parma mparma@usa.net}

  while StreamLen > 0 do
  begin
    RetLen := FSocket.ReceiveBuf(P^, StreamLen);
    if RetLen = 0 then
    begin {##Fix By Manuel Parma mparma@usa.net}
      {this next line is because If you retry you get the correct data!!}
      if not bFirst then {##Fix By Manuel Parma mparma@usa.net}
          raise ESocketConnectionError.CreateRes(@SSocketReadError);

      bFirst := False; {##Fix By Manuel Parma mparma@usa.net}
    end; {##Fix By Manuel Parma mparma@usa.net}

    if RetLen > 0 then
    begin
      Dec(StreamLen, RetLen);
      Inc(Integer(P), RetLen);
    end;

    {##Fix By Manuel Parma mparma@usa.net}
    {This is the CODE this the more important part of the fix}
    if StreamLen > 0 then {Only when you need mare than one recv, i fyou put this code before
                           reveivebuf you are an step delayed  and the connection don't close
                           or has many time to read , because  WSAResetEvent(FEvent) in caller
                           function!}
    begin
      {I wait for read, maybe you can change 90000 with INFINITE}
      if (WaitForSingleObject(FEvent, INFINITE{90000}) = WAIT_OBJECT_0) then
      begin
        WSAResetEvent(FEvent);{I reset the event, very important because Wait don't work}
      end
      else
      begin
        raise ESocketConnectionError.Create('Read Error Single Object Timeout');
      end;
    end;
    {##End Fix By Manuel Parma mparma@usa.net}


  end;
  if StreamLen <> 0 then
    raise ESocketConnectionError.CreateRes(@SInvalidDataPacket);
  InterceptIncoming(Result);
end;

function TSocketTransport.Send(const Data: IDataBlock): Integer;
var
  P: Pointer;
begin
  Result := 0;
  InterceptOutgoing(Data);
  P := Data.Memory;
  FSocket.SendBuf(P^, Data.Size + Data.BytesReserved);
end;

function TSocketTransport.CheckInterceptor: Boolean;
var
  GUID: TGUID;
begin
  if not Assigned(FInterceptor) and (FInterceptGUID <> '') then
    if not FCreateAttempted then
    try
      FCreateAttempted := True;
      Guid := StringToGuid(FInterceptGUID);
      FInterceptor := CreateComObject(Guid) as IDataIntercept;
    except
      { raise no exception if the creating failed }
    end;
  Result := Assigned(FInterceptor);
end;

procedure TSocketTransport.InterceptIncoming(const Data: IDataBlock);
begin
  if CheckInterceptor then
    FInterceptor.DataIn(Data);
end;

procedure TSocketTransport.InterceptOutgoing(const Data: IDataBlock);
begin
  if CheckInterceptor then
    FInterceptor.DataOut(Data);
end;

{ TSocketConnection }

constructor TSocketConnection.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FPort := 211;
end;

function TSocketConnection.IsAddressStored: Boolean;
begin
  Result := (ObjectBroker = nil) and (Address <> '');
end;

procedure TSocketConnection.SetAddress(Value: string);
begin
  if Value <> '' then
    FHost := '';
  FAddress := Value;
end;

function TSocketConnection.IsHostStored: Boolean;
begin
  Result := (ObjectBroker = nil) and (Host <> '');
end;

procedure TSocketConnection.SetHost(Value: string);
begin
  if Value <> '' then
    FAddress := '';
  FHost := Value;
end;

function TSocketConnection.CreateTransport: ITransport;
var
  SocketTransport: TSocketTransport;
begin
  if SupportCallbacks then
    if not LoadWinSock2 then raise Exception.CreateRes(@SNoWinSock2);
  if (FAddress = '') and (FHost = '') then
    raise ESocketConnectionError.CreateRes(@SNoAddress);
  SocketTransport := TSocketTransport.Create;
  SocketTransport.Host := FHost;
  SocketTransport.Address := FAddress;
  SocketTransport.Port := FPort;
  SocketTransport.InterceptGUID := InterceptGUID;
  Result := SocketTransport as ITransport;
end;

procedure TSocketConnection.DoConnect;
var
  Comp: string;
  p, i: Integer;
begin
  if (ObjectBroker <> nil) then
  begin
    repeat
      if FAddress <> '' then
        Comp := FAddress else
      if FHost <> '' then
        Comp := FHost else
      if ServerGUID <> '' then
        Comp := ObjectBroker.GetComputerForGUID(GetServerCLSID) else
        Comp := ObjectBroker.GetComputerForProgID(ServerName);
      try
        p := ObjectBroker.GetPortForComputer(Comp);
        if p > 0 then
          FPort := p;
        p := 0;
        for i := 1 to Length(Comp) do
          if (Comp[i] in ['0'..'9', '.']) then
            Inc(p, Ord(Comp[i] = '.')) else
            break;
        if p <> 3 then
          Host := Comp else
          Address := Comp;
        inherited DoConnect;
        ObjectBroker.SetConnectStatus(Comp, True);
      except
        ObjectBroker.SetConnectStatus(Comp, False);
        FAddress := '';
        FHost := '';
  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99r国产精品| 日日摸夜夜添夜夜添精品视频| 91丨九色丨蝌蚪富婆spa| 麻豆精品一区二区| 亚洲精品国产品国语在线app| 91精品国产色综合久久不卡蜜臀 | 国产亚洲福利社区一区| 色婷婷av一区二区三区大白胸| 国产精品18久久久久久久久久久久| 亚洲综合色丁香婷婷六月图片| 国产精品视频在线看| 精品久久国产97色综合| 欧美一区二区免费观在线| 欧美午夜寂寞影院| 欧美性感一区二区三区| 色综合久久久网| 91丝袜国产在线播放| av一区二区三区在线| 国产91色综合久久免费分享| 国产老肥熟一区二区三区| 美国十次了思思久久精品导航| 偷拍亚洲欧洲综合| 蜜芽一区二区三区| 视频在线观看一区| 日韩成人av影视| 国产黄色91视频| 粉嫩久久99精品久久久久久夜| 成人国产精品免费观看动漫| 一本到不卡精品视频在线观看| 91蜜桃免费观看视频| 在线视频亚洲一区| 欧日韩精品视频| 精品国产亚洲在线| 国产精品看片你懂得| 亚洲欧美日韩成人高清在线一区| 丝袜诱惑亚洲看片| 色综合视频在线观看| 日本韩国欧美在线| 制服丝袜在线91| 久久精品一区二区三区不卡| 国产欧美精品一区二区色综合朱莉| 国产精品免费网站在线观看| 一区二区欧美国产| 一区二区三区中文字幕在线观看| 午夜不卡在线视频| 国产精品资源在线| 色综合久久天天综合网| 91美女在线看| 91精品国产综合久久婷婷香蕉 | 国产一区欧美日韩| av在线一区二区| 欧美精品三级日韩久久| 精品国产青草久久久久福利| 国产精品乱码久久久久久| 一区二区三区 在线观看视频| 日本亚洲一区二区| 9人人澡人人爽人人精品| 欧美日韩精品二区第二页| 久久亚洲影视婷婷| 国产欧美日韩不卡免费| 午夜精品一区二区三区免费视频 | 欧美精选午夜久久久乱码6080| 欧美一二三区精品| 中文字幕欧美一| 久久99精品久久久| 欧美伊人精品成人久久综合97| 欧美精品一区二区高清在线观看| 亚洲一区二区在线观看视频| 国产精品自在欧美一区| 欧美日韩一区二区三区在线看| 久久精品视频网| 日韩精品一区第一页| 色94色欧美sute亚洲线路一ni| 久久综合成人精品亚洲另类欧美| 国产精品无码永久免费888| 日韩成人一级片| 91精品91久久久中77777| 中文字幕电影一区| 另类成人小视频在线| 日韩你懂的在线观看| 亚洲自拍另类综合| 成人黄色国产精品网站大全在线免费观看| 3d动漫精品啪啪| 午夜精品一区二区三区电影天堂 | 亚洲精品视频在线| 99国产精品久久久久久久久久久 | 亚洲激情自拍偷拍| 一本一本大道香蕉久在线精品| 亚洲欧洲成人精品av97| 99久久99久久精品免费看蜜桃| 中文字幕色av一区二区三区| 91在线小视频| 亚洲国产色一区| 欧美日韩一区 二区 三区 久久精品| 亚洲一区二区av在线| 91精品国产乱| 国产一区二区福利视频| 综合色天天鬼久久鬼色| 在线视频你懂得一区二区三区| 亚洲444eee在线观看| 日韩三级高清在线| 懂色av噜噜一区二区三区av| 亚洲老妇xxxxxx| 欧美一区二区三区在线观看 | 欧美日韩在线免费视频| 麻豆精品视频在线| 国产精品免费久久久久| 欧美三级资源在线| 国产精品一二三区| 亚洲综合视频在线| 久久久久久久久一| 日本黄色一区二区| 国产福利一区在线观看| 美女视频一区在线观看| 国产精品美女久久久久久久网站| 欧美午夜片在线看| 韩国欧美国产1区| 亚洲高清免费观看高清完整版在线观看| 欧美一区二区不卡视频| 色综合久久久久综合| 国产真实乱子伦精品视频| 亚洲线精品一区二区三区八戒| www国产成人免费观看视频 深夜成人网| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 色综合色综合色综合色综合色综合| 日韩电影免费在线| 亚洲资源中文字幕| 中文字幕不卡一区| 精品成人a区在线观看| 欧美日韩一区二区不卡| 色综合久久久久久久久久久| 国产一区二区在线电影| 日韩精品电影在线观看| 亚洲三级免费观看| 国产精品热久久久久夜色精品三区 | 青青草国产精品亚洲专区无| 日韩美女视频一区二区 | 成人免费视频一区| 国产在线不卡一区| 日本不卡123| 亚洲18影院在线观看| 一区二区三区在线免费视频| 国产免费成人在线视频| 久久夜色精品一区| 精品成a人在线观看| 精品欧美一区二区三区精品久久 | 精品国产百合女同互慰| 欧美精三区欧美精三区| 欧美视频在线播放| 欧美午夜精品久久久久久孕妇| 91视视频在线观看入口直接观看www | 91精品在线麻豆| 欧美日韩国产一级| 欧美日韩在线播| 欧美日韩视频在线第一区| 日本电影亚洲天堂一区| 色综合天天综合网天天看片| 99这里只有精品| av一区二区不卡| 色综合夜色一区| 欧美午夜精品久久久久久孕妇| 在线影院国内精品| 欧美三片在线视频观看| 91精品国产手机| 2020日本不卡一区二区视频| 久久夜色精品国产噜噜av| 国产午夜精品久久久久久久 | 欧美v亚洲v综合ⅴ国产v| 日韩欧美成人激情| 久久综合色之久久综合| 国产日韩精品视频一区| 国产精品福利在线播放| 亚洲精品美腿丝袜| 午夜久久久影院| 蜜桃在线一区二区三区| 国产精品一区二区在线看| 不卡一区在线观看| 色综合激情久久| 日韩欧美成人午夜| 中文字幕在线不卡一区二区三区| 亚洲欧洲韩国日本视频| 亚洲自拍偷拍av| 韩国理伦片一区二区三区在线播放| 国产成人综合在线| 一本到三区不卡视频| 91精品福利在线一区二区三区| 久久婷婷久久一区二区三区| 国产精品久久久久久久久久久免费看| 亚洲人精品一区| 麻豆久久久久久久| caoporm超碰国产精品| 欧美日韩二区三区| 日本一区二区久久| 天天操天天综合网| av午夜精品一区二区三区| 欧美一区二区三区系列电影| 国产精品视频在线看| 日韩高清不卡一区二区三区| 成人av影视在线观看| 欧美一区二区免费|