<?php

namespace Kicken\Chat;


class 
StreamSelector {
    
/** @var ISelectable[] */
    
private $mStreams = [];

    public function 
__construct(){
    }

    public function 
addStream(ISelectable $s){
        
$this->mStreams[] = $s;
    }

    public function 
hasStreams(){
        return 
count($this->mStreams) > 0;
    }

    public function 
select($tvSec null$tvUsec null){
        
$r = [];
        
$w = [];
        
$e = [];

        foreach (
$this->mStreams as $stream){
            if ((
$resource $stream->getResource()) !== null){
                
$r[] = $resource;
                
$e[] = $resource;
                if (
$stream->hasPendingWrites()){
                    
$w[] = $resource;
                }
            }
        }

        if (
stream_select($r$w$e$tvSec$tvUsec)){
            foreach (
$this->mStreams as $stream){
                
$resource $stream->getResource();
                if (
in_array($resource$wtrue)){
                    
$stream->nowWritable();
                }
                if (
in_array($resource$rtrue)){
                    
$stream->nowReadable();
                }
            }
        }
    }
}