99章.お役立ちperlプログラム

99.4.2人専用チャット(TwoChat: frame only)

ふたりのホットライン−2人専用のチャットスクリプトです。

チャットのCGIは同時に書き込むと内容が消えたり,消滅対策のロック(symlinkやsleep)により待たされたり=BUSYと大変です。

このスクリプトは,ロック機能を省いて作成されていますので高レスポンスが期待できます。
ただ,表示メッセージが不安定(ノーコメントです)になる場合が考えられます。

力のある人はn人用にも改造することができるでしょう。

デモはこちらです。

99.4.1.アルゴリズム(著作権利の主張部分)

  1. ランダムアクセスにより,個人によって書き込める領域を制限している。
    また,書き込み時の使用メモリ量も軽減できる。

  2. 入出力オープンのためファイルがクリアされない。
99.4.2.レコードレイアウト(COBOL風)
個人名      PIC X(20)
記入日時    PIC X(15)  mm/dd(wdy)hh:mm
メッセージ  PIC X(n)   n文字 ファイル初期化時のmlnの値
区切り      PIC X(1)   *
改行コード  PIC X(1)   LF

レコード長は,20+15+n+1+1=37+nバイトです。

メッセージが固定長のため,末尾で2バイト文字の漢字が不用意に1バイトずつに分割されて記録されないようにスクリプトでチェックしています。
メッセージ中の改行は1文字換算になります。

99.4.3.フォームの記述

機能別引数一覧
ファイル初期化表示書き込み用 途
iocrw機能の判別用
cnt1人当たりの保存メッセージ数(1≦) 3が最適
mln1メッセージ当たりの最長文字数(1≦) 100が最適
fn拡張子(.txt)を除くメッセージファイル名
box
box番号=個人識別用の番号 1か2
reftm
自動リロード秒数 0か省略時はリロードしない
name

個人名
msg

書き込みメッセージ
◎:必須 △:省略可

サンプル

メッセージファイル名:msg.txt 1メッセージ当たりの最長文字数:100 1人当たりの保存メッセージ数:3

http://www.bar.co.jp/foo/cgi-bin/twochat.pl?io=c&cnt=3&mln=100&fn=msg

http://www.bar.co.jp/foo/cgi-bin/twochat.pl?io=r&cnt=3&mln=100&fn=msg&box=1&reftm=0

<FORM METHOD="POST" ACTION="http://www.bar.co.jp/foo/cgi-bin/twochat.pl" TARGET="low">
<INPUT TYPE="hidden" NAME="io" VALUE="w">
<INPUT TYPE="hidden" NAME="cnt" VALUE="3">
<INPUT TYPE="hidden" NAME="mln" VALUE="100">
<INPUT TYPE="hidden" NAME="fn" VALUE="msg">
名前:<INPUT TYPE="text" SIZE=20 MAXLENGTH=20 NAME="name" VALUE="太郎">
 Box:<INPUT TYPE="text" SIZE=1 MAXLENGTH=1 NAME="box" VALUE="1">
 auto:<INPUT TYPE="text" SIZE=2 MAXLENGTH=2 NAME="reftm" VALUE="0">
<TEXTAREA NAME="msg" ROWS=3 COLS=50></TEXTAREA>
<INPUT TYPE="submit" VALUE="ok"> <INPUT TYPE="reset" VALUE="clear">

99.4.4.設置方法

2人のローカルファイル(自分のパソコン)上にそれぞれチャットのHTMLファイル(2種類)を置き,チャットの時はこれを呼び出します。
VALUEであらかじめ個人名とbox番号を設定しておけば,クッキー機能は必要ありません。

不特定多数の利用者を対象としない,このチャットシステムの最大の特徴です。
また,メッセージファイルの所在がわからなければ,いたずらは絶対にできません。

twochat.txt チャットスクリプト twochat.pl
chat1.txt index.htm
chat2.txt chat.htm

をダウンロード後に,自分の環境に合わせてファイル名などを修正して下さい。

2人でbox番号を決めindex.htmとchat.htmのboxの値を互いに変更します。
ex.太郎さん:box=1 花子さん:box=2

スクリプトの主な修正箇所はメッセージファイルの設置ディレクトリとパーミッションです。

$dir = "/home/foo/msg/";
#        ~~~~~~~~~~~~ update to your environment(1/2)
  chmod(0666, $msg_file);
#        ~~~ update to your environment(2/2)

修正したスクリプトをftpで/home/foo/cgi-bin(任意)ディレクトリへ転送後に

kibita(*)cd /home/foo/cgi-bin
kibita(*)mv twochat.txt twochat.pl
kibita(*)chmod 705 twochat.pl

とします。

メッセージファイルのアロケーションは

kibita(*)cd /home/foo/msg
kibita(*)touch msg.txt

としてダミーファイルを作成します。
シェルが利用できない場合は,適当なファイルをこの名前で転送しておきます。

その後,対話する(index.htmの呼び出し)前に,ファイルを必ず初期化(io=c)します。
http://www.bar.co.jp/foo/cgi-bin/twochat.pl?io=c&cnt=3&mln=100&fn=msg

パーミッションはスクリプトが設定してくれます。

cntとmlnとfnのいずれかの値に変更が無い場合は,最初の一回のみでOKです。
つまり,cntとmlnとfnのいずれかを変更したら,上の例のURLの値を変更して初期化(URLを開く)すればよいのです。
fnを変更した場合は,あらためてメッセージファイルをアロケーションした後に初期化して下さい。


[HOME][戻る]

Copyright (c)1996 GOMASUKE
Since 12/10/1996, Last Updated 12/18/1996