InstantCafe

Kenji Hara
[Table of Contents] [Index]

ソフトウェア

利用の手引き
  • InstantCafe サーバ
  • InstantCafe クライアント
  • InstantCafe CGI
  • DNSの設定 (オプション)
  • Instatn Cafe メールサーバ (オプション)

InstantCafe サーバ
  • 起動方法
    • InstantCafe/server/ の editserver.bat(Windows) または editserver.sh を実行
  • デフォルトで3456番ポートを使用します
  • 開発者の方へ
    • Java ソースコードは InstantCafe/server/instantcafe.jar にあります
    • 受信の主たるメソッドは org.isntantcafe.server.EditWorker.replyToXMLElement(Element rootNode)

InstantCafe クライアント
  • InstantCafe/www/client/ICClient.swfがクライアントとして動作するflashファイル
  • デフォルトで自サーバの3456番ポートへアクセスします
  • 開発者の方へ
    • 受信の主たる関数は ICClient.processXML(commandXMLNode)

InstantCafe CGI
  • InstantCafe/www/ が CGIのディレクトリです
  • 通常 http://〜/InstantCafe/www/ にアクセスすれば CGI が動作します
    • http://xxx.yyy.zzz/ で利用したい場合は DocumentRoot を InstantCafe/www の場所に設定してください (Apacheの場合)
  • CGIファイルのパーミッションには注意が必要なことが多そうです
  • 開発者の方へ
    • メインルーチンはpapermain.pl
    • html, xml, txtファイルは基本的にテンプレート

DNSの設定
  • この機能を利用しなくても協調編集は可能です
  • 任意のサブドメインで新たな InstantCafe を作成したい場合は ワイルドカード レコード をWebサーバに向けてください

InstantCafe メールサーバ
  • この機能を利用しなくても協調編集は可能です
  • メールでのドキュメント書き込みを行いたい場合に利用してください
  • 起動方法
    • InstantCafe/server/ の smtpserver.bat(Windows) または smtpserver.sh を実行
  • 25番ポートを使用します
  • 開発者の方へ
    • 受信の主たるメソッドは org.isntantcafe.main.ICMainWorker.reply(BufferedReader in, String line)

プロトコル等解説
  • クライアント ⇒ サーバ
  • サーバ ⇒ クライアント
  • docinfo XML

InstantCafe の通信プロトコル (クライアント ⇒ サーバ)
  • <sessioninfo encoding="通信に用いるエンコード" systemencoding="クライアント側のシステムエンコード" docinfo="docinfo XMLのURL" version="通信バージョン"/>
    • セッション情報の設定
    • 通信バージョンの命名規則は 「英数字と-(ハイフン) _(アンダースコア) で構成される1文字以上20文字以下の文字列 . 数字と .(ドット) で構成される1文字以上10文字以下の文字列
    • デフォルトの通信バージョンは 「Minimum.0」
    • docinfoについては docinfo XML を参照
  • <gettext/>
    • settext, 他クライアントのlockinfo を要求
  • <getlock offset="ロック取得の開始点" length="ロックする範囲の長さ"/>
    • ロック範囲の取得 (自クライアントのlockinfo を要求)
    • マルチバイト文字も1文字としてカウント
  • <releaselock/>
    • ロックの解放 (自クライアントのlockinfo を要求)
  • <commit>テキスト</commit>
    • 編集テキストのコミット (settext, lockinfo を要求)
  • <broadcast attribute1="value1" attribute2="value2" ... />
    • 接続中の全てのクライアントに
      <broadcast attribute1="value1" attribute2="value2" ... />
      をそのまま送信

InstantCafe の通信プロトコル (サーバ ⇒ クライアント)
  • <settext>ドキュメント内容</settext>
    • ドキュメント内容を送信
  • <lockinfo offset="ロックの開始位置" length="ロックの長さ" copy="copy" owner="owner" release="release"/>
    • copy は ロック範囲を 編集エリアにコピーする場合に 1 とする (省略した場合は 0)
    • owner は 受信するクライアントに関するロック情報の場合に 1 とする (省略した場合は 0)
    • release はロック解放通知である場合に 1 とする (省略した場合は 0)
  • <commands><.../>...</commands>
    • 複数の通信タグを順番に処理させる
  • <broadcast attribute1="value1" attribute2="value2" ... />
    • 上述済

docinfo XML
<?xml version="1.0" encoding="Shift_JIS"?>
<docinfo>
  <readrequest
    url="読み込むドキュメントのURL"
    encoding="読み込みに用いるエンコード"/>
  <writerequest url="書き込み用Webアプリケーション(CGI等)のURL">Webアプリケーションに渡すクエリー</writerequest>
</docinfo>
  • 「Webアプリケーションに渡すクエリー」の例
    • <buffer convert="URLEncode" charset="URLエンコードに用いるエンコード"/> はドキュメント内容をURLエンコードしたもの
command=save&id=test&filedata=<buffer convert="URLEncode" charset="URLエンコードに用いるエンコード"/>

既存のWikiとの連携方法
  • 適切な docinfo XML を用意する
  • InstantCafe サーバを起動する
  • InstantCafe クライアントを適切なクエリーを与えて呼び出す

という感じでできると思います


開発者の方へ
  • Wiki機能が相当貧弱(preタグで囲んでるだけ)なんでそのへん独自改造してくれるといいかも

今後
  • メールアドレスにSpamが来ることもありそうなんで、Subjectがカラとかでフィルタリングしようかな?


This page is generated by mtd2html.