public function testProperties() { $Message = new PayloadMessage(); $Message->setType(PayloadMessage::TYPE_PLAIN); $this->assertEquals(PayloadMessage::TYPE_PLAIN, $Message->getType()); $Message->setType(PayloadMessage::TYPE_JSON); $this->assertEquals(PayloadMessage::TYPE_JSON, $Message->getType()); $Message->setDelayWhileIdle(true); $this->assertTrue($Message->needDelayWhileIdle()); $Message->setDelayWhileIdle(false); $this->assertFalse($Message->needDelayWhileIdle()); $Message->setDryRun(true); $this->assertTrue($Message->isDryRun()); $Message->setDryRun(false); $this->assertFalse($Message->isDryRun()); $Message->setRestrictedPackageName('PACKageNAME'); $this->assertEquals('PACKageNAME', $Message->getRestrictedPackageName()); $this->assertTrue($Message->hasRestrictedPackageName()); $Message->setType(PayloadMessage::TYPE_PLAIN); $Message->setRegistrationIds('REGistrationID'); $this->assertEquals('REGistrationID', $Message->getRegistrationIds()); $Message->setType(PayloadMessage::TYPE_JSON); $Message->setRegistrationIds(['REGistrationID1', 'REGistrationID2']); $this->assertEquals(['REGistrationID1', 'REGistrationID2'], $Message->getRegistrationIds()); $Message->setTimeToLive(30.5); $this->assertEquals(30, $Message->getTimeToLive()); $this->assertEquals(['registration_ids' => ['REGistrationID1', 'REGistrationID2'], 'delay_while_idle' => false, 'dry_run' => false, 'time_to_live' => 30, 'restricted_package_name' => 'PACKageNAME'], $Message->export()); }
/** * Send GCM message method * @param PayloadMessage $Message GCM message instance * @return Response sent response instance * @throws GCMFormatException when request or response format was incorrect * @throws GCMUnauthorizedException when was incorrect authorization key * @throws GCMServerError when something wrong on the GCM server * @throws GCMUnrecoverableError when GCM server is not available */ public function send(PayloadMessage $Message) { switch ($Message->getType()) { case PayloadMessage::TYPE_PLAIN: $this->getRequest()->setContentTypeCode(Request::CONTENT_TYPE_UNDEFINED); $this->getRequest()->addHeader('Content-Type', self::CONTENT_TYPE_PLAIN_TEXT); break; case PayloadMessage::TYPE_JSON: $this->getRequest()->setContentTypeCode(Request::CONTENT_TYPE_JSON); $this->getRequest()->addHeader('Content-Type', self::CONTENT_TYPE_JSON); break; default: throw new GCMFormatException('unsupported request format code \'' . $Message->getType() . '\''); } $this->getRequest()->setPostData($Message->export()); try { $result = $this->getRequest()->send(); Response::$type = $Message->getType(); return Response::initializeByString($result); } catch (HttpClientErrorCodeException $Ex) { switch ($Ex->getCode()) { case '400': throw new GCMFormatException('invalid JSON request with message \'' . $Ex->getMessage() . '\''); case '401': throw new GCMUnauthorizedException('invalid authorization key \'' . $this->getAuthorizationKey() . '\''); default: throw $Ex; } } catch (HttpServerErrorCodeException $Ex) { switch ($Ex->getCode()) { case '500': throw new GCMUnrecoverableError('unrecoverable GCM server error'); default: $headers = $this->getRequest()->getResponseHeaders(); throw new GCMServerError(@$headers['Retry-After']); } } }