Difference between revisions of "Dataserver/ja"

From Second Life Wiki
Jump to navigation Jump to search
m
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{LSL_Event/ja
{{Issues/SVC-2596}}{{LSL_Event/ja
|event_id=24|event_delay|event=dataserver
|event_id=24|event_delay|event=dataserver
|p1_type=key|p1_name=queryid|p1_desc=要求している関数の返り値と一致するもの。
|p1_type=key|p1_name=queryid|p1_desc=リクエストした関数の復帰値と一致します
|p2_type=string|p2_name=data|p2_desc=要求されたデータ(必要に応じてstringにキャストします)
|p2_type=string|p2_name=data|p2_desc=リクエストしたデータ (必要に応じて string に型変換)
|event_desc=タスクが非同期でデータを受け取るときに作動します。
|event_desc=タスクが非同期でデータを取得したときに発生します。
|constants
|constants
|spec
|spec
|constants={{{!}} {{Prettytable}}
|constants={{{!}} {{Prettytable|style=margin-top:0;}}
{{!}}- {{Hl2}}
{{!}}- {{Hl2}}
! 関数
! 関数
! colspan="2" {{!}}入力
! colspan="2" {{!}}入力
! デコード
! Decode
! colspan="4" {{!}} 解説
! colspan="4" {{!}} 説明
{{!}}-
{{!}}-
{{!}} colspan="3" {{!}} [[llGetNotecardLine/ja|llGetNotecardLine]]
{{!}} colspan="3" {{!}} {{LSLG/ja|llGetNotecardLine}}
{{!}} {{LSLG/ja|string}}
{{!}} {{LSLG|string}}
{{!}} colspan="4" {{!}} 要求されたノートカードの一行は、255byteを限度とします。<br/>要求された行が{{LSLG/ja|EOF}}の場合は、要求された一行はノートカードの最後として通知されます。
{{!}} colspan="4" {{!}} リクエストされたノートカードの行数は、 255 バイト以内である必要があります。 <br/> {{LSLG/ja|EOF}} の場合、リクエストされた行は最終行を超えています。
{{!}}-
{{!}}-
{{!}} colspan="3" {{!}} [[llGetNumberOfNotecardLines/ja|llGetNumberOfNotecardLines]]
{{!}} colspan="3" {{!}} {{LSLG/ja|llGetNumberOfNotecardLines}}
{{!}} ({{LSLG/ja|integer}})
{{!}} ({{LSLG/ja|integer}})
{{!}} colspan="4" {{!}} ノートカードの行数が要求されます。
{{!}} colspan="4" {{!}} リクエストしたノートカードの行数。
{{!}}-
{{!}}-
{{!}} rowspan="7" {{!}} [[llRequestAgentData/ja|llRequestAgentData]]
{{!}} rowspan="7" {{!}} {{LSLG/ja|llRequestAgentData}}
{{LSL Constants/llRequestAgentData/ja}}
{{LSL Constants/llRequestAgentData/ja}}
{{!}}-
{{!}}-
{{!}} rowspan="1" {{!}} [[llRequestInventoryData/ja|llRequestInventoryData]]
{{!}} colspan="3" {{!}} {{LSLG/ja|llRequestDisplayName}}
{{!}} ({{LSLG/ja|string}})
{{!}} colspan="4" {{!}} エージェントの表示名
{{!}}-
{{!}} colspan="3" {{!}} {{LSLG/ja|llRequestUsername}}
{{!}} ({{LSLG/ja|string}})
{{!}} colspan="4" {{!}} エージェントのユーザ名 (レガシー形式: "first.last")
{{!}}-
{{!}} rowspan="1" {{!}} {{LSLG/ja|llRequestInventoryData}}
{{LSL Constants/llRequestInventoryData/ja}}
{{LSL Constants/llRequestInventoryData/ja}}
{{!}}-
{{!}}-
{{!}} rowspan="9" {{!}} [[llRequestSimulatorData/ja|llRequestSimulatorData]]
{{!}} rowspan="9" {{!}} {{LSLG/ja|llRequestSimulatorData}}
{{LSL Constants/llRequestedSimulatorData/ja}}
{{LSL Constants/llRequestedSimulatorData/ja}}
{{!}}}
{{!}}}
|caveats
|caveats=
|examples=<pre>
*dataserver は必ずしもリクエストした順番を守って現れるわけではありません。
key kQuery;
**リクエストが複数たまることがある場合、常に queryid キーを使用して、どの回答を受け取ったかを判断するようにしましょう。
*dataserver をリクエストすると、リクエストのあったプリムと同じプリムの全てのスクリプトで '''dataserver''' イベントが発生します。
**同じプリムで '''dataserver''' イベントを複数発生させることがある場合、常に queryid キーを使用して、どの回答を受け取ったかを判断するようにしましょう。
**'''dataserver''' イベントは同じリンクセットの中の違うプリムの中のスクリプトでは発生しません。
*'''dataserver''' イベントの前に同じ query_id で他のデータがリクエストされていると、結果データはめちゃくちゃになります。データの破壊を防ぐには、 {{LSLG/ja|if}}(query_key == query_id) というような問い合わせを行ってください。しかしこれには欠点があります (上の警告を見てください) 。
|notes=*'''dataserver''' イベントでデータをリクエストしても全然いいのですが、イベントの中で無限ループが発生しないように気をつけてください。ループが終了するまでイベントは実行されっぱなしになり、そこで生成された全てのリクエストが最初の取得したときのデータで送りこまれることになります。
|examples=<source lang="lsl2">key kQuery;
integer iLine = 0;
integer iLine = 0;
default {
default {
Line 44: Line 58:


         if (query_id == kQuery) {
         if (query_id == kQuery) {
             // this is a line of our notecard
             // ノートカードの行数
             if (data == EOF) {     
             if (data == EOF) {     


Line 51: Line 65:
             } else {
             } else {


                 // increment line count
                 // 行数をインクリメント
                 llSay(0, "Line " + (string)iLine + ": " + data);
                 llSay(0, "Line " + (string)iLine + ": " + data);
                  
                  
                 //request next line
                 //次の行をリクエスト
                 ++iLine;
                 ++iLine;
                 kQuery = llGetNotecardLine("My Notecard", iLine);
                 kQuery = llGetNotecardLine("My Notecard", iLine);
Line 61: Line 75:
         }
         }
     }
     }
}
}</source>
</pre>
 
|helpers
|helpers
|also_header
|also_header
Line 79: Line 91:
|cat5=Script
|cat5=Script
|cat6=Prim
|cat6=Prim
|cat7=Avatar
|cat8=Avatar/Name
}}
}}

Latest revision as of 09:01, 21 February 2016

説明

イベント: dataserver( key queryid, string data ){ ; }

タスクが非同期でデータを取得したときに発生します。

• key queryid リクエストした関数の復帰値と一致します
• string data リクエストしたデータ (必要に応じて string に型変換)
関数 入力 Decode 説明
llGetNotecardLine string リクエストされたノートカードの行数は、 255 バイト以内である必要があります。
EOF の場合、リクエストされた行は最終行を超えています。
llGetNumberOfNotecardLines (integer) リクエストしたノートカードの行数。
llRequestAgentData DATA_ONLINE 1 (integer) boolean 要求されたエージェントがオンラインの場合
DATA_NAME 2 string 要求されたエージェント名
DATA_BORN 3 string YYYY-MM-DD の ISO 8601 フォーマットで文字列にした、アカウント作成 (誕生) 日
DATA_RATING 4 llCSV2List() 廃止: [0, 0, 0, 0, 0, 0]を返します。
[pos_behavior, neg_behavior, pos_appearance, neg_appearance, pos_building, neg_building] を返すために使用します。
DATA_PAYINFO 8 (integer) mask フラグ 説明
PAYMENT_INFO_ON_FILE 0x1 支払い情報登録済みの場合。
PAYMENT_INFO_USED 0x2 支払い情報使用済みの場合。
llRequestDisplayName (string) エージェントの表示名
llRequestUsername (string) エージェントのユーザ名 (レガシー形式: "first.last")
llRequestInventoryData ランドマーク (vector) global_position_of_landmark = llGetRegionCorner() + (vector)data;
llRequestSimulatorData DATA_SIM_POS 5 (vector) 地域の グローバル位置.
DATA_SIM_STATUS 6 string 説明
"up" 地域は現在稼働しています。
"down" 地域は現在稼働していません。
"starting" 地域は現在起動処理中です。
"stopping" 地域は現在停止処理中です。
"crashed" 地域はクラッシュしました。
"unknown" 地域のステータスは不明か、不明な地域です。
DATA_SIM_RATING 7 string 地域の区分 "PG"、 "MATURE"、 "UNKNOWN"

警告

  • dataserver は必ずしもリクエストした順番を守って現れるわけではありません。
    • リクエストが複数たまることがある場合、常に queryid キーを使用して、どの回答を受け取ったかを判断するようにしましょう。
  • dataserver をリクエストすると、リクエストのあったプリムと同じプリムの全てのスクリプトで dataserver イベントが発生します。
    • 同じプリムで dataserver イベントを複数発生させることがある場合、常に queryid キーを使用して、どの回答を受け取ったかを判断するようにしましょう。
    • dataserver イベントは同じリンクセットの中の違うプリムの中のスクリプトでは発生しません。
  • dataserver イベントの前に同じ query_id で他のデータがリクエストされていると、結果データはめちゃくちゃになります。データの破壊を防ぐには、 if(query_key == query_id) というような問い合わせを行ってください。しかしこれには欠点があります (上の警告を見てください) 。

サンプル

key kQuery;
integer iLine = 0;
default {
    
    state_entry() {
        llSay(0, "Reading notecard...");
        kQuery = llGetNotecardLine("My Notecard", iLine);
    }

    dataserver(key query_id, string data) {

        if (query_id == kQuery) {
            // ノートカードの行数
            if (data == EOF) {    

                llSay(0, "No more lines in notecard, read " + (string)iLine + " lines.");

            } else {

                // 行数をインクリメント
                llSay(0, "Line " + (string)iLine + ": " + data);
                
                //次の行をリクエスト
                ++iLine;
                kQuery = llGetNotecardLine("My Notecard", iLine);

            }
        }
    }
}

注意点

  • dataserver イベントでデータをリクエストしても全然いいのですが、イベントの中で無限ループが発生しないように気をつけてください。ループが終了するまでイベントは実行されっぱなしになり、そこで生成された全てのリクエストが最初の取得したときのデータで送りこまれることになります。

特記事項

議論

   Script dataserver events become permanently blocked until sim restart
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。