public static function start() { $input = fopen("php://fd/3", 'r'); $output = fopen("php://fd/4", 'w'); while (true) { $obj = self::readBerp($input); if (!isset($obj)) { echo "Could not read BERP length header. Ernie server may have gone away. Exiting now.\n"; exit(1); } if (count($obj) == 4 && $obj[0] == 'call') { $mod = $obj[1]; $fun = $obj[2]; $args = $obj[3]; try { $result = self::dispatch($mod, $fun, $args); $response = Bert::t(Bert::a('reply'), $result); self::writeBerp($output, $response); } catch (Ernie_ServerError $e) { $response = Bert::t(Bert::a('error'), Bert::t(Bert::a('server'), 0, get_class($e), $e->getMessage(), $e->getTrace())); self::writeBerp($output, $response); } catch (Exception $e) { $response = Bert::t(Bert::a('error'), Bert::t(Bert::a('user'), 0, get_class($e), $e->getMessage(), $e->getTrace())); self::writeBerp($output, $response); } } elseif (count($obj) == 4 && $obj[0] == 'cast') { $mod = $obj[1]; $fun = $obj[2]; $args = $obj[3]; try { $result = self::dispatch($mod, $fun, $args); } catch (Exception $e) { // ignore } self::writeBerp($output, Bert::t(Bert::a('noreply'))); } else { $outObj = Bert::t(Bert::a('error'), array(Bert::a('server'), 0, "Invalid request: " . print_r($obj, true))); self::writeBerp($output, $outObj); } } }
public function testConvertRecursive() { $this->assertEqual(Bert_Encoder::convert(Bert::t(Bert::t(true), false)), Bert::t(Bert::t(Bert::t(Bert::a('bert'), Bert::a('true'))), Bert::t(Bert::a('bert'), Bert::a('false')))); }
public function execute() { $bertRequest = Bert_Rpc_Action_Encodes::encodeRequest(Bert::t($this->_req->kind, $this->_mod, $this->_fun, $this->_args)); $bertResponse = $this->_transaction($bertRequest); return Bert_Rpc_Action_Encodes::decodeResponse($bertResponse); }