SSTP関連ソフトウエア間通信規格(FINE)

SSTP Bottle ClientなどのメッセージングツールにSARSなどのエディタからスクリプトを投げたり、その他色々と関連ソフトウエア間で通信するための規格。
※名称'FINE(フィーネ)'は特に何かの略称ではなく、SERIKO規格のように名前を当てただけです。

用語

  • FINEサーバ
    FINEリクエスト受信側。
  • FINEクライアント
    FINEリクエスト送信側。

サーバ要件

'Fine'FMOの保持

FINEクライアントがFINEサーバの存在を感知し、情報を得るためにFMO'Fine'を保持する。
FMOへのアクセスはMUTEXによる排他制御が必須である。(制御用MUTEXは'FineFMO')
FMO書式は次の通り。

メモリマップ

  • 0-3
    全体のサイズを示す long 値
  • 4-
    データ本体

本体書式

アプリケーション名:プロパティ名:値[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。必須。
  • HWnd
    FINEクライアントのHWnd。必須。
  • 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 浮子屋 : ページ作成やらせてしまってすみません。とりあえずこの仕様に従って実装してみます。

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-02-21 (水) 12:17:06