Restコンソール
From OpenSimulator
Contents |
REST コンソールについて
REST コンソールを使うと、OpenSimulator サービスのさまざまな管理をリモートで実行できるようになります。
このインターフェースを使うと、コマンドをサーバに送信し、結果を取得できるようになります。データの送受信は RESTful な HTTP で行われます。
送信は非常に単純ですが、受信はそうもいきません。CAPS URI に Long Poll を仕掛けて接続を維持しながら、 Reverse HTTP で受信します。
プロトコルの効率を上げるため、ヘルプ機能がクライアントに送信されます。キー入力の内容をいちいちサーバに送信するのではなく、入力チェックを通過したコマンドラインだけが送信されるようになっています。これを可能にするために、サーバは burst-on-connect でデータを送信します。データの内容は、発行できるコマンドの一覧と、ヘルプ情報となっています。この情報を使って、クライアントは "help" コマンドで表示される内容をローカルでも生成することができるようになっています。もちろん、インタラクティブにコマンドラインのヘルプを送信することもできます。
サンプルのコンソールクライアント、OpenSim.ConsoleClient.exe を見てみると、仕組みがわかると思います。
使い方
リモートコンソールを使うには、OpenSimulator 系のサービスを -console rest を引数に指定して起動します。
例:グリッドモードの Robust サーバの場合
mono Robust.exe -console rest
例:シミュレータの場合 (グリッド・スタンドアロン共通)
mono OpenSim.exe -console rest
構文
ここでは、OpenSimulator 系のサービスのアドレスが http://foo.bar:8002 になっていると仮定して説明します。
まず、HTTP POST リクエストを送信して新しいセションを開始します。ユーザ名とパスワードは、OpenSim.ini の [Network] セクションの ConsoleUser と ConsolePass と一致させる必要があります。
パラメタ: USER, PASS
http://foo.bar:8002/StartSession/
返答: (XML) <ConsoleSession><SessionID></SessionID><Prompt></Prompt></ConsoleSession>
これでセション ID が取得できました。これを使って、コマンドを送信して、結果を受信します。まず、コンソールのスクロールバック・バッファを取得しましょう。
パラメタ: なし
http://foo.bar:8002/ReadResponses/<SessionID>/
返答: (XML) <ConsoleSession><Line Number=x></Line></ConsoleSession>
レスポンスには、現在はバッファにある全ての行が含まれています。もう一度取得すると、新しい行だけが取得されます。データがない場合、30 秒間待機した後で、エラーを返します。クライアントは再試行 (ポーリング) する必要があります。
セション ID を ID パラメタの値に指定して、再度 POST リクエストを送信しましょう。
パラメタ: ID, COMMAND
http://foo.bar:8002/SessionCommand/
返答: (XML) <ConsoleSession><Result></Result></ConsoleSession>
全てがうまくいくと、コマンドが実行されるはずです。他のコマンドも試してみましょう。
コネクションを切断する際には、さらに POST リクエストを送信します。
パラメタ: ID
http://foo.bar:8002/CloseSession/
返答: (XML) <ConsoleSession><Result></Result></ConsoleSession>
セションが終了します。またコマンドを送信する場合は、再度ログインしなければならなくなります。
サンプル
RestConsole#Examples を見てください。