<?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();
}