Skip to content

Commit

Permalink
service.lua可以在用一个服务中复用
Browse files Browse the repository at this point in the history
  • Loading branch information
hongling0 committed Jun 14, 2017
1 parent 52026eb commit 5479848
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 21 deletions.
12 changes: 6 additions & 6 deletions lualib/skynet/datasheet/builder.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ local builder = {}

local cache = {}
local dataset = {}

local address
local function monitor(pointer)
skynet.fork(function()
skynet.call(service.address, "lua", "collect", pointer)
skynet.call(address, "lua", "collect", pointer)
for k,v in pairs(cache) do
if v == pointer then
cache[k] = nil
Expand All @@ -32,7 +32,7 @@ function builder.new(name, v)
assert(dataset[name] == nil)
local datastring = dumpsheet(v)
local pointer = core.stringpointer(datastring)
skynet.call(service.address, "lua", "update", name, pointer)
skynet.call(address, "lua", "update", name, pointer)
cache[datastring] = pointer
dataset[name] = datastring
monitor(pointer)
Expand All @@ -43,10 +43,10 @@ function builder.update(name, v)
local newversion = dumpsheet(v)
local diff = dump.diff(lastversion, newversion)
local pointer = core.stringpointer(diff)
skynet.call(service.address, "lua", "update", name, pointer)
skynet.call(address, "lua", "update", name, pointer)
cache[diff] = pointer
local lp = assert(cache[lastversion])
skynet.send(service.address, "lua", "release", lp)
skynet.send(address, "lua", "release", lp)
dataset[name] = diff
monitor(pointer)
end
Expand Down Expand Up @@ -161,7 +161,7 @@ end)
end

skynet.init(function()
service.new("datasheet", datasheet_service)
address=service.new("datasheet", datasheet_service)
end)

return builder
11 changes: 6 additions & 5 deletions lualib/skynet/service.lua
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,20 @@ end
function service.new(name, mainfunc, ...)
local p = get_provider()
local addr, booting = skynet.call(p, "lua", "test", name)
local address
if addr then
service.address = addr
address = addr
else
if booting then
service.address = skynet.call(p, "lua", "query", name)
address = skynet.call(p, "lua", "query", name)
else
check(mainfunc)
local code = string.dump(mainfunc)
service.address = skynet.call(p, "lua", "launch", name, code, ...)
address = skynet.call(p, "lua", "launch", name, code, ...)
end
end
cache[name] = service.address
return service.address
cache[name] = address
return address
end

function service.query(name)
Expand Down
20 changes: 18 additions & 2 deletions test/testservice/init.lua
Original file line number Diff line number Diff line change
@@ -1,7 +1,23 @@
local skynet = require "skynet"
local kvdb = require "kvdb"

local function dbname(i)
return "db"..i
end
skynet.start(function()
kvdb.set("A", 1)
print(kvdb.get "A")
for i=1,10 do
kvdb.new(dbname(i))
end
local idx=1
for i=1,10 do
local db=dbname(i)
kvdb.set(db,"A",idx)
idx=idx+1
kvdb.set(db,"B",idx)
idx=idx+1
end
for i=1,10 do
local db=dbname(i)
print(db,kvdb.get(db,"A"),kvdb.get(db,"B"))
end
end)
15 changes: 7 additions & 8 deletions test/testservice/kvdb.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@ local service = require "skynet.service"

local kvdb = {}

-- service.address is the default address registered by itself.
function kvdb.get(key)
return skynet.call(service.address, "lua", "get", key)
function kvdb.get(db,key)
return skynet.call(service.query(db), "lua", "get", key)
end

function kvdb.set(key, value)
skynet.call(service.address, "lua", "set", key , value)
function kvdb.set(db,key, value)
skynet.call(service.query(db), "lua", "set", key , value)
end

-- this function will be injected into an unique service, so don't refer any upvalues
Expand All @@ -36,8 +35,8 @@ local function service_mainfunc(...)
end)
end

skynet.init(function()
service.new("kvdb", service_mainfunc, "Service Init")
end)
function kvdb.new(db)
return service.new(db, service_mainfunc, "Service Init")
end

return kvdb

0 comments on commit 5479848

Please sign in to comment.