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

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

?? sconnect.pas

?? 這是一個三層的進銷存系統
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
      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
    if FSocket <> nil then FSocket.Close;
    FSocket := nil;
    FreeAndNil(FClientSocket);
    if FEvent <> 0 then WSACloseEvent(FEvent);
    FEvent := 0;
  end;
end;

function TSocketTransport.Receive(WaitForInput: Boolean; Context: Integer): IDataBlock;
var
  RetLen, Sig, StreamLen: Integer;
  P: Pointer;
  FDSet: TFDSet;
  TimeVal: PTimeVal;
  RetVal: Integer;
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);
  while StreamLen > 0 do
  begin
    RetLen := FSocket.ReceiveBuf(P^, StreamLen);
    if RetLen = 0 then
      raise ESocketConnectionError.CreateRes(@SSocketReadError);
    if RetLen > 0 then
    begin
      Dec(StreamLen, RetLen);
      Inc(Integer(P), RetLen);
    end;
  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)
//    else
//    Datain(Data);
end;

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


var
  ZlibFlag: array[1..4] of Char = ('Z', 'L', 'I', 'B');
  zFlag: Integer absolute ZlibFlag;

{procedure TSocketTransport.DataIn(const Data: IDataBlock);
var
  m, Size: Integer;
  InStream, OutStream: TMemoryStream;
  ZStream: TZDecompressionStream;
  p: Pointer;
begin
  InStream := nil;
  try
    // Skip BytesReserved bytes of data
    p := Pointer(Integer(Data.Memory) + Data.BytesReserved);
    Size := PInteger(p)^;
    p := Pointer(Integer(p) + SizeOf(Size));
    m := PInteger(p)^;
    if m <> zFlag then Exit;
    FUseZlib := True;
    Size := Size - 4;
    if Size <= 0 then Exit;
    p := Pointer(Integer(p) + SizeOf(m));
    InStream := TMemoryStream.Create;
    InStream.Write(p^, Data.Size - SizeOf(Size) - SizeOf(m));
    OutStream := TMemoryStream.Create;
    try
      InStream.Position := 0;
      ZStream := TZDecompressionStream.Create(InStream);
      try
        OutStream.CopyFrom(ZStream, Size);
      finally
        ZStream.Free;
      end;
      // Clear the datablock, then write the uncompressed data back into the datablock
      Data.Clear;
      Data.Write(OutStream.Memory^, OutStream.Size);
    finally
      if Assigned(OutStream) then OutStream.Free;
    end;
  finally
    if Assigned(InStream) then InStream.Free;
  end;
end;

procedure TSocketTransport.DataOut(const Data: IDataBlock);
var
  InStream, OutStream: TMemoryStream;
  ZStream: TZCompressionStream;
  Size: Integer;
begin
  InStream := nil;
  if not FUseZlib then Exit;
  try
    InStream := TMemoryStream.Create;
    // Skip BytesReserved bytes of data
    InStream.Write(Pointer(Integer(Data.Memory) + Data.BytesReserved)^, Data.Size);
    Size := InStream.Size;
    if Size = 0 then Exit;
    OutStream := TMemoryStream.Create;
    try
      ZStream := TZCompressionStream.Create(OutStream, zcFastest);
      try
        ZStream.CopyFrom(InStream, 0);
      finally
        ZStream.Free;
      end;
    // Clear the datablock, then write the compressed data back into the datablock
      Data.Clear;
      Size := Size + 4;
      Data.Write(Size, SizeOf(Integer));
      Data.Write(zFlag, SizeOf(Integer));
      Data.Write(OutStream.Memory^, OutStream.Size);
    finally
      OutStream.Free;
    end;
  finally
    if Assigned(InStream) then InStream.Free;
  end;
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 a

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人动漫在线观看| 一本色道综合亚洲| 色吧成人激情小说| 日韩欧美国产综合| 一区二区三区在线观看国产| 久久99国产精品久久99| 色国产综合视频| 久久久久国产精品麻豆| 婷婷激情综合网| 成人做爰69片免费看网站| 欧美一区二区视频网站| 亚洲免费av在线| 成人永久aaa| 久久综合九色综合97_久久久| 亚洲一卡二卡三卡四卡| 成人18视频在线播放| 精品sm在线观看| 日本亚洲欧美天堂免费| 欧美三区在线观看| 一二三四区精品视频| 菠萝蜜视频在线观看一区| 久久日一线二线三线suv| 婷婷综合久久一区二区三区| 91小视频在线| 综合色中文字幕| 国产suv一区二区三区88区| 精品免费日韩av| 婷婷开心激情综合| 6080国产精品一区二区| 午夜激情综合网| 在线播放中文一区| 视频一区中文字幕国产| 91麻豆精品国产91久久久久久久久 | 日本欧美大码aⅴ在线播放| 91在线porny国产在线看| 国产精品久久三区| 99精品欧美一区| 亚洲伦理在线精品| 欧美性三三影院| 三级亚洲高清视频| 日韩欧美亚洲国产另类| 蜜桃视频免费观看一区| 久久综合九色综合97婷婷 | 精品日韩一区二区| 精品亚洲成a人| 久久蜜桃av一区二区天堂| 国产伦理精品不卡| 国产女主播视频一区二区| 国产精品一区一区三区| 国产精品你懂的在线欣赏| 91在线视频在线| 亚洲一区二区三区视频在线播放| 欧美久久一二三四区| 无码av免费一区二区三区试看| 91精品国产手机| 国产成人免费视| 亚洲久草在线视频| 欧美一区二区三区在线视频| 国产专区综合网| 亚洲免费毛片网站| 91精品视频网| 国产盗摄视频一区二区三区| 亚洲激情自拍视频| 日韩欧美成人一区二区| 99久久亚洲一区二区三区青草 | 中文字幕亚洲在| 欧美日韩三级在线| 精品一二三四区| 中文字幕在线不卡国产视频| 欧美精品第1页| 国产精品一区二区果冻传媒| 亚洲最新在线观看| 亚洲精品一区二区三区四区高清 | 国产乱子伦视频一区二区三区| 亚洲视频网在线直播| 日韩视频一区二区在线观看| 972aa.com艺术欧美| 九九精品视频在线看| 亚洲综合一二三区| 久久久精品国产99久久精品芒果| 欧美性色黄大片| 成人午夜电影小说| 蜜桃视频在线一区| 一区二区三区在线观看视频| 国产欧美精品一区二区三区四区| 欧美三级视频在线| av色综合久久天堂av综合| 美女视频一区在线观看| 一区二区三区自拍| 国产精品免费久久| 久久久国产一区二区三区四区小说 | 男男视频亚洲欧美| 亚洲精品中文字幕乱码三区| 久久精品在线免费观看| 337p亚洲精品色噜噜狠狠| 99久精品国产| 国产激情精品久久久第一区二区| 午夜日韩在线电影| 亚洲欧美另类久久久精品2019| 久久精品一级爱片| www国产成人| 日韩欧美国产午夜精品| 欧美日韩一区二区不卡| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产成人高清在线| 国产综合成人久久大片91| 美国三级日本三级久久99| 视频一区在线播放| 日欧美一区二区| 爽好久久久欧美精品| 午夜精品在线看| 五月开心婷婷久久| 日韩国产在线观看| 首页亚洲欧美制服丝腿| 日韩av不卡在线观看| 日韩精品久久久久久| 日韩中文字幕区一区有砖一区| 亚洲综合激情另类小说区| 在线播放日韩导航| 高清不卡一区二区| 国产亚洲视频系列| 久久这里只有精品首页| 538在线一区二区精品国产| 国产凹凸在线观看一区二区| 久久久精品影视| 欧亚洲嫩模精品一区三区| 91污片在线观看| 91久久精品一区二区三区| 97se亚洲国产综合自在线不卡| 不卡一区在线观看| 色婷婷香蕉在线一区二区| 欧洲精品一区二区| 7777精品伊人久久久大香线蕉| 欧美三区在线观看| 日韩一区二区三区在线视频| 2023国产精品视频| 欧美激情中文字幕| 一区二区三区av电影| 性做久久久久久免费观看| 久久99热99| av在线不卡网| 欧美精品一级二级| 久久精品人人做| 亚洲精品第1页| 男女男精品视频| 白白色 亚洲乱淫| 欧美福利视频导航| 国产欧美日韩在线看| 夜夜嗨av一区二区三区四季av| 蜜乳av一区二区三区| 国内精品国产三级国产a久久| 大陆成人av片| 6080国产精品一区二区| 国产精品美女久久久久久久久久久 | 亚洲色图清纯唯美| 五月综合激情婷婷六月色窝| 日本va欧美va精品| 成人av免费网站| 欧美日本乱大交xxxxx| 欧美精品一区二区蜜臀亚洲| 亚洲欧美激情小说另类| 蜜臀久久久久久久| 成人黄色av电影| 欧美一区二区三区色| 1000精品久久久久久久久| 午夜久久电影网| 成人理论电影网| 日韩欧美激情四射| 亚洲第一主播视频| 不卡欧美aaaaa| 欧美va亚洲va国产综合| 亚洲一区二区三区中文字幕 | 欧美性一区二区| 国产精品视频九色porn| 极品少妇xxxx精品少妇偷拍 | 91在线精品一区二区| 2023国产精华国产精品| 日韩精品国产欧美| 欧美丝袜丝交足nylons| 中文字幕av在线一区二区三区| 日本vs亚洲vs韩国一区三区二区| 在线亚洲免费视频| 国产精品久久久久久久久晋中 | 欧美国产综合一区二区| 日本不卡视频一二三区| 91精彩视频在线观看| 欧美激情一区二区三区全黄 | 欧美激情一区在线| 国产精品一区二区在线观看不卡 | 成+人+亚洲+综合天堂| 久久先锋影音av鲁色资源网| 日本免费新一区视频| 欧美美女激情18p| 亚洲第一二三四区| 欧美三级日韩三级| 亚洲bt欧美bt精品| 欧美在线观看一区二区| 一区二区国产盗摄色噜噜| 91国偷自产一区二区三区成为亚洲经典 | 一本久久精品一区二区|