购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 协议驱动设计

协议驱动包括发送数据协议驱动和接收数据协议驱动,分别对应IRunDevice接口的Send-Protocol属性和ReceiveProtocol属性。

发送数据协议驱动主要负责把数据信息打包成byte[],以便通过IO通道进行发送。发送数据协议驱动主要包括ISendCommandDriver接口和ISendProtocol接口,它们的继承关系如图3-4所示。

图3-4 驱动接口继承关系

ISendCommandDriver接口主要定义了命令函数和驱动函数,根据输入的命令字节和辅助信息调用不同的命令函数,并把数据打包成byte[]。接口代码如下。

ISendProtocol接口定义了校验数据和获得要发送数据的接口,是设备驱动最终发送数据要使用的接口。接口代码如下。

接收数据协议驱动主要负责对byte[]数据进行数据解析,以便后续业务的数据处理。接收数据协议驱动主要包括IReceiveCommandDriver接口和IReceiveProtocol接口,它们的继承关系如图3-5所示。

IReceiveCommandDriver与ISendCommandDriver类似,主要定义了命令函数和驱动函数,根据输入的byte[]数据调用相应的命令函数,并且自定义把byte[]解析成需要的数据信息。接口代码如下。

图3-5 接收数据协议驱动接口继承关系

IReceiveProtocol主要定义解析byte[]数据的各部分接口函数,是设备驱动最终要使用的接口。接口代码如下。

发送数据协议驱动和接收数据协议驱动设计得比较简单且容易理解,但是驱动各命令函数的代码使用多个if……else实现,显得笨拙且效率不高。

现将协议驱动改为使用命令设计模式与插件加载的方式,这种方式包括3部分:命令接口、协议驱动器、命令实体类。

命令接口规定了协议驱动器在调用命令时的属性和动作。所有命令类型都必须继承自命令接口,命令接口定义代码如下。

协议驱动器负责以插件的方式加载程序集中的命令,根据命令名称驱动不同的命令并作出响应,协议驱动器的代码如下。

每个命令实体类都继承自ICommand接口,要实现该接口,就要先实现两个自定义命令实体类:CommandA和CommandB。代码如下。

接下来写一段测试代码,对协议驱动器进行测试,代码如下。

最后的测试结果如图3-6所示。

图3-6 协议驱动器改进效果

这是一个改进后的协议驱动器,发送数据协议驱动和接收数据协议驱动都可以改进,大家在设计这部分的时候可以进行参考。

当然,也可以通过配置文件的方式来开发一个协议驱动器,有兴趣的读者可以研究一下。 SYfqdsNtqvMQwy9IROOsgHZ3drsFIUy8Rm2I+9aAsArGJqDCLwDuukLBfO8ZYcIt

点击中间区域
呼出菜单
上一章
目录
下一章
×