Campustream 1.0
A social network MQP for WPI
|
00001 <?php 00002 00003 require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php'; 00004 require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php'; 00005 require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php'; 00006 require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php'; 00007 00008 require_once $GLOBALS['THRIFT_ROOT'].'/packages/Flockdb/FlockDB.php'; 00009 00010 class Phlock { 00011 00012 private $servers; 00013 private $graphs; 00014 private $options; 00015 private $client; 00016 00017 public function __construct(array $servers, array $options = array()) { 00018 $this->servers = $servers; 00019 $this->graphs = isset($options['graphs']) ? $options['graphs'] : array(); 00020 unset($options['graphs']); 00021 $this->options = $options; 00022 } 00023 00024 public function client() { 00025 if (!isset($this->client)) { 00026 list($client, $port) = explode(':', $this->servers[0]); 00027 00028 $socket = new TSocket($client, $port); 00029 $protocol = new TBinaryProtocol($socket); 00030 $this->client = new FlockDBClient($protocol); 00031 00032 $socket->open(); 00033 } 00034 return $this->client; 00035 } 00036 00037 public function add($source_id, $graph, $destination_ids) { 00038 $term = $this->createQueryTerm($source_id, $graph, $destination_ids); 00039 $this->update(Flock_ExecuteOperationType::Add, $term); 00040 } 00041 00042 public function remove($source_id, $graph, $destination_ids) { 00043 $term = $this->createQueryTerm($source_id, $graph, $destination_ids); 00044 $this->update(Flock_ExecuteOperationType::Remove, $term); 00045 } 00046 00047 public function archive($source_id, $graph, $destination_ids) { 00048 $term = $this->createQueryTerm($source_id, $graph, $destination_ids); 00049 $this->update(Flock_ExecuteOperationType::Archive, $term); 00050 } 00051 00052 public function update($method, Phlock_QueryTerm $term, $priority = Flock_Priority::High) { 00053 $operations = new Phlock_ExecuteOperations($this->client()); 00054 $operations->setPriority($priority); 00055 $operations->addOperation(new Phlock_ExecuteOperation($method, $term)); 00056 $operations->apply(); 00057 } 00058 00059 public function contains($source_id, $graph, $destination_id) { 00060 $graph_id = is_int($graph) ? $graph : $this->graphs[$graph]; 00061 return $this->client()->contains($source_id, $graph_id, $destination_id); 00062 } 00063 00064 public function size($source_id, $graph, $destination_ids) { 00065 $cursor = $this->select($source_id, $graph, $destination_ids); 00066 return $cursor->size(); 00067 } 00068 00069 public function select($source_id, $graph, $destination_ids) { 00070 $term = $this->createQueryTerm($source_id, $graph, $destination_ids); 00071 return new Phlock_Cursor($this->client(), $term); 00072 } 00073 00074 public function createQueryTerm($source, $graph, $destination) { 00075 $graph_id = is_int($graph) ? $graph : $this->graphs[$graph]; 00076 return new Phlock_QueryTerm($source, $graph_id, $destination); 00077 } 00078 }