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