evseevnn/php-cassandra-binary

View on GitHub
src/Cluster.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
namespace evseevnn\Cassandra;
use evseevnn\Cassandra\Cluster\Node;
use evseevnn\Cassandra\Exception\ClusterException;

class Cluster {

    /**
     * @var array
     */
    private $nodes;

    /**
     * @param array $nodes
     */
    public function __construct(array $nodes = []) {
        $this->nodes = $nodes;
    }

    /**
     * @param string $host
     */
    public function appendNode($host) {
        $this->nodes[] = $host;
    }

    /**
     * @return Node
     * @throws Exception\ClusterException
     */
    public function getRandomNode() {
        if (empty($this->nodes)) throw new ClusterException('Node list is empty.');
        $nodeKey = array_rand($this->nodes);
        $node = $this->nodes[$nodeKey];
        try {
            if ((array)$node === $node) {
                $node = new Node($nodeKey, $node);
                unset($this->nodes[$nodeKey]);
            } else {
                $node = new Node($node);
                unset($this->nodes[$nodeKey]);
            }
        } catch (\InvalidArgumentException $e) {
            trigger_error($e->getMessage());
        }

        return $node;
    }
}