スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

HTTP-in(http server)を試してみる -基礎編-


一月ほど前に記事を書いていたHTTP-in

なかなか便利そうな機能なので、誰か試して結果などを読めるかなぁ・・・と思っていたのですが、全くと言って良いほど見かけません。

「自分でやるか・・・」と言うことになったのでした・・・

※あくまでもサンプルと言うことで簡単にしているので、エラー処理などは全く考えていません。
※自分の環境でこうやったら動いたと言う話なので、自己責任で試してください。
※でも、ここはこうした方が良いよと言うことがあれば指摘していただけると幸いです。

まず、基礎編のイメージですが

20090905_001
簡単に図にするとこんな感じです。
右の丸いのがサーバプリム(HTTP Server)、真ん中の四角いのがクライアントプリム(HTTP Client)になります。

 

1.サーバプリム側のスクリプト

   1: default
   2: {
   3:     state_entry() {
   4:         // 固有のURLを取得
   5:         llRequestURL();
   6:     }
   7:  
   8:     http_request(key id, string method, string body) {
   9:         if ((method == URL_REQUEST_GRANTED)){       // URLを取得したとき
  10:             llSay(0, "URL : " + body);
  11:         } else if (method == "POST") {              // 外部からの通信時
  12:             llHTTPResponse(id, 200, "Hello, " + llKey2Name((key)body));
  13:         }
  14:     }
  15: }

こんな感じになります。

5行目にあるように、最初にプリム固有のURLを取得しに行きます。

8行目以降がその処理になるのですが、http_requestメソッド内ではURL取得だけではなく、外部からの呼び出しがあった場合にも処理が発生するので、このように分けておく必要があります。

プリム固有のURL取得時には、この後で使うのでURLをSayしています。
外部からの通信時は、今回タッチしたアバターのKeyを受け取って、名前に変更して返信することにします(一応サーバ側で何らかの処理をしないとわかりにくいと思ったので・・・)。

 

2.サーバプリム固有のURLをチェック

保存して実行すると

[07:08]  HTTP Server: URL : http://sim2151.agni.lindenlab.com:12046/cap/31a92ea5-0cf9-deab-456b-edc4af6962a6

という感じにサーバプリム固有のURLが表示されるので、コピーしておきます。

※このURLは既に使えません。

 

3.クライアント側のスクリプト

   1: string SL_URL="http://sim2151.agni.lindenlab.com:12046/cap/e54c73b7-caaf-3a16-5b4d-9b575829a118";
   2: key AV_key;
   3: key requestid;
   4:  
   5: default
   6: {
   7:     touch_start(integer total_number){
   8:         AV_key = llDetectedKey(0);
   9:         state http_proc;
  10:     }
  11: }
  12:  
  13: state http_proc
  14: {
  15:     state_entry(){
  16:         // サーバプリムへ通信
  17:         requestid = llHTTPRequest(SL_URL, [HTTP_METHOD,"POST"], AV_key);
  18:     }
  19:  
  20:     http_response(key request_id, integer status, list metadata, string body){
  21:         if (request_id == requestid){           // 通信が返ってきたとき
  22:             if ( status == 200 ){               // 正常時
  23:                 llSay(0,body);
  24:             }
  25:         }
  26:         state default;
  27:     }
  28: }

こんな感じになります。

1行目に先ほどコピーしたサーバ固有のURLをペーストします。

プリムにタッチすると13行目以降のstateに変化します。

17行目でサーバプリム側にアバターのKeyを渡しています。

サーバプリムから通信が返ってくると、20行目のhttp_responseメソッドが実行されます。
21行目のように、送信時のidと比較して一致すれば対になる処理となるので先に進みます。

22行目で正常処理(200)であれば結果をSayして、defaultに戻ります。
ここで言う200は、サーバ側のスクリプト12行目で渡している200(HTTP処理正常終了コード)を表しています。
もしエラーコードによる処理を入れたければ、ここに記述するようになります。

クライアントプリムにタッチすると、

[07:09]  HTTP Client: Hello, Kagami Kohime

と言うように表示されれば成功です。

 

今回は単純な処理になっていますが、これを応用すれば、本店にノートカードやランドマークを置いておき、各支店にランドマーク配布用のオブジェクトを置けば、わざわざ支店全部の入れ替えをしなくて済みます。

また、各地のチップジャーの合計額を本店のチップジャーに表示するという、某チャリティー番組的なこともできるでしょう。

ただ、ここで一つ問題があります。

クライアント側のスクリプトで、1行目にサーバプリム固有のURLをコピーしていますね。
ここがまずいのです。

サーバプリム固有のURLと言うのが不変なら良いのですが、これがコロコロ変わります。
極端な話、スクリプトをリセットしたり、TakeしてRezするだけでURLが変わってしまいます。

これでは折角の機能なのに、うまくいきませんね・・・

そこで、応用編ではその辺りをうまく処理している方法をご紹介したいと思います。

スポンサーサイト

テーマ : セカンドライフ - ジャンル : オンラインゲーム

タグ : セカンドライフ Second Life SecondLife

コメント

簡単なWEB連携になりますね

サーバーを借りてDBにデータをストックし、WEBで来客と販売履歴を管理しています。顧客が増える度にサーバーの整備や古いデータのメンテナンス等を行っていて、とても大変な作業です。
プリムサーバーで2Mの制約の中で行ってもらって、データの保管や管理を丸投げ~~ってことにしたら、楽になるでしょうね。
コメントの投稿
管理者にだけ表示を許可する

FC2カウンター
プロフィール

Kagami Kohime Kagamin_Super

Author:Kagami Kohime

Second Life内では身長140cmのチビッコ。
最近みんなからは「かがみん」と呼ばれています。

これまで獲得した称号
「イベント王女」「誤爆女王」


Kagami Kohime Original Brand Shop「KagamiN-YA」もよろしくお願いします。

↓お店の位置はこちら
★音の森店

Second Life Marketplaceでのオンラインショッピングはこちらです

管理用リンク

最近の記事+コメント
最近のトラックバック
ブログ内検索
カレンダー(月別)
09 ≪│2017/10│≫ 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
カテゴリー
RSSフィード
QRコード
QRコード
メールフォーム

名前:
メール:
件名:
本文:

お遊び系のブログパーツ
★このFacebookプロフィール貼っておけば、毎回中の人男で・・・とか説明しなくて良いでしょうか・・・?
Katsumi Kenichi

バナーを作成

★ニコ動にアップした動画など


★ブログに妖精が・・・住み着いたようです・・・


★これまで入れたどのブログパーツよりも人気あるな、これ・・・


★XBox360好きなのですよ~。


★Second Lifeを起動していても、まだPCには余力があったりします。その余力をBOINCを使って社会貢献に役立ててみませんか?
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。