private function sendRequestAsyncInternal(BaseRequest &$request, BaseResponse &$response, AsyncCallback $callback = NULL) { $this->addRequiredHeaders($request); $parameters = array('exceptions' => false, 'http_errors' => false); $queryString = $request->getQueryString(); $body = $request->getBody(); if ($queryString != NULL) { $parameters['query'] = $queryString; } if ($body != NULL) { $parameters['body'] = $body; } $request = new Request(strtoupper($request->getMethod()), $request->getResourcePath(), $request->getHeaders()); try { if ($callback != NULL) { return $this->client->sendAsync($request, $parameters)->then(function ($res) use(&$response, $callback) { try { $response->parseResponse($res->getStatusCode(), $res->getBody()); $callback->onSucceed($response); } catch (MnsException $e) { $callback->onFailed($e); } }); } else { return $this->client->sendAsync($request, $parameters); } } catch (TransferException $e) { $message = $e->getMessage(); if ($e->hasResponse()) { $message = $e->getResponse()->getBody(); } throw new MnsException($e->getCode(), $message, $e); } }