#!/usr/bin/perl #退室 # 99/06/05 update(v5.0) by 普通 #==================================================================== #ご協力を頂いた方 #oidon #==================================================================== #【?】# 既にあればそこまでのパスを指定します。 require './jcode.pl'; require './chat_env.cgi'; require './chat_lib.pl'; &env_init; ########################################################################################### ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $mon++; $date_now = "$year年$mon月$mday日$hour時$min分"; $date = "$mon月$mday日$hour時$min分"; $time = "$mday日$hour時$min分"; $times = time; $ipaddr = $ENV{'REMOTE_ADDR'}; $ipaddr =~ s/\.//g; if ($remote_host eq 1) {$rhost = "/$ENV{'REMOTE_HOST'}";} else {$rhost = '';} #=============================================================== if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $in{$name} = $value; } #=============================================================== if ($in{'roomno'}) {&main();} else {&error("このスクリプトを動作させる為の情報が不足しています。");} exit; sub main { $roomno = $in{'roomno'}; #Chat室No &roomset(); #部屋属性取得 $chatname = $in{'chatname'}; #ハンドル名 &rom_proc(); #参加者削除、登参加者・ROM精査 $color = $bmf_ccolor; #発言文字カラー $profno = $bmf_profno; #プロフィールNo #部屋表現セット ###########フラッシュ用に変更################### if ($ficon eq 'y') { $roomdisp = ""; $roomdisp2 = ""; }else{ $roomdisp = $bhf_roomname; $roomdisp2 = $bhf_roomname; } #プロフィールリンク if ($profno) { $chatname_disp = "$chatname";} else {$chatname_disp = $chatname;} #退室メッセージ表示&参加履歴登録 if ($actmem eq 1) { #退室状況確認 &WriteComment($roomno,"「$chatname_disp」さんが退室!\[$date$rhost\]
\n"); if (!($bhf_roomenvd eq '2')) { #部屋属性:表示=内緒 if ($guid_msg eq '1') {&an_endmsg();} if ($func_lglst) {&WriteLog ("
  • $roomdisp2から「$chatname_disp」さんが退室!\[$date\]
    \n"); } } } &roomh_update(); #Chat室表紙情報更新 if ($bhf_roomenvo && $memcnt eq 0) { #部屋属性:退室後=会話ログ消去 &DeleteComment ($roomno); &WriteComment ($roomno,"ご案内>発言ログは自動初期化しました。
    \n"); } if (($bhf_bkurl) && ($bmf_end eq '1')) { print "Location: $bhf_bkurl\n\n"; #退室後URLへ } else { print "Location: $url2\n\n"; } } #他部屋への退室メッセージ投稿 sub an_endmsg { foreach $froomno (@room_list) { next if ($froomno eq $roomno || -z "${fbase}roommember$froomno.txt"); undef @mf_list; $an_msgsw = '0'; &ReadMember ($froomno); foreach (@mf_list) { ($tmf_roomno,$tmf_roomname,$tmf_chatname,$tmf_inenv,$tmf_inproc,$tmf_yobi) = split(/||\n/); ($tmf_ipaddr,$tmf_intime,$tmf_latime,$tmf_agent,$tmf_profno,$tmf_yobi21) = split(/,/,$tmf_inproc); if (!($tmf_ipaddr eq 'ROM')) { $an_msgsw = '1'; last; } } if ($an_msgsw eq '1') { &WriteComment ($froomno,"ご案内>「$chatname_disp」さんが$roomdisp2から退室\[$date$rhost\]
    \n"); } } } #部屋属性ファイル更新 sub roomh_update { &LockReadHeader ($roomno); ($thf_roomname,$thf_intime,$thf_outtime,$thf_memcnt,$thf_page,$thf_ccolor,$thf_roomenv,$thf_roompass,$thf_bkurl,$thf_yobi1,$thf_yobi2,$thf_yobi3) = split(/||\n/,$hf_list); ($thf_roomenvi1,$thf_roomenvi2,$thf_roomenvo,$thf_roomenvd,$thf_imaxcnt) = split(/,/,$thf_roomenv); if (($thf_roomenvi1 eq '2') && ($memcnt eq 0)) {$new_roompass = '';}#部屋属性:入室1=参加パス else {$new_roompass = $thf_roompass;} $hf_list = "$thf_roomname|$thf_intime|$times|$memcnt|$thf_page|$thf_ccolor|$thf_roomenvi1,$thf_roomenvi2,$thf_roomenvo,$thf_roomenvd,$thf_imaxcnt|$new_roompass|$thf_bkurl|$thf_yobi1|$thf_yobi2|$thf_yobi3\n"; &UnlockWriteHeader ($roomno); } #部屋属性取得 sub roomset { &ReadHeader ($roomno); ($bhf_roomname,$bhf_intime,$bhf_outtime,$bhf_memcnt,$bhf_page,$bhf_ccolor,$bhf_roomenv,$bhf_roompass,$bhf_bkurl,$bhf_yobi1,$bhf_yobi2,$bhf_yobi3) = split(/||\n/,$hf_list); ($bhf_pgbody,$bhf_line) = split(/,/,$bhf_page); ($bhf_roomenvi1,$bhf_roomenvi2,$bhf_roomenvo,$bhf_roomenvd,$bhf_imaxcnt) = split(/,/,$bhf_roomenv); } #参加者削除、参加者・ROM精査 sub rom_proc { $memcnt = 0; $actmem = 0; &LockReadMember($roomno); foreach (@mf_list) { ($tmf_roomno,$tmf_roomname,$tmf_chatname,$tmf_inenv,$tmf_inproc,$tmf_yobi) = split(/||\n/); ($tmf_ipaddr,$tmf_intime,$tmf_latime,$tmf_agent,$tmf_profno,$tmf_yobi21) = split(/,/,$tmf_inproc); if ($tmf_ipaddr eq 'ROM') { $timewk = time - $tmf_intime; if ($timewk > $rom_time) {$_ = '';} elsif ($tmf_chatname eq $rom_name) {$_ = '';} } else { $timewk = time - $tmf_latime; if ($timewk > $aout_time) {$_ = '';} # elsif ($tmf_ipaddr eq $ipaddr) {$_ = '';} elsif ($tmf_chatname eq $chatname) { ($bmf_ccolor,$bmf_seq,$bmf_java,$bmf_end,$bmf_yobi12) = split(/,/,$tmf_inenv); $_ = ''; $bmf_profno = $tmf_profno; $actmem = 1; } else {$memcnt++;} } } &UnlockWriteMember($roomno); # if ($actmem eq 0) {&error("一定時間($aout_time秒)のアクセスが無く自動退室された可能\性があります。");} } sub error { print "Content-type: text/html\n\n"; print "$title2\n"; print<<"__EOF__"; $hp_bcolor
    $_[0]
    $title - Chat室(部屋選択)へ戻る。

    __EOF__ exit(0); }