~bigbes/tarantool

tarantool-protobuf

ref: cef42bf3d8349e953917d9a0ba1522edadf36bd6 tarantool-protobuf/examples/grpc/client.lua -rw-r--r-- 1.5 KiB
cef42bf3 — Eugene Blikh docs: proto2 is supported for the core surface 3 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
-- Greeter client example. Loads the server-side from server.lua, builds
-- a loopback transport, and exercises every streaming flavor.
--
-- Run with:
--   LUA_PATH="./runtime/?/init.lua;./runtime/?.lua;./examples/expected/?.lua;./examples/expected/?/init.lua;;" \
--     tarantool examples/grpc/client.lua

local fiber = require('fiber')
local hello = require('full.hello.hello_pb')

-- Builds a transport — see examples/grpc/server.lua.
local transport = dofile('examples/grpc/server.lua')

local client = hello.Greeter_client(transport)

-- 1. Unary
print('--- unary ---')
local reply = client.SayHello({name = 'Alice'}, {})
print(reply.greeting)

-- 2. Server-stream
print('--- server-stream ---')
local s = client.StreamHellos({name = 'Bob'}, {})
while true do
    local msg, err = s:recv()
    if msg == nil then
        if err ~= nil then error(err, 0) end
        break
    end
    print(msg.greeting)
end

-- 3. Client-stream
print('--- client-stream ---')
local c = client.CollectHellos({})
c:send({name = 'Alice'})
c:send({name = 'Bob'})
c:send({name = 'Carol'})
c:close_send()
local final = c:recv()
print(final.greeting)

-- 4. Bidi
print('--- bidi ---')
local b = client.Chat({})

-- Producer fiber pushes a few messages then closes its side.
fiber.create(function()
    for _, name in ipairs({'X', 'Y', 'Z'}) do
        b:send({name = name})
    end
    b:close_send()
end)

while true do
    local msg, err = b:recv()
    if msg == nil then
        if err ~= nil then error(err, 0) end
        break
    end
    print(msg.greeting)
end

os.exit(0)