共有変数プラグイン
SSP/2.2.42より標準添付された、ゴースト間共有変数処理用プラグインです。詳しくはreadme.txtを参照。
使ってみる
書き込み
readme.txtの41行目にOnSharedValueReadって書いてありますけどOnSharedValueWriteの間違いです。
{
_pluginID = 'ABED14AF-F34B-4ff2-95B7-30ED37D5802D'
_script = "\![raiseplugin,%(_pluginID),OnSharedValueWrite,きー,ばりゅー]"
_script += '\0かきこみー\e'
_script
}
readme.txtにもありますが、「ゴースト名」を指定することはできません。たぶんSenderを読んでるんだと思います(今回は「ごーすとじてん」)。別ゴースト領域への書き込みを防ぐための仕様のようです。
読み込み
{
_pluginID = 'ABED14AF-F34B-4ff2-95B7-30ED37D5802D'
_script = "\![raiseplugin,%(_pluginID),OnSharedValueRead,ごーすとじてん,きー,かー]\e"
_script
}
OnSharedValueRead
{
_script = '\0\_qごーすとじてんのでーた\n' + sys.fnc.ShowReference() + '\e'
_script
}
sys.fnc.ShowReference
{
_s = ''
for _i = 0; _i < ARRAYSIZE(reference); _i++ {
_s += "Reference%(_i): %(reference[_i])\n"
}
_s
}
//こんなresponseが返ってくる
//Reference0: ごーすとじてん
//Reference1: きー
//Reference2: ばりゅー
//Reference3: かー
先程保存した「きー」に対する「ばりゅー」が返ってきます。「かー」は存在しないので次のReferenceは空欄。これは他のGHOSTからも読めます(ていうかそのためのPLUGIN)。
リスト表示
{
_pluginID = 'ABED14AF-F34B-4ff2-95B7-30ED37D5802D'
_script = "\![raiseplugin,%(_pluginID),OnSharedValueGhostList]\e"
_script
}
OnSharedValueGhostList
{
_script = '\0\_q' + sys.fnc.ShowReference() + '\e'
_script
}
sys.fnc.ShowReference
{
_s = ''
for _i = 0; _i < ARRAYSIZE(reference); _i++ {
_s += "Reference%(_i): %(reference[_i])\n"
}
_s
}
//こんなresponseが返ってくる
//Reference0: ごーすとじてん
そのPLUGINを利用しているGHOSTのリストが返ってきます。
ちょっと意地悪をしてみる
SSPのタグを使わず直接PLUGINにrequestを投げてみます。
#define C_CRLF CHR(0xd)+CHR(0xa)
foo
{
_dll_path = '..\..\..\..\plugin\shared_value\shared_value.dll'
_r_load = LOADLIB(_dll_path)
if _r_load == 0 {
'\0失敗\e'
return
}
//ホントはLOAD直後にversionをリクエストするのが流儀
//だけど今回は省略
_reqheader = "/
GET PLUGIN/2.0%(C_CRLF)/
Charset: UTF-8%(C_CRLF)/
ID: OnSharedValueWrite%(C_CRLF)/
Sender: AYA%(C_CRLF)/
Reference0: hoge%(C_CRLF)/
Reference1: fuga%(C_CRLF)/
"
_reqheader += C_CRLF
_result = REQUESTLIB(_dll_path, _reqheader)//responseは 204 No Content
UNLOADLIB(_dll_path)
'\0書き込み完了\e'
}
YAYAはSAORIに限らず伺かのプロトコルなら何でも投げられます。今回はSenderをAYAとしたのでAYAさんの名前で保存されました。Senderを偽装ずれば他のGHOSTのデータを改竄できそう(やらないけど)。
何に使う?
YAYAから直接利用できたので当然他のPLUGINからも利用出来ます。ウチでも音楽再生PLUGINなどを公開していますが、再生リストを全てのGHOSTと共有可能にしてみるとか。音楽再生機能を持つGHOSTは数あれど、それぞれ登録し直さないといけないのも不便ですし。
…でもこれは全てのGHOSTに書き込み権限が無いと逆に不便ですね。もう少し色々考えてみようと思います。