发布 emitter 扩展库,用于多个对象互相通信

By terrorist at 2022-05-30 • 0人收藏 • 1298人看过

库地址: 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
2022-05-31   #1

有点跟不上节奏啊。。。

2022-06-01   #2

2022-06-02   #3

实列一: 匿名组

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")


2022-06-11   #4

同线程内有原生的publish和subscribe函数
跨线程有thread.command
跨进程有process.command

感谢分享!

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...