經常做Tcp通信的朋友知道,客戶端發送數據到服務器 或者 服務器發送消息到客戶端,接收端都要有相對應的處理器來對消息進行處理。
這裡有兩個概念 需要進行區別
消息類型
實際的數據類型 這裡指的是未被序列化之前的類的類型
舉個例子
客戶端發送 消息A 消息B 這2個消息可能有相同的數據類型 但消息類型是不一樣的
上面的那個圖,進一步引申一下,可能如下圖:
比如 上圖中的消息A 數據類類型為ClassA 服務器端收到後,通信框架負責解析出ClassA類型的數據
使用networkcomms框架時,在發送方每發送一個消息,都需要指定消息類型,在接收方都要針對消息類型定義一個處理器。
接收端接收消息時,根據消息類型選擇不同的處理器進行處理.
//下面代碼中的 "ReqMsg1","ReqMsg2","ReqMsg3"都是發送的消息類型
如果有返回消息,如下面的代碼中,還需要指定返回的消息類型“ResMsg1","ResMsg2","RewMsg3"
string resMsg = connection.SendReceiveObject<string>("ReqMsg1", "ResMsg1", 5000, listBox1.Text); string resMsg = connection.SendReceiveObject<string>("ReqMsg2", "ResMsg2", 5000, listBox2.Text); string resMsg = connection.SendReceiveObject<string>("ReqMsg3", "ResMsg3", 5000, listBox3.Text);
上面的代碼中,定義發送3個消息,這3個消息都是string 類型
那麼接收端就需要根據消息類型,寫3個對應的處理器
<1>把3個處理器與通信框架進行對接
NetworkComms.AppendGlobalIncomingPacketHandler<string>("ReqMsg1", IncomingMsg1Handle); NetworkComms.AppendGlobalIncomingPacketHandler<string>("ReqMsg2", IncomingMsg2Handle); NetworkComms.AppendGlobalIncomingPacketHandler<string>("ReqMsg3", IncomingMsg3Handle);
<2>
private void IncomingMsg1Handle(PacketHeader header, Connection connection, string msg) { try { string resMsg = ""; //具體操作 connection.SendObject("ResMsg2", resMsg); } catch (Exception ex) { } }
private void IncomingMsg2Handle(PacketHeader header, Connection connection, string msg) { try { string resMsg = ""; //具體操作 connection.SendObject("ResMsg2", resMsg); } catch (Exception ex) { } }
private void IncomingMsg3Handle(PacketHeader header, Connection connection, string msg) { try { string resMsg = ""; //具體操作 connection.SendObject("ResMsg3", resMsg); } catch (Exception ex) { } }
www.networkComms.cn編輯