5.3. まず超簡単チャット


今回は非常に簡単なチャットを作りました。
といっても実は第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などで人を呼んできてチャットをする事ができます。

次回はこのチャットではつまらないのでハンドルネームの入力ができるようにしてみたいと思います。
プロバイダによってはこの方法でうまくいかない事もあります。 これに関してはプロバイダの設定次第ですのでプロバイダに問い合わせてみて下さい。 特にケーブルテレビでの接続の場合はうまくいかない事が多いようです。


今回始めて使った命令など

| | メニュー戻る | |

LinkExchange Japan
LinkExchange Japan Member