## **基类介绍**: 基类文件位于自美系统目录`/python/`下,文件名为:`MsgProcess.so` 自美系统采用多进程消息通讯模式架构,每一个模块间通信需要继承基类来实现进程中的标准通信。 >其保护代码安全和稳定自美系统基类进行了C化封装,这样做也优化了Python语言处理速度。基类是已经固化了有核心部分,在二次开发完全不需要改动也不能随时改动的,否则会影响到整个系统的稳定运行。 这里将基类在二次开发中使用方法和用到的一些函数、方法,在自美系统中每一个有通讯需求的模块都需要继承这个基类,如: * 唤醒模块`Awake`,位于:`/python/package/Awake.py` * 录音模块`Record`, 位于:`/python/package/Record.py` 还有插件中也需要继承基类(插件中继承基类后能实现与系统默认模块同样的功能),如: * 音乐插件`Music`,位于:`/python/plugin/Music/Music.py` * 说IP地址插件`SayIp`,位于:`/python/plugin/SayIp/SayIp.py` 等等,具体代码可以直接查看文件实现方法。 ## **基类的使用方法**: 基类中已经使用了`__init__`类的初始化方法 如果在要继承模块中还需要使用`__init__` 需要在`__init__`方法中添加`super().__init__(msgQueue)`语句,如唤醒模块中: >部分代码: ```python from MsgProcess import MsgProcess, MsgType class Awake(MsgProcess): '''语音唤醒类''' def __init__(self, msgQueue): super().__init__(msgQueue) self.awakeThread = None self.socketFile = "/tmp/zimei-awake.sock" self.awakeconfig = self.config['ApiConfig']['AwakeEngine'] def Start(self, message): ``` 截图如下: <img src="http://qiniucn.16302.com/64f9dde9343d8165a86df5a7829a431e" width="500"/> ## **继承基类后可使用的系统级的方法(函数):** ***** **getConfig --- 重新读取一下系统配置** ***** **参数**:无 **返回**:无 **功能**:执行此方法重新读取一下系统根目录下的config.yaml配置文件中的内容值并将最新的值赋值给**self.config**变量。 ***** **saveConfig --- 保存系统配置信息** ***** **参数**:无 **返回**:无 **功能**:将当前**self.config**值保存到config.yaml文件中 ***** **send --- 消息发送(重点方法,使用频率最高)** ***** **参数**:MsgType, Receiver, Data **返回**:无 **功能**:各模块(进程)间通信方法,如唤醒模块被唤醒后告诉录音模块:你可以开始录音了,就可以使用此方法发送一个指令给录音模块。 **参数介绍:** MsgType 消息类型,有以下几种: ``` Start = 1 # 启动 Pause = 2 # 暂停 Resume = 3 # 继续 Stop = 4 # 停止 Text = 5 # 文本 ``` Receiver 消息接收者 ``` 接收者为模块名称,即继承了基类的模块名称,也就是class类名,如:唤醒模块就是:Awake 如果是插件就是插件名称,如音乐插件:Music ``` Data 消息数据,可以是字典类型,也可以字符串类型 ``` Data 携带的是接收模块需要的数据,具体数据由各模块间约定,此参数也可以为空None ``` ## **类的方法定义与重写** 先看一段代码示例代码: ```python # 导入基类库、消息类型库 from MsgProcess import MsgProcess, MsgType class HelloWorld(MsgProcess): '''你好,世界''' def __init__(self, msgQueue): '''如果在插件或功能模块中使用__ini__方法,必须加下面的这方法,先调用基类中的方法''' super().__init__(msgQueue) def Start(self, message=None): '''功能、插件入口,通常被用初始化插件入口使用''' pass def Text(self, message): '''接收来自其他模块发送过来的消息类型为:MsgType.Text(文本)消息,再进行二次开发和业务逻辑实现''' pass def Pause(self, message=None): '''接收消息类型为:MsgType.Pause(暂停)消息,实现暂停功能''' pass def Resume(self, message=None): '''接收消息类型为:MsgType.Resume(继续)消息,实现继续功能''' pass def Stop(self, message=None): '''接收消息类型为:MsgType.Stop(停止)消息,实现停止功能,定义默认为自动停止''' self.__stop = True ```