/** * Checks the response for errors sent from the Google Geocoder API. * * @param string $response * @param string $format * @throws \Exception */ protected function checkResponse($response, $format) { switch ($format) { case 'json': $json = json_decode($response); $status = $json->status; if ('OK' != $status && 'ZERO_RESULTS' != $status) { $this->logger->err(sprintf('The Google Geocoder API responded with an error. The status was %s. Refer to the docs to see what that status means.', $status)); throw new \Exception(sprintf('The Google Geocoder API responded with an error. The status was %s. Refer to the docs to see what that status means.', $status)); } else { $this->logger->debug('Response OK'); } break; case 'xml': $xml = new \SimpleXMLElement($response); $status = current($xml->status); if ('OK' != $status && 'ZERO_RESULTS' != $status) { $this->logger->err(sprintf('The Google Geocoder API responded with an error. The status was %s. Refer to the docs to see what that status means.', $status)); throw new \Exception(sprintf('The Google Geocoder API responded with an error. The status was %s. Refer to the docs to see what that status means.', $status)); } else { $this->logger->debug('Response OK'); } break; } }
/** * @param MvcEvent $event * @return void */ public function onError(MvcEvent $event) { if (!$this->options->getExceptionsLoggingEnabled()) { return; } $exception = $event->getParam('exception'); if (!$exception) { return; } $message = $exception->getFile() . ":" . $exception->getLine() . ": " . $exception->getMessage(); $this->logger->err($message, array('exception' => $exception)); }
private function onData($data) { try { $this->_lastChanged = time(); if ($this->_transport) { $this->emit('data', array($data, $this)); } else { $this->establishConnection($data); } } catch (Exception $e) { $this->logger->err("Error while handling incoming data. Exception message is: " . $e->getMessage()); $this->close(); } }
/** * {@inheritdoc} */ public function report($priority, $message, $extra = []) { if ($this->log === null) { return; } switch ($priority) { case Logger::EMERG: $this->log->emerg($message, $extra); break; case Logger::ERR: $this->log->err($message, $extra); break; default: break; } }
public function __construct(TransportInterface $carrierProtocol, LoopInterface $loop, LoggerInterface $logger) { $that = $this; $this->logger = $logger; $this->loop = $loop; $this->carrierProtocol = $carrierProtocol; $this->actionEmitter = new EventEmitter(); $deferreds =& $this->deferred; $timers =& $this->timers; $carrierProtocol->on("message", function (MessageInterface $message) use(&$deferreds, &$timers, &$loop, $that, $logger) { $string = $message->getData(); try { $jsonMessage = RemoteEventMessage::fromJson($string); $tag = $jsonMessage->getTag(); if (array_key_exists($tag, $deferreds)) { $deferred = $deferreds[$tag]; unset($deferreds[$tag]); if (array_key_exists($tag, $timers)) { $loop->cancelTimer($timers[$tag]); unset($timers[$tag]); } $deferred->resolve($jsonMessage); } else { $that->remoteEvent()->emit($jsonMessage->getEvent(), array($jsonMessage)); } $that->emit("message", array($jsonMessage)); } catch (\Exception $e) { $logger->err("Exception while parsing JsonMessage: " . $e->getMessage()); } }); }
/** * Connect to AMI and start emitting events. * * @param string $address Example uaername:password@localhost:5038 * @return \React\Promise\Promise */ public function connect($address) { $factory = new Factory($this->eventLoop); return $factory->createClient($address)->then(function (Client $client) { $this->amiClient = $client; $this->actionSender = new ActionSender($client); $this->actionSender->events(true); $client->on('close', function () { $this->logger->debug('AMI connection closed'); }); $client->on('event', function (Event $event) { $this->wsClient->emit($event->getName(), (array) $event); }); }, function (\Exception $e) { $this->logger->err('Connection error: ' . $e->getMessage()); }); }
public function __construct($server, LoggerInterface $logger) { $this->server = $server; $this->logger = $logger; $this->handlers = new \SplObjectStorage(); $this->membership = new \SplObjectStorage(); /** * @var $membership \SplObjectStorage|WebSocketUriHandlerInterface[] */ $membership = $this->membership; $that = $this; $server->on("connect", function (WebSocketTransportInterface $client) use($that, $logger, $membership) { $handler = $that->matchConnection($client); if ($handler) { $logger->notice("Added client {$client->getId()} to " . get_class($handler)); $membership->attach($client, $handler); $handler->emit("connect", array("client" => $client)); $handler->addConnection($client); } else { $logger->err("Cannot route {$client->getId()} with request uri {$client->getHandshakeRequest()->getUriString()}"); } }); $server->on('disconnect', function (WebSocketTransportInterface $client) use($that, $logger, $membership) { if ($membership->contains($client)) { $handler = $membership[$client]; $membership->detach($client); $logger->notice("Removed client {$client->getId()} from" . get_class($handler)); $handler->removeConnection($client); $handler->emit("disconnect", array("client" => $client)); } else { $logger->warn("Client {$client->getId()} not attached to any handler, so cannot remove it!"); } }); $server->on("message", function (WebSocketTransportInterface $client, WebSocketMessageInterface $message) use($that, $logger, $membership) { if ($membership->contains($client)) { $handler = $membership[$client]; $handler->emit("message", compact('client', 'message')); } else { $logger->warn("Client {$client->getId()} not attached to any handler, so cannot forward the message!"); } }); }
/** * Perform a RESTful DLF request. * * @param array $path_elements URL path elements * @param array $params GET parameters (null for none) * @param string $method HTTP method * @param string $body HTTP body (for PUT or POST HTTP method) * * @return SimpleXMLElement */ public function doRestDLFRequest($path_elements, $params = null, $method = 'GET', $body = null) { $path = ''; foreach ($path_elements as $path_element) { $path .= $path_element . "/"; } $url = "http://{$this->host}:{$this->dlfport}/rest-dlf/" . $path; $headers = ["accept" => "application/xml"]; if ($this->language) { $params['lang'] = $this->language; } $result = $this->doHTTPRequest($url, $params, $method, $body, $headers); $replyCode = (string) $result->{'reply-code'}; if ($replyCode != "0000") { $replyText = (string) $result->{'reply-text'}; $this->logger->err("DLF request failed", array('url' => $url, 'reply-code' => $replyCode, 'reply-message' => $replyText)); $ex = new AlephRestfulException($replyText, $replyCode); $ex->setXmlResponse($result); throw $ex; } return $result; }
/** * @param EventInterface $event */ public function onError(EventInterface $event) { if ($exception = $event->getParam('exception')) { $this->logger->err($exception); } }
/** * Start the server */ public function bind() { $err = $errno = 0; $this->flashPolicyFile = str_replace('to-ports="*', 'to-ports="' . $this->uri->getPort() ?: 80, $this->flashPolicyFile); $serverSocket = stream_socket_server($this->uri->toString(), $errno, $err, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $this->context); $this->logger->notice(sprintf("phpws listening on %s", $this->uri->toString())); if ($serverSocket == false) { $this->logger->err("Error: {$err}"); return; } $timeOut =& $this->purgeUserTimeOut; $sockets = $this->streams; $that = $this; $logger = $this->logger; $this->loop->addReadStream($serverSocket, function ($serverSocket) use($that, $logger, $sockets) { $newSocket = stream_socket_accept($serverSocket); if (false === $newSocket) { return; } stream_set_blocking($newSocket, 0); $client = new WebSocketConnection($newSocket, $that->loop, $logger); $sockets->attach($client); $client->on("handshake", function (Handshake $request) use($that, $client) { $that->emit("handshake", [$client->getTransport(), $request]); }); $client->on("connect", function () use($that, $client, $logger) { $con = $client->getTransport(); $that->getConnections()->attach($con); $that->emit("connect", ["client" => $con]); }); $client->on("message", function ($message) use($that, $client, $logger) { $connection = $client->getTransport(); $that->emit("message", ["client" => $connection, "message" => $message]); }); $client->on("close", function () use($that, $client, $logger, &$sockets, $client) { $sockets->detach($client); $connection = $client->getTransport(); if ($connection) { $that->getConnections()->detach($connection); $that->emit("disconnect", ["client" => $connection]); } }); $client->on("flashXmlRequest", function () use($that, $client) { $client->getTransport()->sendString($that->flashPolicyFile); $client->close(); }); }); $this->loop->addPeriodicTimer(5, function () use($timeOut, $sockets, $that) { # Lets send some pings foreach ($that->getConnections() as $c) { if ($c instanceof WebSocketTransportHybi) { $c->sendFrame(WebSocketFrame::create(WebSocketOpcode::PING_FRAME)); } } $currentTime = time(); if ($timeOut == null) { return; } foreach ($sockets as $s) { if ($currentTime - $s->getLastChanged() > $timeOut) { $s->close(); } } }); }