DotNetty 实现 Modbus TCP 系列 (三) Codecs Handler
?DotNetty 實現 Modbus TCP 系列 (一) 報文類
DotNetty 實現 Modbus TCP 系列 (二) ModbusFunction 類圖及繼承舉例
DotNetty 作為一個半成品,我們不需要關注細節的實現,只需要關注自己的業務即可,所以最主要的就是處理 Codecs 和 Handler。
所有的 Codecs 和 Handler 均直接或間接繼承自 ChannelHandlerAdapter。為什么要分為 Codecs 和 Handler,個人理解是 Codecs 負責將消息解碼為我們所需的對象或者將處理的結果編碼,Handler 對解碼得到的對象進行邏輯處理,達到職責分離的目的。
DotNetty 中可以注冊多個 Codecs/Handler,入站消息按照注冊的先后順序執行,出站消息按照注冊的先后逆序執行。
對于 Client 端:
入站:ModbusDecoder --> ModbusResponseHandler
出站:ModbusEncoder
對于 Server 端:
入站:ModbusDecoder --> ModbusRequestHandler
出站:ModbusEncoder
ModbusDecoder
ModbusDecoder 繼承了 ByteToMessageDecoder。繼承了 ByteToMessageDecoder 的類必須實現的唯一的抽象方法:Decode,該方法將 ByteBuffer 解析為 List,如果 List 不為空則會將該 List 傳遞給下一個 ChannelHandlerAdapter。
ModbusDecoder 同時為 Client 端和 Server 端使用,如果是 Server 端則將消息解析成請求類,反之如果是 Client 端則將消息解析成響應類。
ModbusResponseHandler
將接收到的響應信息加入 responses 供后續處理。
ModbusRequestHandler
responseService 為一個抽象類,用來自定義處理接收到的請求并返回結果,需要在實現 Server 端時繼承并實現。
文中代碼僅添加了 0x03 的方法)
ModbusEncoder
如果是 ModbusFrame 消息則 Flush,否則傳遞到下一個 ChannelHandlerAdapter。
開源地址:https://github.com/VictorBu/modbus-tcp
原文地址:https://www.cnblogs.com/victorbu/p/10370890.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的DotNetty 实现 Modbus TCP 系列 (三) Codecs Handler的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软宣布 Visual Studio 2
- 下一篇: 程序员修神之路--分布式缓存的一条明路(