www.pudn.com > coolchat.zip > chatlogout.pl
sub Chat_logout
{
my $lowid = lc($UserData{'User'});
my $hastheuser = 0;
my $roomnumber = 0;
my $Nullroom = 0;
my $leaveuser = "";
my @leftfilelist = ();
my %leftuserlist;
&lock("$chatdatadir/$UserData{'Room'}$DATA");
if(open(USERLIST,"<$chatdatadir/$UserData{'Room'}$DATA"))
{#Del user from the onlinelist
@userlines=;
close(USERLIST);
$roomnumber = @userlines;
if(open(USERLIST,">$chatdatadir/$UserData{'Room'}$DATA"))
{
$newmaster = "sysop";
$entertime = time;
foreach $userline(@userlines)
{
($userid,$idnum,$tails)=split(/:/,$userline,3);
if(lc($userid) eq $lowid)
{
($keynum)=split(/:/,$tails,2);
if($keynum eq $UserData{'Key'})
{
@leftfilelist[$hastheuser++] = "$Userdatapath/$lowid.KEY";
$leftuserlist{$lowid} = 1;
$roomnumber --;
next;
}
}
elsif($idnum + $MaxIdelTime < $entertime)
{
$leaveuser .= "$userid ";
@leftfilelist[$hastheuser++] = "$Userdatapath/$userid.KEY";
$leftuserlist{$userid} = 1;
$roomnumber--;
next;
}
print USERLIST $userline;
if($entertime > $idnum)
{#Find the oldest user in the room.
$newmaster = lc($userid);
$entertime = $idnum;
}
}
close(USERLIST);
}
}
&unlock("$chatdatadir/$UserData{'Room'}$DATA");
if($hastheuser > 0)
{
&lock("$ChatRoomListFile");
if(open(ROOMLIST, "<$ChatRoomListFile"))
{#Change the master and the number of the room
@roomlines=;
close ROOMLIST;
if(open(ROOMLIST, ">$ChatRoomListFile"))
{
foreach $roomline(@roomlines)
{
($roomname,$usernum,$master,$visible,$attrib,$tails)=split(/:/,$roomline,6);
if($roomname eq $UserData{'Room'})
{
if($roomnumber < 1)
{#Nobody there, delete the forbit file and the messages files
if(($UserData{'Room'} ne "main")&&($attrib ne 9))
{
@filelist[0] = $ChaTempFilePath.$roomname.".out";
@filelist[1] = $ChaTempFilePath.$roomname.".ip";
@filelist[2]="$chatdatadir/$roomname$AllMsgExt";
@filelist[3]="$chatdatadir/$roomname$DATA";
@filelist[4]="$chatdatadir/$roomname$HEAD";
@filelist[5]="$chatdatadir/$roomname$MSG";
unlink(@filelist);
$Nullroom = 1;
}
else
{
print ROOMLIST "$roomname:0:$master:$visible:$attrib:$tails";
}
}
else
{
if(($leftuserlist{$master} eq 1)&&($attrib ne 9))
{#Give the master right to the oldest man in the room
$master = $newmaster;
$mastermessage = " 本聊天室新室主是$master!";
}
print ROOMLIST "$roomname:$roomnumber:$master:$visible:$attrib:$tails";
}
}
else
{
print ROOMLIST $roomline;
}
}
close ROOMLIST;
}
}
&unlock("$ChatRoomListFile");
unlink(@leftfilelist);
if($Nullroom eq 0)
{
$timestr = "[".&convert_time(time)."]";
if($leaveuser ne "")
{
$leftmessage = "$leaveuser 走出了我们的聊天室!".$timestr;
&UpdateChatData(10, '-花无缺-',$UserData{'Room'},'-花无缺-',$leftmessage);
}
$message = "$UserData{'Nick'}($UserData{'User'}) 离开聊天室. $mastermessage".$timestr;
&UpdateChatData(11, $UserData{'User'},$UserData{'Room'},$UserData{'Nick'},$message);
&UpdateChatData(40, $UserData{'User'},$UserData{'Room'},$UserData{'Nick'},"离开");
}
}
#Now update user data file!
$first_id='!';
my $idpath=$LOGOpath.$first_id."/";
my $datapath = $idpath.$lowid;
my $count = 0;
if(open COUNT, "+<$Userdatapath/$lowid$COUNTER")
{
flock(COUNT,2) if($Enable_Flock eq 1);
$count = ;
$count++;
seek COUNT,0,0;
print COUNT "0";
close COUNT;
}
&lock("$datapath$DATA");
if(open(DATA,"<$datapath$DATA"))
{
@userlines = ;
close DATA;
($logtime,$msgnum,$onlinetime,$experience,$life,$lastip,$lasttime,$nowip,$logintime,$tails)=split(/:/,$userlines[0],10);
($fresh,$bgcolor,$fontcolor,$fontsize,$fontface,$tails5)=split(/:/,$userlines[6],6);
$userlines[6] = "$UserData{'Fresh'}:$UserData{'Bgcolor'}:$UserData{'Fontcolor'}:$UserData{'Fontsize'}:$UserData{'Fontface'}:$tails5";
$msgnum += $count;
$onlinetime += (time - $logintime);
$experience += (int($count/20) + int((time - $logintime)/60));
$life += ($count + int((time - $logintime)/10));
$lasttime = $logintime;
$logintime = time;
$lastip = $nowip;
$nowip = $ENV{'REMOTE_ADDR'};
$userlines[0] = "$logtime:$msgnum:$onlinetime:$experience:$life:$lastip:$lasttime:$nowip:$logintime:$tails";
$userlines[3] = "$UserData{'Nick'}\n";
if(open(DATA,">$datapath$DATA"))
{
foreach $line(@userlines)
{
print DATA $line;
}
close DATA;
}
}
&unlock("$datapath$DATA");
print "Content-type: text/html\nPragma: no-cache\n";
&SetCookies(0,'Key','','Group','');
print "\n";
print "Bye, $UserData{'Nick'} \n\n\n";
print "希望你再次光临我们的主题聊天室!!!
\n";
print "回到聊天广场 ";
}
1; #return true