-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbinding.lua
41 lines (32 loc) · 983 Bytes
/
binding.lua
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
local zmq = require 'lzmq'
local cjson = require 'cjson'
local Binding = {}
Binding.__index = Binding
function Binding.create(ctx, loop, port, onMessage)
local binding = {}
setmetatable(binding, Binding)
binding.onMessage = onMessage
binding.socket = ctx:socket({zmq.ROUTER, bind="tcp://*:" .. port})
loop:add_socket(binding.socket, function() binding:gotMessage() end)
return binding
end
function Binding:gotMessage()
local client_id = self.socket:recv()
local message_json = self.socket:recv()
if not message_json then return nil end
local message = cjson.decode(message_json)
if message.kind == 'ping' then
self:gotPing(client_id, message)
else
self.onMessage(client_id, message)
end
end
function Binding:gotPing(client_id, message)
pong = {
id = message.id,
ping = 'pong'
}
local pong_json = cjson.encode(pong)
self.socket:sendx(client_id, pong_json)
end
return Binding