Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/undr/phpbuf
php implementation of google protobuf
https://github.com/undr/phpbuf
Last synced: about 1 month ago
JSON representation
php implementation of google protobuf
- Host: GitHub
- URL: https://github.com/undr/phpbuf
- Owner: undr
- Created: 2009-10-15T11:59:20.000Z (about 15 years ago)
- Default Branch: master
- Last Pushed: 2011-08-23T18:02:05.000Z (over 13 years ago)
- Last Synced: 2023-03-10T20:33:20.372Z (almost 2 years ago)
- Language: PHP
- Homepage:
- Size: 151 KB
- Stars: 15
- Watchers: 4
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README
Awesome Lists containing this project
README
There are no generators of a code. You self should create classes of messages.
The detailed description http://memo.undr.su/2009/10/15/realizaciya-google-protocol-buffers-na-php/ (Inside Russian)
Example of usage of library:
protobufer file:
message Message_Example {
required int32 id = 1;
required sint32 balance = 2;
required bool isAdmin = 3;
enum Status {
active = 0;
inactive = 1;
deleted = 2;
}
required enum Status status = 4;
required string name = 5;
required bytes bytes = 6;
}php code:
setField("id", PhpBuf_Type::INT, PhpBuf_Rule::REQUIRED, 1);
$this->setField("balance", PhpBuf_Type::SINT, PhpBuf_Rule::REQUIRED, 2);
$this->setField("isAdmin", PhpBuf_Type::BOOL, PhpBuf_Rule::REQUIRED, 3);
$this->setField("status", PhpBuf_Type::ENUM, PhpBuf_Rule::REQUIRED, 4, array("active", "inactive", "deleted"));
$this->setField("name", PhpBuf_Type::STRING, PhpBuf_Rule::REQUIRED, 5);
$this->setField("bytes", PhpBuf_Type::BYTES, PhpBuf_Rule::REQUIRED, 6);
}
public static function name(){
return __CLASS__;
}
}/**
* Work with message
*/
require_once("/phpbuf/lib/PhpBuf.php");$message = new Message_Example();
$writer = new PhpBuf_IO_Writer();
$message->id = 150;
$message->balance = -12345;
$message->isAdmin = true;
$message->status = "deleted";
$message->name = "Andrey Lepeshkin";
$message->bytes = "Some bytes";
$message->write($writer);
$reader = PhpBuf_IO_Reader::createFromWriter($writer);
$message = new Message_Example();
$message->read($reader);
$this->assertEquals(150, $message->id);
$this->assertEquals(-12345, $message->balance);
$this->assertTrue($message->isAdmin);
$this->assertEquals("deleted", $message->status);
$this->assertEquals("Andrey Lepeshkin", $message->name);
$this->assertEquals("Some bytes", $message->bytes);?>
RPC call:
----RPC call required implements: http://code.google.com/p/protobuf-socket-rpc/
package com.example.protobuf;
message Request {
message Hoge {
required string value = 1;
}
}
message Response {
message Foo {
repeated string values = 1;
}
}service MyService {
rpc sayHello(Request.Hoge) returns(Response.Foo);
}php code:
setField('value', PhpBuf_Type::STRING, PhpBuf_Rule::REQUIRED, 1);
}
public static function name(){
return __CLASS__;
}
}
class Response_Foo extends PhpBuf_Message_Abstract {
public function __construct(){
$this->setField('values', PhpBuf_Type::STRING, PhpBuf_Rule::REPEATED, 1);
}
public static function name(){
return __CLASS__;
}
}class MyService extends PhpBuf_RPC_Service_Client {
public function __construct(PhpBuf_RPC_Context $context){
parent::__construct($context);
$this->setServiceFullQualifiedName('com.example.protobuf.MyService');
$this->registerMethodResponderClass('sayHello', Response_Foo::name());
}
}$request = new Request_Hoge;
$request->value = 'hello world';$ctx = new PhpBuf_RPC_Context;
$ctx->addServer('127.0.0.1', 12345);
$ctx->addServer('127.0.0.1', 67890);$service = new MyService($ctx);
$response = $service->sayHello($request);?>