しぃ絵チャ(PaintChatApp)のTip

そういやすっかり忘れてました。

キャッシュサイズの取得方法

ラインキャッシュは、PaintChat.jarの下層ディレクトリ"save_server"内に"line_cash.tmp"として保存されます。
私はSSIを使用しているので、以下のような書き方となります。

<!--#config errmsg="0K" -->
<!--#fsize file="./paintchat/save_server/line_cash.tmp" -->Byte

1行目はエラーメッセージの定義なのですが、ファイルなしエラーが殆ど*1なので、便宜上0Kと書いてあります。
2行目がサイズ表示の命令です。 ここで上記エラーの場合「0KByte」となり、キャッシュが12Kの場合は「12KByte」となります。

サイズ取得ができるものであれば、ぶっちゃけjavascriptでも可能な方法です。*2

しかし気を付けなければならないのは、リアルタイムにラインキャッシュを生成しているわけではないため、多人数でチャットをしている場合などは実際にJavaが保存している量よりも少なめに表示される事です。
この方法でキャッシュサイズを表示させる方は、サイト内に注意を記載しておいたほうが無難でしょう。

1ページに複数のユーザーリスト

ユーザーリストは、"pchat_user_list.swf"が"pconfig.xml"を参照し、そこに記載されたポートを監視する事によりユーザ名を把握しています。 しかし後者のファイルにはポート番号と更新間隔の他に設定箇所が無く、また前者のファイルにも、後者のファイル名を指定する箇所がありません。 さらに、これらのファイルは同じディレクトリにないと稼働できませんし、別ディレクトリからの参照も不可能です。*3
まぁ要は、

  • 2つのファイルが対となっていること
  • 同じディレクトリから参照させること

を満たせればいいわけで、"pchat_user_list.swf"と"pconfig.xml"と、参照するHTMLを同じ場所に置けば良いという結論になります。

…ただ、2部屋以上準備したい場合、上記の制約があるために1つのHTMLに2つ以上のユーザリストを記載する事は不可能となります。
この場合に使える方法は(考えつく限りでは)2つのみ。
フレームで画面そのものを分割するか、もしくはiframeタグで別HTMLを読み込むか です。
たとえば以下のファイル構成の場合

  • index.html ←※1
  • room1
    • PaintChat.jar
    • pchat_user_list.html ←※2
    • pchat_user_list.swf
    • pconfig.xml
  • room2
    • PaintChat.jar
    • pchat_user_list.html ←※2
    • pchat_user_list.swf
    • pconfig.xml

※1のindex.htmlの一部

<iframe src="room1/pchat_user_list.html" width="160" height="240" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe>
<iframe src="room2/pchat_user_list.html" width="160" height="240" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe>

※2のpchat_user_list.html(room1、room2とも同じもので良いが、pconfig.xmlは書き換える事)

<html><head></head><body style="margin:0px;padding:0px;">
<object height="240" width="160" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0">
<param name="allowScriptAccess" value="sameDomain">
<param name="movie" value="pchat_user_list.swf">
<param name="quality" value="low">
<param name="bgcolor" value="#ffffff">
<embed height="240" width="160" src="pchat_user_list.swf" quality="low" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
</object>
</body></html>

これは現在の仕様からやむなしに採っている方法なので、バージョンアップ等がされた場合、今以上に簡単になる可能性はあります。 まぁ今のところはこれが限界でしょう。

ちなみに、iframeは複数のHTMLを解釈しなければならないため、見る側(ユーザー)のPCへの負荷が大きいです。 使いすぎに注意しましょう。

これを活用する事もできます。

  1. 複数の仲間で 個々人々がPaintChatApp付属httpdを立ち上げる
  2. それぞれに同じiframe用のHTMLを準備
  3. 普通のWebサイトで、複数のホストを記載したiframeタグを書く
  4. 擬似的な“複数部屋のお絵かきチャットロビー”が完成ヽ(´ー`)ノ

ただし、ブラウザで「別ドメインのiframeは読み込まない」等にチェックが入っていると意味が無いという罠がありますので注意が必要です。

*1:起動(または全消し)から絵を描いて一定量のキャッシュを貯めるまでキャッシュファイルが生成されないため、その場合はエラーが出ます

*2:まぁ、javascriptでsave_serverディレクトリにアクセスさせるためにはネットワークから可視状態にしなければならない=ログファイルが盗まれる危険性があるため、あまりオススメはできません

*3:変数が隠されているだけかもしれませんが、逆コンパイルする環境が無いので確認できません