mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 20:23:06 +00:00
use connection service for console
This commit is contained in:
@@ -51,7 +51,8 @@ _expand(struct connection_server * server) {
|
|||||||
int i;
|
int i;
|
||||||
for (i=0;i<server->max_connection;i++) {
|
for (i=0;i<server->max_connection;i++) {
|
||||||
struct connection * c = &server->conn[i];
|
struct connection * c = &server->conn[i];
|
||||||
connection_add(server->pool, c->fd , c);
|
int err = connection_add(server->pool, c->fd , c);
|
||||||
|
assert(err == 0);
|
||||||
}
|
}
|
||||||
server->max_connection *= 2;
|
server->max_connection *= 2;
|
||||||
}
|
}
|
||||||
@@ -108,7 +109,7 @@ _poll(struct connection_server * server) {
|
|||||||
buffer = malloc(DEFAULT_BUFFER_SIZE);
|
buffer = malloc(DEFAULT_BUFFER_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int size = recv(c->fd, buffer, DEFAULT_BUFFER_SIZE, MSG_DONTWAIT);
|
int size = read(c->fd, buffer, DEFAULT_BUFFER_SIZE);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -126,7 +127,7 @@ _poll(struct connection_server * server) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_main(struct skynet_context * ctx, void * ud, int type, int session, uint32_t source, const void * msg, size_t sz) {
|
_connection_main(struct skynet_context * ctx, void * ud, int type, int session, uint32_t source, const void * msg, size_t sz) {
|
||||||
if (type == PTYPE_RESPONSE) {
|
if (type == PTYPE_RESPONSE) {
|
||||||
_poll(ud);
|
_poll(ud);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -141,6 +142,10 @@ _main(struct skynet_context * ctx, void * ud, int type, int session, uint32_t so
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int addr_sz = sz - (endptr - (char *)msg);
|
int addr_sz = sz - (endptr - (char *)msg);
|
||||||
|
if (addr_sz <= 1) {
|
||||||
|
skynet_error(ctx, "[connection] Invalid ADD command from %x (session = %d)", source, session);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
char addr [addr_sz];
|
char addr [addr_sz];
|
||||||
memcpy(addr, endptr+1, addr_sz-1);
|
memcpy(addr, endptr+1, addr_sz-1);
|
||||||
addr[addr_sz-1] = '\0';
|
addr[addr_sz-1] = '\0';
|
||||||
@@ -170,13 +175,16 @@ connection_init(struct connection_server * server, struct skynet_context * ctx,
|
|||||||
server->pool = connection_newpool(DEFAULT_CONNECTION);
|
server->pool = connection_newpool(DEFAULT_CONNECTION);
|
||||||
if (server->pool == NULL)
|
if (server->pool == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
server->max_connection = DEFAULT_CONNECTION;
|
server->max_connection = strtol(param, NULL, 10);
|
||||||
|
if (server->max_connection == 0) {
|
||||||
|
server->max_connection = DEFAULT_CONNECTION;
|
||||||
|
}
|
||||||
server->current_connection = 0;
|
server->current_connection = 0;
|
||||||
server->ctx = ctx;
|
server->ctx = ctx;
|
||||||
server->conn = malloc(server->max_connection * sizeof(struct connection));
|
server->conn = malloc(server->max_connection * sizeof(struct connection));
|
||||||
memset(server->conn, 0, server->max_connection * sizeof(struct connection));
|
memset(server->conn, 0, server->max_connection * sizeof(struct connection));
|
||||||
|
|
||||||
skynet_callback(ctx, server, _main);
|
skynet_callback(ctx, server, _connection_main);
|
||||||
skynet_command(ctx,"REG",".connection");
|
skynet_command(ctx,"REG",".connection");
|
||||||
skynet_command(ctx,"TIMEOUT","0");
|
skynet_command(ctx,"TIMEOUT","0");
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -16,6 +16,11 @@ function socket.connect(addr)
|
|||||||
object = c.new()
|
object = c.new()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function socket.stdin()
|
||||||
|
skynet.send(".connection", "text", "ADD", 1 , skynet.address(skynet.self()))
|
||||||
|
object = c.new()
|
||||||
|
end
|
||||||
|
|
||||||
function socket.push(msg,sz)
|
function socket.push(msg,sz)
|
||||||
if msg then
|
if msg then
|
||||||
c.push(object, msg, sz)
|
c.push(object, msg, sz)
|
||||||
|
|||||||
@@ -1,12 +1,43 @@
|
|||||||
local skynet = require "skynet"
|
local skynet = require "skynet"
|
||||||
|
local socket = require "socket"
|
||||||
|
|
||||||
|
local function readline(sep)
|
||||||
|
while true do
|
||||||
|
local line = socket.readline(sep)
|
||||||
|
if line then
|
||||||
|
return line
|
||||||
|
end
|
||||||
|
coroutine.yield()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function split_package()
|
||||||
|
while true do
|
||||||
|
local cmd = readline "\n"
|
||||||
|
if cmd ~= "" then
|
||||||
|
local handle = skynet.launch("snlua", cmd)
|
||||||
|
if handle == nil then
|
||||||
|
print("Launch error:",cmd)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local split_co = coroutine.create(split_package)
|
||||||
|
|
||||||
|
skynet.register_protocol {
|
||||||
|
name = "client",
|
||||||
|
id = 3,
|
||||||
|
pack = function(...) return ... end,
|
||||||
|
unpack = function(msg,sz)
|
||||||
|
assert(msg , "Stdin closed")
|
||||||
|
socket.push(msg,sz)
|
||||||
|
assert(coroutine.resume(split_co))
|
||||||
|
end,
|
||||||
|
dispatch = function () end
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
skynet.start(function()
|
skynet.start(function()
|
||||||
while true do
|
socket.stdin()
|
||||||
local cmd = io.read()
|
|
||||||
local handle = skynet.launch(cmd)
|
|
||||||
if handle == nil then
|
|
||||||
print("Launch error:",cmd)
|
|
||||||
end
|
|
||||||
skynet.yield()
|
|
||||||
end
|
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ local skynet = require "skynet"
|
|||||||
skynet.start(function()
|
skynet.start(function()
|
||||||
print("Server start")
|
print("Server start")
|
||||||
local launcher = skynet.launch("snlua","launcher")
|
local launcher = skynet.launch("snlua","launcher")
|
||||||
|
local connection = skynet.launch("connection","256")
|
||||||
local lualog = skynet.launch("snlua","lualog")
|
local lualog = skynet.launch("snlua","lualog")
|
||||||
|
local console = skynet.launch("snlua","console")
|
||||||
local group_mgr = skynet.launch("snlua", "group_mgr")
|
local group_mgr = skynet.launch("snlua", "group_mgr")
|
||||||
local group_agent = skynet.launch("snlua", "group_agent")
|
local group_agent = skynet.launch("snlua", "group_agent")
|
||||||
local remoteroot = skynet.launch("snlua","remote_root")
|
local remoteroot = skynet.launch("snlua","remote_root")
|
||||||
local console = skynet.launch("snlua","console")
|
|
||||||
local watchdog = skynet.launch("snlua","watchdog","8888 4 0")
|
local watchdog = skynet.launch("snlua","watchdog","8888 4 0")
|
||||||
local db = skynet.launch("snlua","simpledb")
|
local db = skynet.launch("snlua","simpledb")
|
||||||
local connection = skynet.launch("connection","256")
|
|
||||||
local redis = skynet.launch("snlua","redis-mgr")
|
local redis = skynet.launch("snlua","redis-mgr")
|
||||||
-- skynet.launch("snlua","testgroup")
|
-- skynet.launch("snlua","testgroup")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user