RubyCGI.org

RubyでCGIを作ろう


5章3節 まず超簡単チャット 更新日付: [2002-05-17]



今回は非常に簡単なチャットを作りました。といっても実は第3章で扱った掲示板とほとんど同じ内容になっています。

-- プログラム 始まり -- test531.cgi

#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"
require "cgi-lib"
input = CGI.new
require "kconv"

#初期設定
CR = "\015"
LF = "\012"
EOL = CR + LF
BR = "<br>"
FILENAME = "bbs2.log"
LOCKFILENAME = "bbs2.log.lock"
MAXLOG = 10
$log = []

#ファイルロッククラス作成
class FileLockDir
def lock(lockdir)
begin
Dir.mkdir(lockdir)
lockflag = true
rescue Errno::EEXIST
lockflag = false
end
return(lockflag)
end

def unlock(lockdir)
begin
Dir.rmdir(lockdir)
lockflag = true
rescue
lockflag = false
end
return(lockflag)
end
end

#ログファイルの読みこみ関数
def read_log_file
c = 0
begin
fh = open(FILENAME)
rescue Errno::ENOENT
return
end

fh.each{|l|
$log[c] = l
c += 1
if c >= MAXLOG
break
end
}
fh.close
end

#ログファイルの書き込み関数
def write_log_file(writedata)
$log.unshift("#{writedata}\n")
c = 0
fh = open(FILENAME, "w")
$log.each{|l|
fh.print l
c += 1
if c >= MAXLOG
break
end
}
fh.close
end



#ファイルロッククラスの初期化
fillock = FileLockDir.new

#フォームからのデータ読みこみと日本語変換と改行の変換
if input["senddata"]
senddata = Kconv.tosjis(input["senddata"])
senddata.gsub!(/#{EOL}/, BR)
senddata.gsub!(/#{CR}/, BR)
senddata.gsub!(/#{LF}/, BR)
end

#ログファイルの読みこみ関数を呼び出す
read_log_file

#書き込みがあったら
if senddata.size != 0
begin

#ファイルロック設定
lockd = fillock.lock(LOCKFILENAME)

unless lockd
print <<EOF
他の人が書き込み中です。しばらく待ってからもう一度書いて下さい。

EOF
end

#ログファイルの書き込み関数を呼び出し
write_log_file(senddata)

ensure
#ファイルロック解除
fillock.unlock(LOCKFILENAME) if lockd
end
end

#HTMLの表示
print <<EOF;
<html>
<body>
<form method="POST">
<input type="text" name="senddata" size="80">
<input type="submit" value="送信">
</form>
<hr>
EOF

$log.each{|l|
print "#{l}\n<hr>\n"
}

print <<EOF;
</body>
</html>
EOF

-- プログラム 終わり --


このプログラムは「2.7. 1行掲示板完成!」のプログラムとほとんど同じ内容です。

このプログラムをc:\ruby\minhttpd\htdocsに入れてウェブブラウザで http://localhost/test531.cgi を見て下さい。非常に簡単なチャットができています。インターネットに繋がっていればインターネットに繋がった他の人からも利用する事ができます。

まずスタート−>ファイル名を指定して実行を行い、「winipcfg」と入力して実行して下さい。この中に出ているIPアドレスがインターネット上でのアドレスになります。ウェブブラウザでhttp://(IPアドレス)/test531.cgiにアクセスしてチャットがうまく動いている事を確認して下さい。それでうまくいっていたらホームページやメール、ICQなどで人を呼んできてチャットをする事ができます。

次回はこのチャットではつまらないのでハンドルネームの入力ができるようにしてみたいと思います。

プロバイダによってはこの方法でうまくいかない事もあります。これに関してはプロバイダの設定次第ですのでプロバイダに問い合わせてみて下さい。特にケーブルテレビでの接続の場合はうまくいかない事が多いようです。


今回始めて使った命令など
elsif (ifの説明の中に含まれている)

RubyによるCGIプログラミング
RubyによるCGIプログラミング

<− 前へ : 5.2. httpdサーバーの導入 | 次へ : 6. ツール(du) −>

RubyでCGIを作ろうトップ

| トップページ | 書籍「Ruby/GTKプログラミング入門」 | 書籍「RubyによるCGIプログラミング」 | RubyでCGIを作ろう | リンク集 | ツールなど | 自己紹介 |