1*890232f2SAndroid Build Coastguard Worker<?php 2*890232f2SAndroid Build Coastguard Worker/* 3*890232f2SAndroid Build Coastguard Worker * Copyright 2015 Google Inc. All rights reserved. 4*890232f2SAndroid Build Coastguard Worker * 5*890232f2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*890232f2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*890232f2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 8*890232f2SAndroid Build Coastguard Worker * 9*890232f2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*890232f2SAndroid Build Coastguard Worker * 11*890232f2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*890232f2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*890232f2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*890232f2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*890232f2SAndroid Build Coastguard Worker * limitations under the License. 16*890232f2SAndroid Build Coastguard Worker */ 17*890232f2SAndroid Build Coastguard Worker 18*890232f2SAndroid Build Coastguard Worker// To run, use the `php_sample.sh` script. 19*890232f2SAndroid Build Coastguard Worker 20*890232f2SAndroid Build Coastguard Worker// It is recommended that you use PSR autoload when using FlatBuffers. 21*890232f2SAndroid Build Coastguard Workerfunction __autoload($class_name) { 22*890232f2SAndroid Build Coastguard Worker $class = substr($class_name, strrpos($class_name, "\\") + 1); 23*890232f2SAndroid Build Coastguard Worker $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); // `flatbuffers` root. 24*890232f2SAndroid Build Coastguard Worker $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, "php")), 25*890232f2SAndroid Build Coastguard Worker join(DIRECTORY_SEPARATOR, array($root_dir, "samples", "MyGame", "Sample"))); 26*890232f2SAndroid Build Coastguard Worker foreach ($paths as $path) { 27*890232f2SAndroid Build Coastguard Worker $file = join(DIRECTORY_SEPARATOR, array($path, $class . ".php")); 28*890232f2SAndroid Build Coastguard Worker if (file_exists($file)) { 29*890232f2SAndroid Build Coastguard Worker require($file); 30*890232f2SAndroid Build Coastguard Worker break; 31*890232f2SAndroid Build Coastguard Worker } 32*890232f2SAndroid Build Coastguard Worker } 33*890232f2SAndroid Build Coastguard Worker} 34*890232f2SAndroid Build Coastguard Worker 35*890232f2SAndroid Build Coastguard Worker// Example how to use FlatBuffers to create and read binary buffers. 36*890232f2SAndroid Build Coastguard Workerfunction main() { 37*890232f2SAndroid Build Coastguard Worker $builder = new Google\FlatBuffers\FlatbufferBuilder(0); 38*890232f2SAndroid Build Coastguard Worker 39*890232f2SAndroid Build Coastguard Worker // Create some weapons for our Monster using the `createWeapon()` helper function. 40*890232f2SAndroid Build Coastguard Worker $weapon_one = $builder->createString("Sword"); 41*890232f2SAndroid Build Coastguard Worker $sword = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_one, 3); 42*890232f2SAndroid Build Coastguard Worker $weapon_two = $builder->createString("Axe"); 43*890232f2SAndroid Build Coastguard Worker $axe = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_two, 5); 44*890232f2SAndroid Build Coastguard Worker 45*890232f2SAndroid Build Coastguard Worker // Serialize the FlatBuffer data. 46*890232f2SAndroid Build Coastguard Worker $name = $builder->createString("Orc"); 47*890232f2SAndroid Build Coastguard Worker 48*890232f2SAndroid Build Coastguard Worker $treasure = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); 49*890232f2SAndroid Build Coastguard Worker $inv = \MyGame\Sample\Monster::CreateInventoryVector($builder, $treasure); 50*890232f2SAndroid Build Coastguard Worker 51*890232f2SAndroid Build Coastguard Worker $weaps = array($sword, $axe); 52*890232f2SAndroid Build Coastguard Worker $weapons = \MyGame\Sample\Monster::CreateWeaponsVector($builder, $weaps); 53*890232f2SAndroid Build Coastguard Worker 54*890232f2SAndroid Build Coastguard Worker $pos = \MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0); 55*890232f2SAndroid Build Coastguard Worker 56*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::StartMonster($builder); 57*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::AddPos($builder, $pos); 58*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::AddHp($builder, 300); 59*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::AddName($builder, $name); 60*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::AddInventory($builder, $inv); 61*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::AddColor($builder, \MyGame\Sample\Color::Red); 62*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::AddWeapons($builder, $weapons); 63*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::AddEquippedType($builder, \MyGame\Sample\Equipment::Weapon); 64*890232f2SAndroid Build Coastguard Worker \MyGame\Sample\Monster::AddEquipped($builder, $weaps[1]); 65*890232f2SAndroid Build Coastguard Worker $orc = \MyGame\Sample\Monster::EndMonster($builder); 66*890232f2SAndroid Build Coastguard Worker 67*890232f2SAndroid Build Coastguard Worker $builder->finish($orc); // You may also call `\MyGame\Sample\Monster::FinishMonsterBuffer($builder, $orc);`. 68*890232f2SAndroid Build Coastguard Worker 69*890232f2SAndroid Build Coastguard Worker // We now have a FlatBuffer that can be stored on disk or sent over a network. 70*890232f2SAndroid Build Coastguard Worker 71*890232f2SAndroid Build Coastguard Worker // ...Code to store to disk or send over a network goes here... 72*890232f2SAndroid Build Coastguard Worker 73*890232f2SAndroid Build Coastguard Worker // Instead, we are going to access it right away, as if we just received it. 74*890232f2SAndroid Build Coastguard Worker 75*890232f2SAndroid Build Coastguard Worker $buf = $builder->dataBuffer(); 76*890232f2SAndroid Build Coastguard Worker 77*890232f2SAndroid Build Coastguard Worker // Get access to the root: 78*890232f2SAndroid Build Coastguard Worker $monster = \MyGame\Sample\Monster::GetRootAsMonster($buf); 79*890232f2SAndroid Build Coastguard Worker 80*890232f2SAndroid Build Coastguard Worker $success = true; // Tracks if an assert occurred. 81*890232f2SAndroid Build Coastguard Worker 82*890232f2SAndroid Build Coastguard Worker // Note: We did not set the `mana` field explicitly, so we get back the default value. 83*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getMana() == 150); 84*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getHp() == 300); 85*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getName() == "Orc"); 86*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getColor() == \MyGame\Sample\Color::Red); 87*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getPos()->getX() == 1.0); 88*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getPos()->getY() == 2.0); 89*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getPos()->getZ() == 3.0); 90*890232f2SAndroid Build Coastguard Worker 91*890232f2SAndroid Build Coastguard Worker // Get and test the `inventory` FlatBuffer `vector`. 92*890232f2SAndroid Build Coastguard Worker for ($i = 0; $i < $monster->getInventoryLength(); $i++) { 93*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getInventory($i) == $i); 94*890232f2SAndroid Build Coastguard Worker } 95*890232f2SAndroid Build Coastguard Worker 96*890232f2SAndroid Build Coastguard Worker // Get and test the `weapons` FlatBuffer `vector` of `table`s. 97*890232f2SAndroid Build Coastguard Worker $expected_weapon_names = array("Sword", "Axe"); 98*890232f2SAndroid Build Coastguard Worker $expected_weapon_damages = array(3, 5); 99*890232f2SAndroid Build Coastguard Worker for ($i = 0; $i < $monster->getWeaponsLength(); $i++) { 100*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getWeapons($i)->getName() == $expected_weapon_names[$i]); 101*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getWeapons($i)->getDamage() == $expected_weapon_damages[$i]); 102*890232f2SAndroid Build Coastguard Worker } 103*890232f2SAndroid Build Coastguard Worker 104*890232f2SAndroid Build Coastguard Worker // Get and test the `equipped` FlatBuffer `union`. 105*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getEquippedType() == \MyGame\Sample\Equipment::Weapon); 106*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getEquipped(new \MyGame\Sample\Weapon())->getName() == "Axe"); 107*890232f2SAndroid Build Coastguard Worker $success &= assert($monster->getEquipped(new \MyGame\Sample\Weapon())->getDamage() == 5); 108*890232f2SAndroid Build Coastguard Worker 109*890232f2SAndroid Build Coastguard Worker if ($success) { 110*890232f2SAndroid Build Coastguard Worker print("The FlatBuffer was successfully created and verified!\n"); 111*890232f2SAndroid Build Coastguard Worker } 112*890232f2SAndroid Build Coastguard Worker} 113*890232f2SAndroid Build Coastguard Worker 114*890232f2SAndroid Build Coastguard Workermain(); 115*890232f2SAndroid Build Coastguard Worker?> 116