<?php

use Kicken\Chat\ChatClient;
use 
Kicken\Chat\ChatServer;
use 
Kicken\Chat\StreamSelector;

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

    if (
strncmp($prefix$nm$len) == 0){
        
$file substr($nm$len);
        
$file __DIR__ DIRECTORY_SEPARATOR $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 = [
    
'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 ChatServer($serverSocket);
$selector = new StreamSelector();

$chat->onAccept(function($s) use ($selector$chat){
    
$client = new ChatClient($s$chat, ['*']);
    
$selector->addStream($client);
});
$selector->addStream($chat);

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