■スレッドリストへ戻る■ 全部 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