SSTP関連ソフトウエア間通信規格(FINE)†
SSTP Bottle ClientなどのメッセージングツールにSARSなどのエディタからスクリプトを投げたり、その他色々と関連ソフトウエア間で通信するための規格。
※名称'FINE(フィーネ)'は特に何かの略称ではなく、SERIKO規格のように名前を当てただけです。
サーバ要件†
'Fine'FMOの保持†
FINEクライアントがFINEサーバの存在を感知し、情報を得るためにFMO'Fine'を保持する。
FMOへのアクセスはMUTEXによる排他制御が必須である。(制御用MUTEXは'FineFMO')
FMO書式は次の通り。
メモリマップ†
本体書式†
アプリケーション名:プロパティ名:値[cr][lf]
HWndプロパティ、Capabilityプロパティ及びServerVersionプロパティは必須。
その他のプロパティ名はサブ規格毎に定義される。
アプリケーション名、プロパティ名、プロパティ値に : 及び @ 記号を用いてはならない。
終端は0x00とする。0x00が現れた以降のエントリは無効である。
使用可能な文字コードはShift_JISとする。
例
TalkCapsule@83908390:HWnd:xxxxxxxx[cr][lf]
TalkCapsule@83908390:Target:○○(800)[cr][lf]
TalkCapsule@83908390:Capability:MessageSend[cr][lf]
TalkCapsule@83908390:ServerVersion:0.2.0.0[cr][lf]
SSTP Bottle@76607660:HWnd:xxxxxxxx[cr][lf]
SSTP Bottle@76607660:Target:駅前繁華街[cr][lf]
SSTP Bottle@76607660:Target:海浜公園街[cr][lf]
SSTP Bottle@76607660:Capability:MessageSend,SetScript,SetScriptPartial[cr][lf]
SSTP Bottle@76607660:ServerVersion:2.70[cr][lf]
BoIP@99999999:HWnd:xxxxxxxxxx[cr][lf]
BoIP@99999999:Target:ぼとるいぬごや(嘘)[cr][lf]
BoIP@99999999:Capability:MessageSend[cr][lf]
BoIP@99999999:ServerVersion:0.83d[cr][lf]
SARS@37564000:HWnd:xxxxxxxxxx[cr][lf]
SARS@37564000:Capability:SetScript,SetScriptPartial[cr][lf]
SARS@37564000:ServerVersion:2.9.1.42087[cr][lf][0x00]
- アプリケーション名
アプリケーション名は、アプリケーション側での二重起動時のFMO破壊を防止する等の目的で、
アプリケーション名@固有ID
という書式を用いてもよい。
クライアント側は、@ 記号を認識して適宜それを分割して認識してもよい。
- Capabilityプロパティ
Capabilityプロパティには、サーバがどのFINEサブ規格に対応可能かを記述する。
内容はイベント名からOnFINEを取った形でカンマ区切りで列挙する。
例
SARS:Capability:SetScript,SetScriptPartial
BottleClient:Capability:MessageSend,SetScript,SetScriptPartial
- ServerVersionプロパティ
FINEサーバのバージョン文字列を記述する。
サイズ†
1024*64B。ただしサイズを示す値があるのでデータ本体で使用可能な領域は1024*64-4B。
FINEリクエストの処理†
WM_COPYDATAによるFINEリクエストを処理し、処理結果を返す。
ステータスコード†
基本的にはSSTPのステータスコードに準拠するが、サブ規格で追加定義されている物がある事を注意せよ。
書式はVersion Statuscode Statusstring[CRLF](例:NOTIFY/1.0 200 OK)
また、ステータスラインの後に空行を入れてアプリケーション及びEvent固有の情報を返してもよい。
コード | 状態 | 解説 |
200 OK | 正常終了 | リクエスト処理は正常に終了した。 |
400 Bad Request | 処理不能 | 呼び出しの不備、内容の不一致。リクエストの内容が解釈不能など。 |
420 Refuse | 拒否 | FINEサーバーはそのリクエストを受け付けない |
500 Internal Server Error | サーバエラー | 何らかのエラーがメッセージングツール側で発生した |
501 Not Implemented | 未実装 | 実装していないリクエストが来た |
クライアント要件†
FineFMOの解釈†
FMOのアクセスはMUTEXによる排他制御を行う事が推奨されるが、実装は任意である。
なお、MUTEXによる排他制御を行わない場合は読み込み中にFMOが破壊される事態に備え、文法的に間違ったFMOに対して対処出来るように注意せよ。
また、FINEクライアントは書き込みを行ってはならない。(サーバ機能を兼ね備える場合はサーバ要件に準ずる)
FINEリクエストの発行†
発行方法はSSTP(Sakura Script Transfer Protocol)のNOTIFY/1.0形式に順じ、WM_COPYDATAにて行う。
ソケット接続による発行はサポートしない。
リクエストヘッダ†
- Sender
FINEクライアントの名前が入る。必須。
- Event
サブ規格で定義されるイベント名(OnFINE~)。必須。
- Charset
リクエストの文字コード。サポートするのはUTF-8/Shift_JIS/ASCII。必須。
- Reference0-7
リクエスト内容。どのReferenceが何を意味するのかはサブ規格で定義される。任意。
発行後、FINEサーバから返されるステータスコードに従って適切な処理を行う事。
サブ規格†
リソース†
コメント†
- 2004-07-06 (Tue) 01:14:27 浮子屋 : お騒がせしてすみませんです。
- 2004-07-06 (Tue) 01:12:36 浮子屋 : やさぐれソフトのTODOに書いて頂いた現象もこれで直ったと思います。
- 2004-07-06 (Tue) 01:11:22 浮子屋 : どうも 'Sakura' FMO の方も0x00を終端とする(0x00埋めをしない)仕様らしいので、こちらを直しました。
- 2004-07-05 (Mon) 13:08:39 殊海夕音 : げ、また何かポカやってましたか。コード見直してみます。
- 2004-07-05 (Mon) 04:15:44 浮子屋 : 0x00をターミネータとするならそういう仕様にするので良いのですが、一旦全部きれいにする(残りを0x00で埋める)仕様だと思っていたので。。。
- 2004-07-05 (Mon) 04:14:32 浮子屋 : 何故かTC上げ落としするとゴミが残るなーと思っていたら、TCは最後のエントリに0x00一個だけしか書かない(その後古いゴミは残したまま)みたいです。
- 2004-07-04 (Sun) 23:30:33 浮子屋 : Capabilityと@の扱いを追記しました。
- 2004-07-04 (Sun) 21:56:35 浮子屋 : なるほど。Capabilityですか。対応してみます。
- 2004-07-04 (Sun) 18:40:18 殊海夕音 : TC及びSSTP Bottle Client非公式ビルドにCapabilityを実装しました。
- 2004-07-04 (Sun) 17:02:50 殊海夕音 : ステータスコードに420を追加しました。
- 2004-07-04 (Sun) 13:09:24 殊海夕音 : Capability、よさそうですね。
- 2004-07-03 (Sat) 20:22:28 殊海夕音 : ステータスコードに501を追加しました。
- 2004-07-01 (Thu) 20:59:26 浮子屋 : とりあえずSARS実装しました。
- 2004-06-22 (Tue) 18:12:20 浮子屋 : ちょこっと直しました。FMOの[cr][lf]と0x00、後NOTIFYのヘッダのHwnd→HWndです。
- 2004-06-22 (Tue) 17:10:22 殊海夕音 : それではTC側も実装始めます。これでひとまず固めてよろしいでしょうか。
- 2004-06-22 (Tue) 15:47:26 浮子屋 : ページ作成やらせてしまってすみません。とりあえずこの仕様に従って実装してみます。