mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 12:43:09 +00:00
local cast
This commit is contained in:
8
Makefile
8
Makefile
@@ -15,9 +15,11 @@ all : \
|
|||||||
service/multicast.so \
|
service/multicast.so \
|
||||||
service/tunnel.so \
|
service/tunnel.so \
|
||||||
service/harbor.so \
|
service/harbor.so \
|
||||||
|
service/localcast.so \
|
||||||
luaclib/skynet.so \
|
luaclib/skynet.so \
|
||||||
luaclib/socket.so \
|
luaclib/socket.so \
|
||||||
luaclib/int64.so \
|
luaclib/int64.so \
|
||||||
|
luaclib/mcast.so \
|
||||||
client
|
client
|
||||||
|
|
||||||
skynet : \
|
skynet : \
|
||||||
@@ -61,6 +63,9 @@ service/snlua.so : service-src/service_lua.c
|
|||||||
service/gate.so : gate/mread.c gate/ringbuffer.c gate/main.c
|
service/gate.so : gate/mread.c gate/ringbuffer.c gate/main.c
|
||||||
gcc $(CFLAGS) $(SHARED) $^ -o $@ -Igate -Iskynet-src
|
gcc $(CFLAGS) $(SHARED) $^ -o $@ -Igate -Iskynet-src
|
||||||
|
|
||||||
|
service/localcast.so : service-src/service_localcast.c
|
||||||
|
gcc $(CFLAGS) $(SHARED) $^ -o $@ -Iservice -Iskynet-src
|
||||||
|
|
||||||
luaclib/skynet.so : lualib-src/lua-skynet.c lualib-src/lua-seri.c lualib-src/lua-remoteobj.c lualib-src/trace_service.c | luaclib
|
luaclib/skynet.so : lualib-src/lua-skynet.c lualib-src/lua-seri.c lualib-src/lua-remoteobj.c lualib-src/trace_service.c | luaclib
|
||||||
gcc $(CFLAGS) $(SHARED) -Iluacompat $^ -o $@ -Iskynet-src -Ilualib-src
|
gcc $(CFLAGS) $(SHARED) -Iluacompat $^ -o $@ -Iskynet-src -Ilualib-src
|
||||||
|
|
||||||
@@ -76,6 +81,9 @@ luaclib/socket.so : connection/lua-socket.c | luaclib
|
|||||||
luaclib/int64.so : lua-int64/int64.c | luaclib
|
luaclib/int64.so : lua-int64/int64.c | luaclib
|
||||||
gcc $(CFLAGS) $(SHARED) -Iluacompat -O2 $^ -o $@
|
gcc $(CFLAGS) $(SHARED) -Iluacompat -O2 $^ -o $@
|
||||||
|
|
||||||
|
luaclib/mcast.so : lualib-src/lua-localcast.c | luaclib
|
||||||
|
gcc $(CFLAGS) $(SHARED) -Iluacompat $^ -o $@ -Iskynet-src -Iservice-src
|
||||||
|
|
||||||
client : client-src/client.c
|
client : client-src/client.c
|
||||||
gcc $(CFLAGS) $^ -o $@ -lpthread
|
gcc $(CFLAGS) $^ -o $@ -lpthread
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
local c = require "skynet.c"
|
local c = require "skynet.c"
|
||||||
|
local mc = require "mcast.c"
|
||||||
local tostring = tostring
|
local tostring = tostring
|
||||||
local tonumber = tonumber
|
local tonumber = tonumber
|
||||||
local coroutine = coroutine
|
local coroutine = coroutine
|
||||||
@@ -175,6 +176,11 @@ function skynet.send(addr, typename, ...)
|
|||||||
return c.send(addr, p.id, 0 , p.pack(...))
|
return c.send(addr, p.id, 0 , p.pack(...))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function skynet.cast(group, typename, ...)
|
||||||
|
local p = proto[typename]
|
||||||
|
return c.send(".cast", p.id, 0, mc(group, p.pack(...)))
|
||||||
|
end
|
||||||
|
|
||||||
skynet.genid = assert(c.genid)
|
skynet.genid = assert(c.genid)
|
||||||
skynet.forward = assert(c.forward)
|
skynet.forward = assert(c.forward)
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,14 @@ local group = require "mcgroup"
|
|||||||
skynet.start(function()
|
skynet.start(function()
|
||||||
local gid = group.create()
|
local gid = group.create()
|
||||||
local gaddr = group.address(gid)
|
local gaddr = group.address(gid)
|
||||||
|
local g = {}
|
||||||
print("=== Create Group ===",gid,skynet.address(gaddr))
|
print("=== Create Group ===",gid,skynet.address(gaddr))
|
||||||
for i=1,10 do
|
for i=1,10 do
|
||||||
local address = skynet.newservice("testgroup_c", tostring(i))
|
local address = skynet.newservice("testgroup_c", tostring(i))
|
||||||
|
table.insert(g, address)
|
||||||
group.enter(gid , address)
|
group.enter(gid , address)
|
||||||
end
|
end
|
||||||
|
skynet.cast(g,"text","Cast")
|
||||||
skynet.sleep(1000)
|
skynet.sleep(1000)
|
||||||
skynet.send(gaddr,"text","Hello World")
|
skynet.send(gaddr,"text","Hello World")
|
||||||
skynet.exit()
|
skynet.exit()
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ skynet_multicast_castgroup(struct skynet_context * from, struct skynet_multicast
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
skynet_multicast_cast(struct skynet_context * from, struct skynet_multicast_message *msg, uint32_t *dests, int n) {
|
skynet_multicast_cast(struct skynet_context * from, struct skynet_multicast_message *msg, const uint32_t *dests, int n) {
|
||||||
uint32_t source = skynet_context_handle(from);
|
uint32_t source = skynet_context_handle(from);
|
||||||
skynet_multicast_copy(msg, n);
|
skynet_multicast_copy(msg, n);
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ typedef void (*skynet_multicast_func)(void *ud, uint32_t source, const void * ms
|
|||||||
struct skynet_multicast_message * skynet_multicast_create(const void * msg, size_t sz, uint32_t source);
|
struct skynet_multicast_message * skynet_multicast_create(const void * msg, size_t sz, uint32_t source);
|
||||||
void skynet_multicast_copy(struct skynet_multicast_message *, int copy);
|
void skynet_multicast_copy(struct skynet_multicast_message *, int copy);
|
||||||
void skynet_multicast_dispatch(struct skynet_multicast_message * msg, void * ud, skynet_multicast_func func);
|
void skynet_multicast_dispatch(struct skynet_multicast_message * msg, void * ud, skynet_multicast_func func);
|
||||||
void skynet_multicast_cast(struct skynet_context * from, struct skynet_multicast_message *msg, uint32_t *dests, int n);
|
void skynet_multicast_cast(struct skynet_context * from, struct skynet_multicast_message *msg, const uint32_t *dests, int n);
|
||||||
|
|
||||||
struct skynet_multicast_group * skynet_multicast_newgroup();
|
struct skynet_multicast_group * skynet_multicast_newgroup();
|
||||||
void skynet_multicast_deletegroup(struct skynet_multicast_group * group);
|
void skynet_multicast_deletegroup(struct skynet_multicast_group * group);
|
||||||
|
|||||||
@@ -118,6 +118,11 @@ skynet_start(struct skynet_config * config) {
|
|||||||
fprintf(stderr,"launch logger error");
|
fprintf(stderr,"launch logger error");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
ctx = skynet_context_new("localcast", NULL);
|
||||||
|
if (ctx == NULL) {
|
||||||
|
fprintf(stderr,"launch local cast error");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
ctx = skynet_context_new("snlua", "launcher");
|
ctx = skynet_context_new("snlua", "launcher");
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
ctx = skynet_context_new("snlua", config->start);
|
ctx = skynet_context_new("snlua", config->start);
|
||||||
|
|||||||
Reference in New Issue
Block a user