隣で起動してるゴースト

http://fsgizm.cocolog-nifty.com/blog/2006/05/post_c349.html
http://blog.livedoor.jp/dameda1/archives/50499010.html
http://nh.pv.to/test/read.cgi/unyu/1096293147/14-18


これ、きちんとやろうとすると多分面倒で。
そのうち http://emily.nanika.jp/specwiki/?GhostHowTo に書こうと思って、
エントリだけ作っていたのですが、とりあえず私の知ってることをメモ書きしておきます。
間違いとかあったら教えてください。

otherghostname

  • SHIORIレベルでは、 otherghostname というイベントで、同時起動しているゴーストが本体から通知される
  • 但し、otherghostname が通知されるタイミングは、実際のゴーストの起動/終了と必ずしも同時ではない
  • otherghostname の元ネタになっているのは(恐らく)FMOである
  • FMOは、色々な「本体」が更新をかけたりするので、他の本体でゴーストの起動/終了があると、otherghostnameの通知は遅れることがある
  • その理由については http://emily.nanika.jp/specwiki/?SSP%2F%BB%C5%CD%CD%BD%F1%2FFMO 参照
  • SAKURA_API_BROADCAST_GHOSTCHANGE を行わない本体が居れば、恐らく otherghostname の通知は遅れるか行われないだろう

FMO

  • ここで言う「本体」はFMOを操作する全てのアプリ、つまりS-VやSSSBも含まれる
  • FMOには、SSPで「起動してないゴーストを起動しているように見せかける」で追加されたゴーストが含まれる
  • また、S-VやSSSBも(設定によっては)そこに居ないゴーストをFMOにたくさん書き込む

結論として

  • つまり、どんな環境でも確実に「いまその瞬間に立っているゴースト」を取得したい場合、多分、FMOを読むしかない(里々は多分そうしてる)
  • 但し、SSPの「起動していない〜」のゴースト、およびS-VやSSSBのゴーストを除外する必要がある(里々は多分これを考慮してない)
  • SSPの「起動していない〜」のゴーストのエントリは、先頭が "ssp_fmo_header_dummyentry"
  • S-Vのゴーストは、先頭が "SSTPVIEWER-"
  • SSSBのゴーストは、先頭が "SSSB"
  • オマケ:CROWのゴーストは、先頭が"crow_fmo_id"
  • オマケ:DAEのゴーストは、先頭が "dae_fmo_header"

実装

  • 里々の(○○の存在)等の変数はFMOから取っているようです
  • AYAの場合、ghostexlist 変数で取得できるが、更新は otherghostname によって行われている
  • それぞれの本体で、otherghostnameがどのように実装されてるかは未調査

…なんでこんな事を知っているかというと、Handは必要に迫られて上記のような「FMOを読んで要らないエントリを除外」ロジックを実装しているからなのですが。

ついで

http://teacup.paslog.jp/article/346991.html
surfaceが取得できない!という話について

  • SSP,DAEにはそもそもFMO内にsurfaceエントリがありません(id:ponapalt:20060531:1149086219)ので、里々でも取れません
  • CROW,Materiaにはsurfaceエントリがあります