Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Remove duplicated text.
  1. Acquire Download Protobuf libraries for  for the target language of choice, build it, and install it.
  2. Download the latest release of pre-built release of Geode and install it.
  3. Start a Geode locator, start a Geode server, and create a region with the following gfsh commands:

    Code Block
    languagebash
    themeEmacs
    titleStart Server
    gfsh>start locator --name=locator --bind-address=localhost --port=10334
    ...
    gfsh>start server --name=server --bind-address=localhost --server-port=40404 --J=-Dgeode.feature-bindprotobuf-addressprotocol=localhosttrue
    ...
    gfsh>create region --name=SampleData --type=REPLICATE
    Member | Status
    ------ | ----------------------------------------
    server | Region "/SampleData" created on "server"
  4. Locate Extract the Protobuf message definition artifact artifacts from the downloaded Geode release. Directory $GEODE_HOME/tools/ClientProtocol/geode-protobuf-definitions-<version-{versionNumber}number>.zip.
  5. Generate the language bindings from the Unzip protobuf protocol message definitions . Using using the relevant target language Protobuf library , generate the language bindings from the message definitions.using the appropriate Protobuf utility such as protoc. Example:

    Code Block
    $PROTOBUF/bin/protoc -I=$PROTOBUF/include/ -I=`pwd` --java_out=`pwd` v1/*.proto
  6. Create your application that connects a TCP socket to the server running on the host localhost, on port 40404.
  7. Write byte 110 to the socket.
  8. Build a handshake request message and Within your application, build a NewConnectionHandshake message, write it in a delimited fashion to the socket. 

    Code Block
    languagejs
    themeEmacs
    titlehandshakeRequest
    handshakeRequest NewConnectionHandshake{
      version {
        major majorVersion: 1
        minor	minorVersion: 01
      }
      authenticationMode: NONE
    }}
  9. Read the handshake response message in a delimited fashion from your socket. Note that your implementation language may not provide an API to explicitly read and/or write delimited messages. These messages are prepended with the message length encoded as a varint value. If you do not have an appropriate API, you may need to read and decode this value first, in order to determine how much data to read from the network to receive a complete message.
    Also be aware that messages may not arrive in one packet and may require multiple read() calls to receive all data from the network.  The response should match the following:

    Code Block
    languagejs
    themeEmacs
    titlehandshakeResponse
    handshakeResponseHandshakeAcknowledgement {
      ok  serverMajorVersion: 1
        serverMinorVersion: 1
        handshakePassed: true
    }
  10. Read the handshake response message in a delimited fashion from the socket and check the response for success.
  11. Build To exercise the protocol to interact with the server, within your application build a put request message to put the value bar for the key foo and , write it in a delimited fashion to the socket and socket, and read the put response message in a delimited fashion from it.

    Code Block
    languagejs
    themeEmacs
    titleputRequest
    message {
        request {
             putRequest {
                 regionName: "testRegionSampleData"
                 entry {
                 key {
                     stringResult: "foo"
                 }
                 value {
                     stringResult: "bar"
                 }
            }
        }
    }
    Code Block
    languagejs
    themeEmacs
    titleputResponse
    message {
        response {
            putResponse {}
        }
    }


    If an error occurs, your message will contain an ErrorResponse:

    Code Block
    languagejs
    themeEmacs
    titleerrorResponse
    message {
        response {
         putResponse {
    
    }   errorResponse {
                errorCode: 2100
                message: "Region passed by client did not exist: FOO"
            }
        }
    }



  12. Outside your application, verify that the put request message took effect Verify the put with the following gfsh command:

    Code Block
    languagebash
    themeEmacs
    titleVerify Put
    gfsh>get --region=SampleData --key=foo
    Result      : true
    Key Class   : java.lang.String
    Key         : foo
    Value Class : java.lang.String
    Value       : bar

...