<?php

spl_autoload_register
(function($nm){
    
$prefix 'Kicken\Chat\\';
    
$len strlen($prefix);

    if (
strncmp($prefix$nm$len) == 0){
        
$file substr($nm$len);
        
$file .= '.php';

        if (
file_exists($file)){
            require 
$file;
        }
    }
});

$errno=0;
define('ERR_NO_NICK',        ++$errno);
define('ERR_NICK_TAKEN',    ++$errno);
define('ERR_SYSTEM',        ++$errno);
define('ERR_NO_TIMESTAMP',    ++$errno);

$config=array(
    
'bindAddr' => '0.0.0.0',
    
'bindPort' => '8001'
);


$serverSocket stream_socket_server('tcp://'.$config['bindAddr'].':'.$config['bindPort']);
if (!
$serverSocket){
    echo 
"Failed to create server socket\r\n";
    exit;
}

$chat = new \Kicken\Chat\ChatServer($serverSocket);
$selector = new \Kicken\Chat\StreamSelector();

$chat->onAccept(function($s) use ($selector$chat){
    
$client = new \Kicken\Chat\ChatClient($s$chat'*');
    
$selector->addStream($client);
});
$selector->addStream($chat);

while (
$selector->hasStreams()){
    
$selector->select();
}