Seamonkey の SilentDownload 機能


作成日:1998 年 12 月 18 日
最終更新日:1999 年 1 月 13 日
連絡先: Doug Turner


概要

SilentDownload とはバックグラウンドでファイルを転送する機能の事で、 利用者がネットワークを不必要に混雑させる事なくファイルをダウンロード できるようにするものです。どうしてこのようなことが可能なのかというと、 SilentDownload はネットワークが混雑していないときにのみファイルを ダウンロードするためです。利用者は長時間にわたって大きなサイズのファイルを 「静かにダウンロード」 でき、転送が完了した際には通知を受け取る事ができます。

SilentDownload は JavaScript API を備えおり、これによってサイトが 新たなファイル転送を SilentDownload に 「加える」 ことができるように なっています。こうした SilentDownload API は、API の発信者がデジタル認証され、 SilentDownload する許可を受ける、という一連のセキュリティ認証を全て行います。 一旦新たなファイル転送が予約されると、 ユーザーインターフェイスを通して認証者かエンドユーザーしか 変更を加える事ができません。

SilentDownload はまた XPCOM からもアクセスが可能です。つまり、Seamonkey のどこからでも SilentDownload のコントロールが可能なのです。例えば、 コンテキスト・メニュー (右クリックすると出てくるメニュー) を利用する事によってユーザーがアイテムを SilentDownload するよう予約する事も できます。

摘要

エンドユーザーにソフトウェアを送りたい、という場合について考えてください。 現在の方法ですと、エンドユーザー自身がリンクをクリックするか、 SmartUpdate 立ち上げなければなりません。どちらの方法も、ダウンロードの間その進展状況を 表示し、できるだけ大きなネットワーク転送容量を確保しようとします。 SilentDownload はこうした方法の単なる代替手段以上の優れた機能を提供します。

SilentDownload は何でもダウンロードする事ができますが、 基本的には native installer をダウンロードするためか、SmartUpdate 用に作られています。その JavaScript は次のような感じに記述されているはずです。



au = SilentDownload.find("CoolSoftware")
if (au == null)
{
  au = new SilentDownloadTask();
  au.Init("CoolSoftware",
    "http://home.foo.com/download/5.1/SilentDownload.jar",
    "http://home.foo.com/download/5.1/SilentDownload.html"); 
}

switch (au.state)
{
  case SilentDownloadTask.SDL_ERROR:
    au.Remove();
    break;
  case SilentDownloadTask.SDL_COMPLETE:
    au.Remove();
    // open the downloaded jar file, which puts up the
    // UI and does the install break;
}


ご覧のように、スクリプトはきわめて簡単なもの (また部分的には psudo-code ) です。ユーザーが始めてこのスクリプトを作動させた場合、 CoolSoftware に対しての問い合わせ (query) は失敗するでしょう。 というのも、au が NULL となっているためで、この場合は新しく SilentDownloadTask を生成します。次に SilentDownloadTask を、キー値 (key value) 、ダウンロードする URL 、そしてコールバック用のスクリプト を読み込んで初期化します。 キー値 (key value) は人間が読めるような文字列でなければなりません。 この数値はユーザーインターフェイス上で利用者に表示されます。 ダウンロードする URL は説明不要ですね。 コールバック用のスクリプト、またはコールバック・スクリプトとは、 SilentDownloadTask の状況が変化したり、 SilentDownload を始めに立ち上げた際に呼び出されるスクリプトのことです。

SielntDownload は定期的に、SilentDownloadTask の Init() 関数 に引き渡された JavaScript を読み込みます。この JavaScript は、 普通上に書かれた例と同じフォーマットになります。このスクリプトは、 SilentDownload の Find() 関数を利用してキー値 (key value)を探そうとします。 この試みに失敗した場合、スクリプトは新たな SilentDownloadTask を始めます。 問題のなく SilentDownload のタスクを始められたら、 次にそのタスクの state value をチェックします。 これにより、対象のタスクがどういう状態になっているのかが分かります。

SilentDownloadTask は、変にいじらない限り大抵問題は起きません。 しかし、次の二つのことは大切です。一つは、SDL_COMPLETE について。 タスクの state value がこの SDL_COMPLETE と同じになった時に、 ダウンロードが完了したことになります。この場合はどのようなことをしても 問題はありません。例えば、ダウンロードしたものが SmartUpdate の場合、 ダウンロードしたものの新しい画面を表示することもできます。 二つ目に気をつけなければならないのは、SDL_ERROR についてです。 これが現われたときには、ダウンロード作業に何か問題が起きて、 作業が回復不可能になってしまっているのです。 この二つのことが起こった場合には、SilentDownloadTask の Remove() 関数を呼び出し、SilentDownloadTask() を取り除かなければ なりません。

このスクリプトを書いて、ソフトウェアをパッケージ化してしまったら、 それを Byte Range 対応のサーバにアップロードします。 利用しているサーバのタイプが分からない場合には、 管理者の方に確認をして下さい。また、もし SmartUpdate の jar 形式のファイルを扱おうと考えているのであれば、 サーバ上の JAR アーカイブの MIME 形式が application/java-archive と設定されているか確認をして下さい。

API

SilentDownloadTask

    コンストラクター (Constructor)。 新たな SilentDownloadTask を始めます。 SilentDownloadTask オブジェクトの状態は SDL_NOT_INITED となります。

SilentDownloadTask.Init(ID, download_URL, callbackJavascript_URL);

    SilentDownload によるダウンロードを設定します。このメソッド (method) に伝えられた情報は、全て持続的な記憶領域 (persistent store) に格納されます。 ID は人が目で確認できる一意の文字列で、callbackJavascript_URL と the download_URL は文字列です。SilentDownloadTask の状態は、SDL_STARTED となります。

SilentDownloadTask.Suspend();

    SilentDownloadTask をサスペンドします。 サスペンドされた SilentDownload を再開させるのは、ダウンロード・スクリプト 製作者の責任です。 SilentDownload オブジェクトの状態は SUSPEND となります。

SilentDownloadTask.Resume();

    SilentDownloadTask を再開します。 (i.e. ユーザーのディスクにデータのダウンロードを開始しますが、 バックグラウンドで行われます。) SilentDownload オブジェクトの状態は、 ダウンロード中は常に、SDL_STARTED となります。

SilentDownloadTask.Remove();

    ダウンロードされたデータを取り除いたり、 このオブジェクトに関する持続的な記憶領域 (persistent store) からのエントリーを削除します。 この API は、SilentDownloadTask が完全に終了した段階で呼び出されなければ なりません。この API が呼び出されることにより、JavaScript コールバック が作動しなくなります。

SilentDownloadTask.DownloadNow();

    その時点でのネットワークの混雑状況に関係なく、 ダウンロードを直ちに開始します。SilentDownload オブジェクトの状態は、 DOWNLOADING_NOW となります。

SilentDownloadTask.ID

    SilentDownloadTask を探す際の手がかりとなる読取専用の文字列。

SilentDownloadTask.URL

    ダウンロードされる URL を示した読取専用の文字列。

SilentDownloadTask.Script

    進行中の SilentDownloadTask のための JavaScript コールバック。

SilentDownloadTask.State

    SilentDownloadTask の状態を示す読取専用の整数 (integer)。

SilentDownloadTask.NextByte

    次にアイドル状態になったときに、SilentDownload が読み込むべき ファイルのバイト情報。

SilentDownloadTask.OutFile

    ファイルがユーザーのコンピュータに保存される際のディレクトリ情報。

SilentDownloadTask.ErrorMsg

    人が読んで理解可能な最後の文字列メッセージ。

SilentDownload

    全ての SilentDownload タスクのデータや機能をつかさどる state class 。

SilentDownload.Find(id)

    パラメーター ID に一致する SilentDownloadTask を返します。 一致する値がない場合は、null が返されます。

SilentDownload.Range

    アイドル・タイムの間にダウンロードするバイト・カウント。

SilentDownload.Interval

    アイドル時間をチェックする間隔を表したマイクロ秒。 (単なる秒単位にした方がいいでしょうか?)