发布 emitter 扩展库,用于多个对象互相通信
By
terrorist
at 2022-05-30 • 0人收藏 • 1265人看过
库地址: 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")
登录后方可回帖
有点跟不上节奏啊。。。![](/static/editor/dialogs/emotion/images/pp/i_f26.png)