日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy

發布時間:2024/4/14 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????(本文適用于ESFramework V0.2+)

??? 現在我們回想一下,當網絡組件(Tcp/Udp組件)接收到一個消息后,這個消息會流經哪些組件,然后再通過網絡組件發送出去了。如果你研究過ESFramework V0.1,你會發現,消息“行走”的路線模型可以用下圖表示出來:

??? 請求消息(路徑由黑線表示)經過網絡組件后,會被Hook鏈中的各個Hook按照特定的順序處理,然后到達消息處理器,消息處理器處理請求消息,并給出回復消息(路徑由紅線表示),回復消息同樣再經過Hook鏈,然后通過網絡組件發送出去。
??? 我們知道,Hook的主要目的是對截獲的消息進行變形處理(比如,加密/解密,壓縮/解壓等),它會修改消息體的內容。假設我們現在有這樣的需求,我們需要在服務端監控接收到的某一特定類型的所有消息,比如,我們的終端用戶每隔一定時間會把自己的當前位置(經緯度)通過PositionMessage上報給服務器,服務器需要截獲所有這些消息,然后在屏幕的地圖上更新表示每個終端用戶的點的位置。
??? 我們需要截獲所有的PositionMessage,似乎可以使用Hook,但是,我們并不需要修改PositionMessage的內容,只是Peek它,所以,這與Hook的語義是不一致的。我們需要一種新的組件來反映這個語義,ESFramework(V0.2+)中的INetMessageSpy正是用于此目的。INetMessageSpy與INetMessageHook的區別就恰恰在于,INetMessageSpy只是peek消息內容,而不修改它;而INetMessageHook會對消息進行變形處理。

??? 應用通常需要在兩個地方Spy消息,一個是網關(即網絡組件)處,一個是消息處理器附近。對應這兩個位置,ESFramework提供了相應的Spy,分別是IGatewayMessageSpy和IInnerMessageSpy,它們都從INetMessageSpy繼承。這三個接口的定義如下:

對應代碼如下:
????public?interface?INetMessageSpy
????{
????????
bool?Enabled?{?set;}
????????
void?SpyRecievedMsg(NetMessage?msg);?//如請求消息
????????void?SpyToBeSendedMsg(NetMessage?msg);//如回復消息
????}
???
????
public?interface?IGatewayMessageSpy?:?INetMessageSpy
????{
????}
???
????
public?interface?IInnerMessageSpy?:?INetMessageSpy
????{
????}
????
??? 下面的圖示將更清楚的展示IGatewayMessageSpy和IInnerMessageSpy位于消息路線圖中的位置:

??? 一目了然!比如上面例子中的監控用戶位置的Spy就可以使用IInnerMessageSpy,因為IInnerMessageSpy偵察到的消息都是能夠解析的(通常消息到達這里,都已經經過了Hook鏈的解密、解壓縮了)。如果需要監視網關(網絡組件)的所有進出消息,則可以使用IGatewayMessageSpy。

????Spy通常用于服務端,對應于Tcp和Udp,ESFramework分別在TcpStreamDispatcher組件和IEsbUdp組件中增加了對Spy的支持。通過TcpStreamDispatcher.InnerMessageSpy屬性、TcpStreamDispatcher.GatewayMessageSpy屬性、IEsbUdp.InnerMessageSpy屬性、IEsbUdp.GatewayMessageSpy屬性可以注入你需要使用的Spy。
????
??? ok,本文可以結束了,感謝關注!

上一篇:ESFramework介紹之(29)―― 插件公共設施 AddinUtil

轉到?? :ESFramework 可復用的通信框架(序)?

轉載于:https://www.cnblogs.com/zhuweisky/archive/2006/05/17/402746.html

總結

以上是生活随笔為你收集整理的ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。