-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.lua
More file actions
61 lines (45 loc) · 1.48 KB
/
Copy pathserver.lua
File metadata and controls
61 lines (45 loc) · 1.48 KB
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
function data_loop(linda, server_data)
local _, fn = linda:receive(nil, "update_server_data")
fn(server_data)
linda:set("product_list", server_data.product_list)
data_loop(linda, server_data)
end
local function server_init(socket)
local server = socket.tcp()
assert(server:bind('*', 3000))
server:listen(5)
local ip, port = server:getsockname()
print("Servidor ativo e escutando em")
print(ip .. ":" .. port)
return server
end
function server_loop(linda, server)
local socket = require("socket")
local cjson = require("cjson")
if server == nil then
server = server_init(socket)
return server_loop(linda, server)
end
local client = server:accept()
local message = client:receive("*l") or "<empty>"
local product = cjson.decode(message)
linda:send("update_server_data", function(data)
table.insert(data.product_list, product)
end)
socket.sleep(1)
local product_list = linda:get("product_list") or {}
print("\n[")
for k, v in ipairs(product_list) do
print("\t" .. cjson.encode(v))
end
print("]\n")
-- print("Received: " .. message)
-- client:send("response\n")
server_loop(linda, server)
end
local lanes = require("lanes").configure()
local linda = lanes.linda()
local conf = { globals = _G }
local server_data = { product_list = {} }
lanes.gen("*", conf, data_loop)(linda, server_data)
lanes.gen("*", conf, server_loop)(linda):join()