Notice: Undefined index: HTTP_REFERER in /var/kunden/webs/web2/php_samples/source.php on line 25 Notice: Undefined variable: includes in /var/kunden/webs/web2/php_samples/source.php on line 36 Notice: Undefined variable: includes in /var/kunden/webs/web2/php_samples/source.php on line 37

Scriptname: pline.php

By Toppi

<?
/*============================================================================*\
|
|   Little Partyline example based on class socke()
|
|      by Toppi
|
|   forgett my poor english, if you can !
|   and please ....
|    if you like my work, respect me and dont remove my Notes :-)
|
|      2004
|
|
|
|  Copyright (C) 2001-2004 by Toppi (toppi@kacke.de)
|
|  This program is free software
|  you can redistribute it and/or modify
|  it under the terms of the GNU General Public License as published by
|  the Free Software Foundation; either version 2, or (at your option)
|  any later version.
|
|  This program is distributed in the hope that it will be useful,
|  but WITHOUT ANY WARRANTY; without even the implied warranty of
|  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
|  GNU General Public License for more details.
|
|  You should have received a copy of the GNU General Public License
|  along with this program; if not, write to the Free Software
|  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
\*============================================================================*/

error_reporting (7);
set_time_limit (0);
ob_implicit_flush ();

/*============================================================================*\
                                    Create Socket
\*============================================================================*/

require ("socke.inc");

if(
$socket = new socke()){
    
$io    $socket->listen("",23456);
}else {
    echo 
"Open socket failed! Dying...\n";
    exit;
}

/*============================================================================*\
                                    MAIN LOOP
\*============================================================================*/

echo "<b>PLINE SERVER RUNNING at:<br>";
echo 
"<b>".$socket->myhost.":".$socket->myport."</b><br>";
echo 
"telnet this :)<br>";

while(
1){
    if (
connection_status()!=0){
        
$socket->close();
        die;
    }
     Echo 
"\n";
    
usleep(200);
    foreach(
$socket->can_read() as $sock){
        if(
$io == $sock){
            if(
$mysock $socket->accept()){
                
//Neue Connex
                
login($mysock);
            }
        } else {
            
//Anyone had something to say
            
$data $socket->read($sock);
            
//Client pinged out
            
if($data === false){
                
logout($sock,"Connection reset by Beer");
                continue;
            }
            
//Only Enter Hit
            
if(!$data || $data == "\n" || $data == "\r\n"){
                continue;
              }
            
interact($sock$data);
        }
    }
}
/*============================================================================*\
                                    Functions
\*============================================================================*/

function interact ($mysock$data){

    GLOBAL 
$socket;

    
$cmd    explode(" ",$data);

    switch(
strtoupper($cmd[0])){

        case 
"/QUIT":
            
logout($mysock);
            return;
        case 
"/NICK":
            
set_nickname($mysock,$cmd[1]);
            return;
          case 
"/WHOIS":
            
whois($mysock,$cmd[1]);
            return;
          case 
"/WHO":
            
who($mysock);
            return;
        case 
"/SHUTDOWN":
            
shutdown();
            break;
    }

    if(!
$socket->get_socketinfo($mysock,"nick")){
        
write_me($mysock,"*** Enter your Nickanem first !");
        return;
    }
    
write_all($mysock,"$data");

    return;
}

function 
whois($mysock$nick=""){

    GLOBAL 
$socket;

    if(!
$nick){
        
write_me($mysock,"You need help !Usage: whois <nick>!");
        return;
    }
    
$sockinfos $socket->get_socketinfo();
    
$nick strtoupper($nick);
    foreach(
$sockinfos as $sock){
        if(
strtoupper($sock['nick']) == $nick){
            
write_me($mysock,"Whois: \"$nick\"");
            
write_me($mysock,"Host: \"$sock[host]\"");
            
write_me($mysock,"IP: \"$sock[ip]\"");
            
write_me($mysock,"Joined: \"".date("Y-m-d H:i:s",$sock['started'])."\"");
            
$last  time()-$sock['last'];
            
write_me($mysock,"Last spoke: \"$last\" seconds ago");
            return;
        }
    }
    
write_me($mysock,"Nick \"$nick\" not here !");
    return;
}

function 
who($mysock){

    GLOBAL 
$socket;

    
write_me($mysock,"Who is here ?");
    
$sockinfos $socket->get_socketinfo();
    foreach(
$sockinfos as $sock){
        
write_me($mysock,$sock[nick]");
    }
    return;
}

function 
set_nickname($mysock$nick=""){

    GLOBAL 
$socket;

    if(!
$nick){
        
write_me($mysock,"Nick \"$nick\" not valid !");
        return;
    }
    
$sockinfos $socket->get_socketinfo();
    
$nick1 strtoupper($nick);
    foreach(
$sockinfos as $sock){
        if(
strtoupper($sock['nick']) == $nick1){
            
write_me($mysock,"Nick \"$nick\" already in use !");
            return;
        }
    }
    
$socket->set_socketinfo($mysock,"nick",$nick);
    
write_me($mysock,"Your now known as \"$nick\"!");
    return;
}

function 
write_all($mysock$message){
    
//
    
GLOBAL $socket;

    if(
is_resource($mysock)){
        
$nick $socket->get_socketinfo($mysock,"nick");
    }else{
        
$nick $mysock;
    }
    foreach(
$socket->clients as $client){
        
$socket->write ($clientdate("H:i")."<$nick$message\n");
    }
    return;
}

function 
write_all_but_me($mysock$message){

    GLOBAL 
$socket;

    
$nick $socket->get_socketinfo($mysock,"nick");

    foreach(
$socket->clients as $client){
        if(
$client != $mysock){
            
$socket->write ($clientdate("H:i")."<$nick$message\n");
        }
    }
    return;
}

function 
write_me($mysock$message){
    
//
    
GLOBAL $socket;

    
$socket->write ($mysockdate("H:i").$message\n");

    return;
}

function 
login ($mysock){

    GLOBAL 
$socket;

    
write_me($mysock"Hello Stupid ! Welcome to PLINE\n");
    
write_me($mysock"Commands beginning with /");
    
write_me($mysock"I know: /quit, /nick, /shutdown, /who, /whois \n");
    
write_me($mysock"Enter your Nickname !");
     return;
}

function 
logout ($sock$message "" ){
    GLOBAL 
$socket;

    
write_all_but_me($sock,"*** Left the partyline");

    
$socket->close($sock);

    return;
}

function 
shutdown ($message "Server goes shutdown now" ){

    GLOBAL 
$socket;

    echo 
"$message<br>";

    
write_all("SYSTEM""*** $message");
    
$socket->close();
    exit;
}
?>