■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50

monazilla

397 :119 :2001/02/22(木) 22:48
type
 TNichDownloadEvent = procedure(Sender: TObject; Index1, Index2: Integer)
  of object; // Sender.Lines[Index1..Index2]をダウンロードした
 TNichDownloadableObject = class
 public
  property Url: String;
  proeprty Lines: TStrings; // TStringsで扱ってくれると楽チンなんだが...
 
  proeprty OnStartDownload: TNotifyEvent;
  property OnProgressDownload: TNotifyEvent;
  property OnFinishDownload: TNotifyEvent;
 end;

 TNichDownloadType = (dtAll, dtDiff); // 全て取得・差分のみ取得

 // 抽象ダウンローダ
 TNichCustomDownloader = class
 protected
  FList: TObjectDeque; // TNichDownloadableObjectのインスタンスを保持
 public
 property UseProxy: Boolean;
  property Proxy: String; // '0.0.0.0:8080'という形式が楽チン

  procedure StartDownload(Nich: TNichDownloadableObject;
   Whole: Boolean = False; // 全て取得(FALSEなら更新チェック&差分取得)
   Deferred: Boolean = False // 順番を後回しにする
    ); virtual; abstract;
  procedure CancelDownload(Url: String);

  proeprty OnStartDownload: TNotifyEvent;
  property OnProgressDownload: TNotifyEvent;
  property OnFinishDownload: TNotifyEvent;
 end;

 // ローカルキャッシュダウンローダ
 TNichCachedDownloader = class
 public
  property Size: Integer; // カレントキャッシュサイズ
  property MaxSize: Integer; // 最大キャッシュサイズ
  property Directory: String;
   // キャッシュディレクトリ
   // こればっかりはレジストリで設定すべき
  procedure Clean(LeftSizeMB: Integer; option...); // キャッシュをクリア
  procedure Write(nich: TNichDownloadableObject);
 end;

 // HTTPダウンローダ
 TNichHttpDownloader = class
 public
 end;

 // FTPダウンローダはいらないか...

 // 2chダウンローダ
 // やることはcache&httpからLines:TStringsへダウンロードするだけ。
 // Linesの解析は委譲元(nich: TDownloadableObject)が行う。
 // 開発初期段階はシングルスレッド版(StartDownloadを呼び、ダウンロード完了後に制御を戻す。
 //   途中でApplication.ProcessMessagesを呼ぶかもしれない)
 // 差分取得は全て取得してしまう。
 // 完成したら、順次マルチスレッド・差分取得を実装していく
 TNichDownloader = class
 protected
  cache: TNichCacheDownloader;
  http: TNichHttpDownloader;
 public
  procedure StartDownload(Nich: TNichDownloadableObject;
   Whole: Boolean; Deferred: Boolean);
  begin
   // cacheとhttpを組み合わせてダウンロード
   cache.StartDownload(Lines, Url, Whole, Deferred); // こっちはその場で復帰するはず
   http.StartDownload(Lines, Url, Whole, Deferred); // こっちはスレッドでダウンロードを開始するだけ
   // nichのイベントの発生のさせ方は一考の余地あり
   // ダウンロードが終わったらキャッシュする。
   cache.Write(Nich);
  end;
 end;

317KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30