use sproto global slot

This commit is contained in:
Cloud Wu
2015-02-28 13:33:56 +08:00
parent 318ee300e3
commit 688cc843ce
8 changed files with 86 additions and 40 deletions

View File

@@ -2,6 +2,7 @@ local skynet = require "skynet"
local netpack = require "netpack"
local socket = require "socket"
local sproto = require "sproto"
local sprotoloader = require "sprotoloader"
local host
local send_request
@@ -61,9 +62,10 @@ skynet.register_protocol {
end
}
function CMD.start(gate, fd, proto)
host = sproto.new(proto.c2s):host "package"
send_request = host:attach(sproto.new(proto.s2c))
function CMD.start(gate, fd)
-- slot 1,2 set at main.lua
host = sprotoloader.load(1):host "package"
send_request = host:attach(sprotoloader.load(2))
skynet.fork(function()
while true do
send_package(send_request "heartbeat")

View File

@@ -1,9 +1,11 @@
local skynet = require "skynet"
local sprotoloader = require "sprotoloader"
local max_client = 64
skynet.start(function()
print("Server start")
skynet.uniqueservice("protoloader")
local console = skynet.newservice("console")
skynet.newservice("debug_console",8000)
skynet.newservice("simpledb")

13
examples/protoloader.lua Normal file
View File

@@ -0,0 +1,13 @@
-- module proto as examples/proto.lua
package.path = "./examples/?.lua;" .. package.path
local skynet = require "skynet"
local sprotoparser = require "sprotoparser"
local sprotoloader = require "sprotoloader"
local proto = require "proto"
skynet.start(function()
sprotoloader.save(proto.c2s, 1)
sprotoloader.save(proto.s2c, 2)
-- don't call skynet.exit() , because sproto.core may unload and the global slot become invalid
end)

View File

@@ -1,8 +1,5 @@
package.path = "./examples/?.lua;" .. package.path
local skynet = require "skynet"
local netpack = require "netpack"
local proto = require "proto"
local CMD = {}
local SOCKET = {}
@@ -12,7 +9,7 @@ local agent = {}
function SOCKET.open(fd, addr)
skynet.error("New client from : " .. addr)
agent[fd] = skynet.newservice("agent")
skynet.call(agent[fd], "lua", "start", gate, fd, proto)
skynet.call(agent[fd], "lua", "start", gate, fd)
end
local function close_agent(fd)