*SSTP [#kb89d79b]
这里列出的消息結構仕様不包括舊仕様的NOTYFY/1.0、SEND/1.1-SEND/1.3、EXECUTE/1.0-EXECUTE/1.2,有興趣考古的朋友可以去最後的外部連結中查找。

#contents

**NOTYFY/1.1 [#s29e9b04]

 NOTIFY SSTP/1.1
 Sender: さくら
 Event: OnMusicPlay
 Reference0: 元祖高木ブー伝説
 Reference1: 筋肉少女帯
 IfGhost: なる,ゆうか
 Script: \h\s0‥‥\w8\w8高木ブーだね。 \u\s0‥‥\e
 IfGhost: さくら,うにゅう
 Script: \h\s0‥‥\w8\w8高木ブーだね。 \u\s0‥‥\w8\w8むう。 \e
 Option: nodescript,notranslate
 Charset: Shift_JIS
NOTIFY用於通知一般事件。 NOTIFY發送的數據通過SSTP服務器發送SHIORI請求到達SHIORI。 SHIORI會對此事件作出反應。~
使用NOTIFY做成的SSTP客戶端,程序員不一定要了解SHIORI反應的性質。不過,如果你學會SHIORI,整個結構可以較容易的明白。~

報頭描述~
|Charset|字符編碼 (必須)|
|Sender|發送方 (必須)|
|Event|事件標識符 (必須)|
|Reference*|參數信息|
|Script|SHIORI沒有對應的事件時,顯示的腳本|
|Entry|選項|
|Option|設置項|
|IfGhost|對象人格名|
|HWnd|窗口句柄|
|Locale|語言名(SSP擴張)|
|Marker|和SSTP標誌一起顯示的字符串|

***基本項 [#z0e5ed0e]

''Charset''~
請求主體和基本報頭(非DBCS,只有單字節字符在報頭)只使用ASCII碼。~
報頭中需要使用多字節字符的(Sender/Script/Sentence等)(發件人/腳本/句子)可以使用如下的字符集和編碼:
 ASCII
 Shift_JIS
 ISO-2022-JP
 EUC-JP
 UTF-8

除此之外可以參考[[字符集>http://www.iana.org/assignments/character-sets/character-sets.xml]]。~
~
''Locale''~
Charset的擴展,[[ISO 639>http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt]] (参考 :[[Wikipedia>http://en.wikipedia.org/wiki/ISO_639]])的完整形式指定。省略時為Japanese。~ 
SSP擴張。~
~
''Event''~
Event是SHIORI使用事件標識符來判斷事件的類型。雖然,沒有具體的命名規則。然而,建議使用簡單而獨特的命名。~
Reference* 是用來傳遞有關正確判斷事件的背景資料。例如,將歌的名字和歌手的參數信息給予事件OnMusicPlay。~
~
''Sender''~
Sender是指定SSTP的發送方。~

***保險反應事件通知 [#f1575713]
''Script''
用於SHIORI沒有對應的事件(SHIORI不發生反應),顯示Script報頭定義的腳本。~
然而,處於安全原因使用標籤有所限制。~
~
''Option''
 nodescript - 不顯示SSTP標記​​。
 notranslate -不轉譯。

當使用nodescript選項時,顯示腳本不帶SSTP標記​​。但只有來自本地機器的請求時,該選項才會有效。當請求是外部的,無論是否使用nodescript選項SSTP標記​​都會顯示。~
當使用notranslate選項時,該腳本顯示是不進行任何轉換的。~
多選時用逗號分隔。~
~
''IfGhost''~
用於保險反應的一般事件通知。~
 NOTIFY SSTP/1.1
 Sender: カードキャプター
 Event: OnRelease
 IfGhost: せりこ,まるちい
 Script: \0\s[0]封印解除。\e
 IfGhost: さくら,ケロ
 Script: \0\s[0]汝のあるべき姿に戻れ。\e
 Charset: Shift_JIS
以sakura.name,kero.name 形式指定,第一個項目是主體的名稱,第二項是使魔的名稱。該名稱應該完全對應,包括大寫和小寫字符。~

IfGhost是用來向一個特定的人格發送優化方案。在這個例子中,如果人格是“せりこ,まるちい”,顯示“封印解除。”。如果人格是“さくら,ケロ”,顯示“汝のあるべき姿に戻れ。”。 如人格都不是時,顯示第一個腳本“封印解除。”。~
CROW,ninix-aya 的 IfGhost 人格在現在的人格中沒有時,自動切換人格發言。~
~
''Entry''~
Entry用於選擇的接口。
 SEND SSTP/1.2
 Sender: カードキャプター
 Script: \h\s0どんな感じ? \n\n\q[まあまあ,#temp0]\q[今ひとつ,#temp1]\z
 Entry: #temp0,\h\s0ふーん。 \e
 Entry: #temp1,\h\s0酒に逃げるなヨ! \e
 Charset: Shift_JIS
這個例子顯示兩個選擇。如果您選擇“まあまあ”,服務器顯示“ふーん。",並返回”まあまあ“的返回值。~
 SSTP/1.1 200 OK[CRLF]
 [CRLF]
 まあまあ[CRLF]
 [CRLF]
入口發送Entry報頭,作為會話的臨時腳本儲存在服務器上。請參閱[[SakuraScript中"script"和"entry"的關係>開發文件/SakuraScript#z58e4ff6]]的相關。臨時腳本會在整個會話期間維持,但是當會話結束所有臨時項目將被銷毀。當權限是和SSTP一樣的危險標籤會被拒絕。~
選項要用#開頭~
選擇期間服務器和客戶端的進程都會被阻止。因此,“2秒原則”這裡並不適用,決定選擇前服務器不返迴響應。當返回了一個有效的選擇,服務器返回狀態碼“200”和返回值。當發生超時,服務器返回狀態碼“204”。最後,當收到SSTP中斷,服務器返回狀態碼“210”。~
~
可以和IfGhost混合使用~
 NOTIFY SSTP/1.1
 Sender: カードキャプター
 Event: OnRelease
 IfGhost: さくら,うにゅう
 Script: \h\s0さくらだー。 \w8\n\n\j[#mainblock]
 IfGhost: せりこ,まるちい
 Script: \h\s0せりこだー。 \w8\n\n\j[#mainblock]
 Entry: #mainblock,\s7寢言は寢てから言えっ! \w8\u\s0落ち著けっ! \e
 Charset: Shift_JIS
\j[#mainblock]為共通對話。~
~
''HWnd''
用於Direct SSTP通過窗口消息檢查偽春菜的狀態。~
 SEND SSTP/1.3
 Sender: カードキャプター
 HWnd: 1024
 Script: \h\s0どんな感じ? \n\n\q[まあまあ,#temp0]\q[今ひとつ,#temp1]\z
 Entry: #temp0,\m[1025,0,0]\h\s0ふーん。 \m[1025,0,1]\e
 Entry: #temp1,\m[1025,1,0]\h\s0酒に逃げるなヨ! \m[1025,1,1]\e
 Charset: Shift_JIS
此規範依賴於"Microsoft Windows"。這個例子顯示兩個選擇。如果您選擇“まあまあ”,服務器顯示“ふーん。",並在同一時間,postmessage(1024,1025,0,0)被執行,結束時postmessage(1024,1025,0,1)被執行。同樣,如果您選擇“今ひとつ”,postmessage(1024,1025,1,0)被執行,結束時postmessage(1024,1025,1,1)被執行。~
因此,客戶端可以知道目前偽春菜所解析的位置。~
HWnd報頭的窗口句柄之後將通過"\m"標籤被發送消息。請設置一個有效的窗口過程句​​柄。~
~
''Marker''~
用於執行Script時替換和SSTP標誌一起顯示的字符串。
(恐怕) Option為nodescript時,Marker無效。
SSP 拡張 (1.10.00 Pre6 追加) 。~

**SEND/1.4 [#k29dd06b]

 SEND SSTP/1.4
 Sender: カードキャプター
 IfGhost: さくら,うにゅう
 Script: \h\s0さくらだー。 \w8\n\n%j[#mainblock]
 IfGhost: せりこ,まるちい
 Script: \h\s0せりこだー。 \w8\n\n%j[#mainblock]
 IfGhost: さくら,ケロ
 Script: \u\s0わいのはモダン焼きにしてや~。 \w8\h\s0はいはい。 \e
 Entry: #mainblock,\s7寢言は寢てから言えっ! \w8\u\s0落ち著けっ! \e
 Charset: Shift_JIS

SEND請求只是用來發送SakuraScript的。腳本形式的發送數據用於發送腳本,並且多行將作為對話對待。~
由於可能會被人格無視,所以推薦使用NOTIFY。~
報頭描述
|Charset|字符編碼 (必須)|
|Sender|發送方 (必須)|
|Script|顯示的腳本(必須)|
|Entry|選項|
|Option|設置項|
|IfGhost|對象人格名|
|HWnd|窗口句柄|
|ID|無限権限実行指示|
***Owned SSTP [#vb2fa98b]
帶有特殊ID的SEND可以実行無限権限的Script,特徵如下:~
-可以使用所有命令
-時間限制無視(無Conflict)
-SSTP服務器無效也可傳遞
 SEND SSTP/1.4
 ID: bdf45602c68c26e4e8ed3de82225aaba
 Sender: test
 Script: \![vanishbymyself]

**EXECUTE/1.3 [#g5127204]
 EXECUTE SSTP/1.3
 Sender: サンプルプログラム
 Command: GetName
 Charset: Shift_JIS

EXECUTE用於執行一個無輸出的通用命令。~

報頭描述~
|Sender|發送人的程序名|
|Command|執行的命令|

無論是發件人和命令是必需的。如果其中一個沒有定義,服務器返回Bad Request。~
Command 報頭描述~
|GetName|獲取角色的名稱|EXECUTE/1.0|
|SetCookie[key,value]|設置cookie的值|EXECUTE/1.1|
|GetCookie[key]|從cookie獲取值|EXECUTE/1.1|
|GetVersion|獲得當前本體版本|EXECUTE/1.2|
|Quiet|啟用禁言|EXECUTE/1.3|
|Restore|取消禁言|EXECUTE/1.3|
|GetCollision|獲取觸碰判定|EXECUTE/1.4 (SSP 拡張)|
|ExtractArchive|壓縮文件解凍|(SSP 拡張)|
|GetNames|獲取所有角色的名稱|(ninix-aya拡張) |
|CheckQueue|隊列殘留的請求数|EXECUTE/1.0(ninix-aya拡張)|
|SetProperty[key,value]|服務器變量寫入|EXECUTE/1.1(CROW拡張)|
|GetProperty[key]|服務器變量讀出|EXECUTE/1.1(CROW拡張)|
~
''GetName''~
當GetName命令發送,服務器返回活動的角色的名稱(sakura.name 或 sakura.name,kero.name) 。客戶端可以知道服務器的名稱。客戶端可以更改句子和每個角色的進程。 (這包括取消。)~
如果該命令發送的未實現,服務器返回"Not Implemented"。~
~
''GetNames''~
服務器返回安裝的所有角色的名稱(sakura.name) 。客戶端可以知道服務器的名稱。客戶端可以更改句子和每個角色的進程。 (ninix-aya拡張。)~
~
''GetVersion''~
當GetVersion命令被發送,SSTP服務器返回一個識別版本的字符串。~
例如:"inverse" 17.00~
~
''GetCollision''~
發送
 EXECUTE SSTP/1.4
 Charset: Shift_JIS
 Sender: TestSSTP
 Command: GetCollision
 Reference0: 1

 EXECUTE SSTP/1.4
 Charset: Shift_JIS
 Sender: TestSSTP
 Command: GetCollision
 DestHWnd: 156480

返回觸碰判定
 SSTP/1.0 200 OK
 Head: 74,28,218,77
 Face: 100,82,196,123
 Bust: 98,181,196,226

Reference0為角色ID(sakura=0 kero=1)或DestHWnd的角色窗口指定。省略時為角色ID=0。~
詳細參照[[GetCollision拡張>http://ssp.shillest.net/docs/sstp_collision.txt]]~
~
''ExtractArchive''~
壓縮文件解凍指示。
|Reference0|壓縮文件名 (必須) |
|Reference1|解凍到文件夾(必須) |
|Reference2|解凍終了時的通知消息 (MSG,WPARAM,LPARAM) |
無Ref2時,解凍終了SSTP響應返回。有Ref2時,解凍準備完了SSTP響應返回,解凍終了消息發送。~
~
''SetCookie[key,value], GetCookie[key]''~
用來長時間保持變量。 SSTP的執行此命令實現"Cookie"作用。~

當SetCookie命令發送任何參數,該參數被存儲在服務器上並可以通過GetCookie訪問。~
要小心,因為只有存儲該參數的客戶端可以檢索存儲參數。~
當另一個客戶端嘗試檢索存儲的參數,檢索會失敗。這樣做是出於安全原因,並避免變量名稱衝突。~
如果GetCookie參數不存在,服務器將返回"No Content"。 (不為null)~
~
''Quiet, Restore''~
當Quiet命令被發送,SSTP服務器不會根據其自己的意志對話。此命令用途如下:~

當需要連續使用SEND時(角色極其依賴客戶端),在其之前使用Quiet命令以防打斷連續使用SEND。~

在發送Restore命令發送或等待16秒時,Quiet被釋放。~
在現階段,只有在和服務器相同的IP地址的客戶端可以發送Quiet到服務器。~
~
''CheckQueue''~
客戶端送信 SEND SSTP 内,返回隊列殘留的請求数。~
主要是SSTP Bottle客戶端用。~
ninix-aya 拡張~
~
''SetProperty[key,value], GetProperty[key]''~
SSTP服務器訪問系統和人格的變量。~
詳見[[CROW - テスト項目資料>http://crow.aqrs.jp/devtest.html]],[[ぽな@ばぐとら/仕様妄想メモ/プロパティシステム>http://ssp.shillest.net/specwiki/pukiwiki.php?%A4%DD%A4%CA%40%A4%D0%A4%B0%A4%C8%A4%E9%2F%BB%C5%CD%CD%CC%D1%C1%DB%A5%E1%A5%E2%2F%A5%D7%A5%ED%A5%D1%A5%C6%A5%A3%A5%B7%A5%B9%A5%C6%A5%E0]]。~
CROW 拡張~
~
**COMMUNICATE/1.1 [#e2982124]

 COMMUNICATE SSTP/1.1
 Sender: カードキャプター
 Sentence: 今日は寒いなー。
 Option: substitute
 Charset: Shift_JIS
COMMUNICATE/1.1是用來發送消息給“偽AI”(如問題,協議,請求等)。 (需要時)它返回任何反應和回答。這一請求始終假定與其他用戶或另一個“偽AI”溝通。~
在目前,這一請求只能用於從本地機器。 (如果這項請求是來自另一台計算機發送,它會被拒絕。)~

報頭描述~
 Sender - 發送人名
 Sentence - 句子
 Option - 選項
|Sender|發送人名|
|Sentence|句子|
|Option|選項|

無論是發件人和命令是必需的。如果其中一個沒有定義,服務器返回一個錯誤的請求。~
換行代碼是一個回車(CR:字符0x0D)+換行(LF:字符0x0A)。最後,當一個空行被發送,溝通結束,服務器返回一個狀態碼和可能存在的附加數據。~
字符代碼為對應的服務器發送的字符。~

選項開關描述~
 substitute - 使魔說的句子內容。

當使用substitute,使魔說句子內容。 ~
因此,一個沒有語言功能的客戶端可以請求對話代理處理使魔的COMMUNICATE請求。~

**COMMUNICATE/1.2 [#f07b42bb]

 COMMUNICATE SSTP/1.2
 Sender: 雙葉
 HWnd: 0
 Sentence: \0\s0どうも。 \e
 Surface: 0,10
 Reference0: N/A
 Charset: Shift_JIS
COMMUNICATE/1.2用於兩台服務器之間的通信。這一請求須依賴於SHIORI/2.1。只有SSTP服務器和SHIORI服務器可以使用這一請求。 (如SSP)~

請參閱SHIORI/2.1規範~

偽春菜返回從SHIORI/2.1到COMMUNICATION/1.2的回答,發送給服務器的請求消息從HWND或Port取得。因此,兩個服務器事實上進行通信。~
在目前,這一請求只能用於從本地機器。~

附加報頭描述~
 Sender 發送人名 
 Sentence 文章 
 Option 配置
 Port 接收方(提問人方)回應的端口號
 HWnd 從接收端(提問人方)回應的HWND窗口句柄,
 Surface 接收端(提問人方)現在的 surface ID、從左、sakura、kero 
 Reference*  接收端(提問人方)設置的任意的追加情報 
|Sender|發送人名| 
|Sentence|文章|
|Option|配置|
|Port|接收方(提問人方)回應的端口號|
|HWnd|從接收端(提問人方)回應的HWND窗口句柄|
|Surface|接收端(提問人方)現在的 surface ID、從左、sakura、kero |
|Reference*|接收端(提問人方)設置的任意的追加情報 |
**GIVE/1.1 [#s7202ce1]
&color(#ff0000){該請求不推薦使用,請使用其他請求來代替。};~
 GIVE SSTP/1.1
 Sender: カードキャプター
 Document: こんにちはさくらです。闇の力を秘めし鍵よ真の姿を我の前に示せレリーズ。汝のあるべき姿に戻れクロウカード。
 Charset: Shift_JIS

GIVE/1.1是用來給偽春菜發送待處理或作出反應的數據。
報頭描述
 Sender - 發送人的程序名
 Document - 文件
 Songname - 歌曲名稱

發送人和文件或歌名是必需的。如果其中一個沒有定義,服務器返回一個錯誤的請求。~
換行代碼是一個回車(CR:字符0x0D)+換行(LF:字符0x0A)。最後,當一個空行被發送,溝通結束,服務器返回一個狀態碼和可能存在的附加數據。~

數據源描述~
 Document - 任何文件
 Songname - 歌曲名稱

Document是文件數據。 偽春菜從發送的數據中提取可以理解的話。它將在未來用於談話。要確認偽春菜的資料學習,可看“AI狀態對話框”。~
Songname是歌的名字。 偽春菜整理髮送的數據和歌曲的數據庫。如果Songname在數據庫中找到,偽春菜發生找到歌曲的對話。 (請參閱歌曲重載。)請求收到之後,會立即處理。~
服務器發送任意的格式代碼(HTML標記等)。~

**INSTALL/1.0 [#qa7bd7dd]
SSP 拡張~
 INSTALL SSTP/1.0
 Sender: Angeliclayer
 Path: C:\temp\misakichi.nar
通常,NAR文件安裝通過文件或URI來DnD。INSTALL SSTP代替用戶DnD,從外部程序來安裝。~
詳見[[SSTP関連の資料 - とらぶる☆ばぐとらっく>http://ssp.shillest.net/docs/sstp.html]]。

**SSTP/1.5 [#l3eeabbb]
SSP 拡張~
SSTP/1.5用於IM for SSP,可以對特定人格對話目的使用。~
 SEND SSTP/1.5
 Ghost: えみりぃ
 Script: ユニコードっておいしい?\e
 Charset: UTF-8
 Locale: Japanese
 Port: 9821

Ghost,人格指定。沒有指定人格時按本体處理。不是SSP時由默認人格回話。SSP時,本体指定為桌面上的人格。~
Port,IM功能使用時,返信端口指定.受信用戶由此發送信息。該項可省略。~
--------------------------------
* 外部連結 [#p825db0d]
- [[伺か公式仕様書 SSTP>http://usada.sakura.vg/contents/sstp.html]]~
- [[大八洲.NET 非公式 SSTP/1.x プロトコル仕様書>http://www.ooyashima.net/db/sstp.html]]~
- [[駄でべWiki GetCollision拡張>http://emily.shillest.net/specwiki/index.php?SSP%2F%E4%BB%95%E6%A7%98%E6%9B%B8%2FEXECUTE%20SSTP%20GetCollision]]~
- [[SSTP関連の資料>http://ssp.shillest.net/docs/sstp.html]]~

首頁   編輯 差異 備份 上傳檔案 複製 變更名稱 重新載入   新建條目 一覽 搜索 最近的變更   幫助   最近更新的RSS