Exemple #1
0
 /**
  * @param integer $actualCode
  * @param string  $respBody
  *
  * @return \Riak\Client\Core\Transport\RiakTransportException
  */
 protected function createResponseException($actualCode, $respBody)
 {
     $exceptionCode = $actualCode;
     $exceptionMessage = "Unexpected protobuf response code: " . $actualCode;
     if ($actualCode === RiakMessageCodes::ERROR_RESP) {
         $errorClass = self::$respClassMap[$actualCode];
         $errorMessage = Protobuf::decode($errorClass, (string) $respBody);
         if ($errorMessage->hasErrmsg()) {
             $exceptionMessage = $errorMessage->getErrmsg();
         }
         if ($errorMessage->hasErrcode()) {
             $exceptionCode = $errorMessage->getErrcode();
         }
     }
     return new RiakTransportException($exceptionMessage, $exceptionCode);
 }
Exemple #2
0
 function testMultiCodecMessageWithRepeatedFields()
 {
     $jsonCodec = new Codec\Json();
     $repeated = Protobuf\Protobuf::decode(Repeated::class, $this->bin_repeated_nested);
     $json = $jsonCodec->encode($repeated);
     $repeated = $jsonCodec->decode(new Repeated(), $json);
     $bin = Protobuf\Protobuf::encode($repeated);
     $this->assertEquals($bin, $this->bin_repeated_nested);
 }
Exemple #3
0
require dirname(__FILE__) . '/../conf/db.php';
require dirname(__FILE__) . '/../vendor/autoload.php';
require dirname(__FILE__) . '/../proto/ping.php';
require dirname(__FILE__) . '/../proto/pong.php';
$receive_len = 30;
$udp_socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($udp_socket, '0.0.0.0', 42001);
$query_server_log = $db->prepare("\nSELECT\n    server_log.server_id,\n    server_log.nonce,\n    server.session\nFROM\n    server_log\nJOIN\n    server\n        ON\n            server.id = server_log.server_id\nWHERE\n    server_log.id = ?\nAND\n    server_log.status = 'new'\n");
$query_update_server_log = $db->prepare("\nUPDATE\n    server_log\nSET\n    status = 'online',\n    nonce = NULL,\n    latency = 1000 * (NOW(6) - created),\n    players = ?\nWHERE\n    id = ?\n");
$query_update_server = $db->prepare("\nUPDATE\n    server\nSET\n    status = 'online',\n    latency = (SELECT latency FROM server_log WHERE server_log.id = ?),\n    players = ?,\n    updated = NOW()\nWHERE\n    id = ?\n");
print 'pongd started' . PHP_EOL;
while (socket_recvfrom($udp_socket, $buf, $receive_len, 0, $ip, $port)) {
    print 'received ' . $receive_len . ' bytes from ' . $ip . PHP_EOL;
    if ('pong' === substr($buf, 0, 4)) {
        print 'looks like a pong' . PHP_EOL;
        $pong = \DrSlump\Protobuf\Protobuf::decode('Pong', substr($buf, 4));
        $query_server_log->execute(array($pong->server_log_id));
        if ($server_log = $query_server_log->fetch()) {
            print 'found server_log_id' . PHP_EOL;
            if ($pong->key === hash('sha1', $server_log->session . $server_log->nonce, true)) {
                print 'sha1 validated' . PHP_EOL;
                $query_update_server_log->execute(array($pong->player_count, $pong->server_log_id));
                $query_update_server->execute(array($pong->server_log_id, $pong->player_count, $server_log->server_id));
                print 'database updated' . PHP_EOL;
            } else {
                print 'invalid sha1!' . PHP_EOL;
            }
        } else {
            print 'invalid server_log_id!' . PHP_EOL;
        }
    }