发布 emitter 扩展库,用于多个对象互相通信
By
terrorist
at 2022-05-30 • 0人收藏 • 1444人看过
库地址: https://github.com/btx638/aaz-aardio/tree/master/aaz/emitter
创建类
emitter() 参数为空,创建匿名组,对象自己内部使用
emitter("组名") 加入特定的通讯组,多个对象互相通讯
emitter("组名", "用户名") 加入特定的通讯组,并指定自己的用户名
对象方法
on("事件名称", 事件处理函数) 订阅特定的事件,并指定事件处理函数
on("事件名称", "用户名", 事件处理函数) 订阅特定的事件,仅接收指定用户名发出的事件,并指定事件处理函数
emit("事件名称", 不定参数) 触发特定的事件,并把参数传递给事件处理函数
io.open()
import aaz.emitter;
class clsA{
ctor(){
// 加入组并指定用户名,则 emit 消息时自带用户名
var emitter = ..aaz.emitter("组名", "用户A")
// 只接收组里的 用户C 的消息
emitter.on("聊天", "用户C", function(str){
..io.print("A收到C聊天:" ++ str)
})
};
}
class clsB{
ctor( ){
// 只入组且不指定用户名, 则 emit 消息时不含用户名
var emitter = ..aaz.emitter("组名")
// 因为不指定信息发送者,则收到组的所有消息
emitter.on("聊天", function(str){
..io.print("B收到聊天:" ++ str)
})
};
}
class clsC{
ctor(){
// 加入组并指定用户名,则 emit 消息时自带用户名
var emitter = ..aaz.emitter("组名", "用户C")
};
talk = function(str){
// 发送消息到组, 并且包含用户名
emitter.emit("聊天",str)
}
}
var objA = clsA()
var objB = clsB()
var objC = clsC()
// 用户C 发布了一个消息
objC.talk( "吃了吗")
execute("pause")
4 个回复 | 最后更新于 2022-06-11
实列一: 匿名组
import console
import aaz.emitter
class cls{
ctor(){
// 参数为空,创建匿名事件组,仅限对象自己使用
this = ..aaz.emitter()
};
go = function(param){
// 触发事件
this.emit("go", param)
return true;
}
}
var obj = cls()
// 订阅事件
obj.on("go",function(param){
console.log("go 事件触发了", "参数:", param )
})
obj.go("aaaa")
execute("pause")登录后方可回帖

有点跟不上节奏啊。。。