public function testBatch() { $collection = new Response(); $this->assertEquals(false, $collection->isBatch()); $entity = new EntityResponse(); $collection->append($entity); $this->assertEquals(false, $collection->isBatch()); $entity = new EntityResponse(); $collection->append($entity); $this->assertEquals(true, $collection->isBatch()); }
/** * Parse the result given by the JSON RPC Server * * @param Collection\Request $request * @param mixed $result * @param mixed $info * @return Collection\Response */ protected function parseResponse(Collection\Request $request, $result, $info) { // Rewind to collection to start from the beginning $request->rewind(); if (empty($result) && $request->isBatch() === false && $request->current()->getId() !== null) { throw new Exception\InvalidResponse('Client parse error', static::CLIENT_PARSE_ERROR); } // First go through the layer stack $result = $this->protocolLayerStack->handleResponse($result); $json = json_decode($result, true); if (is_array($json) === false) { throw new Exception\InvalidResponse('Client parse error', static::CLIENT_PARSE_ERROR); } // Check varaibles $hasIdKey = array_key_exists('id', $json); $isBatch = $request->isBatch(); // Check if we have a batch result if ($isBatch === true && $hasIdKey === true) { throw new Exception\InvalidResponse('Client expected batch result', static::CLIENT_EXPECTED_BATCH); // check if we have single result } else { if ($isBatch === false && $hasIdKey === false) { throw new Exception\InvalidResponse('Client expected single result', static::CLIENT_EXPECTED_SINGLE); } } // No batch, so we make it one if ($isBatch === false) { $json = array($json); } // Create collection response $responses = new Collection\Response(); // Loop through all the responses foreach ($json as $rawResponse) { $response = new Entity\Response(); // Fetch the items from the response array $id = $this->getArrayItem('id', $rawResponse); $jsonrpc = $this->getArrayItem('jsonrpc', $rawResponse); $result = $this->getArrayItem('result', $rawResponse, null); $error = $this->getArrayItem('error', $rawResponse, null); // Set general data $response->setId($id)->setJsonrpc($jsonrpc); // Determine which item to set if ($error === null) { $response->setResult($result); } else { // hydrate error information $errorObject = new Entity\Error(); $errorObject->setCode($this->getArrayItem('code', $error)); $errorObject->setData($this->getArrayItem('data', $error)); $errorObject->setMessage($this->getArrayItem('message', $error)); $response->setError($errorObject); } // When callback has been registered use this if ($request->hasIdCallback($response->getId())) { $request->performCallback($response); } // append the response to the collection $responses->append($response); } // return the collection return $responses; }
/** * Handle any PHP error. IT will return error code when something goes wrong. * Script will be terminated * * @param integer $code * @param string $message * @param string $file * @param string $line * @param mixed $context * @return void */ public function handlePhpError($code, $message, $file = null, $line = null, $context = null) { // Create response object $response = $this->createResponseFromException(new Entity\Request(), new \Exception($message, $code)); $collection = new Collection\Response(); $collection->append($response); // Set response $this->printResponse($collection); // No use to go further stop the execution exit; }