1
2verbose = true
3
4function say(...)
5    if verbose then
6        print(...)
7    end
8end
9
10function mcp_config_pools()
11    local srv = mcp.backend
12    local b1 = srv('b1', '127.0.0.1', 12021)
13    return mcp.pool({b1})
14end
15
16function factory(rctx, h)
17    return function(r)
18        return rctx:enqueue_and_wait(r, h)
19    end
20end
21
22function d_factory(rctx)
23    return function(r)
24        return "SERVER_ERROR default route\r\n"
25    end
26end
27
28function string_fgen(msg)
29    local fg = mcp.funcgen_new()
30    fg:ready({ f = function(rctx)
31        return function(r)
32            return msg
33        end
34    end})
35    return fg
36end
37
38-- TODO: make default path and some other paths that return static data
39function mcp_config_routes(p)
40    local fg = mcp.funcgen_new()
41    local fgh = fg:new_handle(p)
42    fg:ready({ f = factory, a = fgh })
43
44    local def_fg = mcp.funcgen_new()
45    def_fg:ready({ f = d_factory })
46
47    local map = {
48        ["one"] = fg,
49        ["two"] = fg,
50        ["cmd"] = { [mcp.CMD_GET] = string_fgen("SERVER_ERROR cmd_get\r\n"),
51            [mcp.CMD_SET] = string_fgen("SERVER_ERROR cmd_set\r\n") },
52        ["cmdd"] = { [mcp.CMD_ANY_STORAGE] = string_fgen("SERVER_ERROR cmd_default\r\n"), },
53    }
54
55    local cmap = {
56        [mcp.CMD_INCR] = string_fgen("SERVER_ERROR cmap incr\r\n"),
57        [mcp.CMD_DECR] = string_fgen("SERVER_ERROR cmap decr\r\n")
58    }
59
60    local rpfx_short = mcp.router_new({ map = map, cmap = cmap, mode = "prefix", stop = "|", default = def_fg })
61    local rpfx_long = mcp.router_new({ map = map, mode = "prefix", stop = "+#+", default = def_fg })
62    local ranc_short = mcp.router_new({ map = map, mode = "anchor", start = "_", stop = ",", default = def_fg })
63    local ranc_long = mcp.router_new({ map = map, mode = "anchor", start = "=?=", stop = "__", default = def_fg })
64
65    local cmap_only = mcp.router_new({
66        cmap = {
67            [mcp.CMD_GETS] = string_fgen("SERVER_ERROR cmap_only gets\r\n")
68        },
69        default = string_fgen("SERVER_ERROR cmap_only default\r\n"),
70    })
71
72    mcp.attach(mcp.CMD_ANY_STORAGE, rpfx_short)
73    mcp.attach(mcp.CMD_MG, rpfx_short)
74    mcp.attach(mcp.CMD_MS, rpfx_long)
75    mcp.attach(mcp.CMD_MD, ranc_short)
76    mcp.attach(mcp.CMD_MA, ranc_long)
77    mcp.attach(mcp.CMD_GETS, cmap_only)
78    mcp.attach(mcp.CMD_GAT, cmap_only)
79end
80