/**
  * 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();
     }
 }
Exemple #4
0
 /**
  * {@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());
         }
     });
 }
Exemple #6
0
 /**
  * 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());
     });
 }
Exemple #7
0
 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!");
         }
     });
 }
Exemple #8
0
 /**
  * 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);
     }
 }
Exemple #10
0
 /**
  * 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();
             }
         }
     });
 }