經(jīng)常做Tcp通信的朋友知道,客戶端發(fā)送數(shù)據(jù)到服務(wù)器 或者 服務(wù)器發(fā)送消息到客戶端,接收端都要有相對(duì)應(yīng)的處理器來對(duì)消息進(jìn)行處理。

這里有兩個(gè)概念 需要進(jìn)行區(qū)別
消息類型
實(shí)際的數(shù)據(jù)類型 這里指的是未被序列化之前的類的類型
舉個(gè)例子
客戶端發(fā)送 消息A 消息B 這2個(gè)消息可能有相同的數(shù)據(jù)類型 但消息類型是不一樣的
上面的那個(gè)圖,進(jìn)一步引申一下,可能如下圖:

比如 上圖中的消息A 數(shù)據(jù)類類型為ClassA 服務(wù)器端收到后,通信框架負(fù)責(zé)解析出ClassA類型的數(shù)據(jù)
使用networkcomms框架時(shí),在發(fā)送方每發(fā)送一個(gè)消息,都需要指定消息類型,在接收方都要針對(duì)消息類型定義一個(gè)處理器。
接收端接收消息時(shí),根據(jù)消息類型選擇不同的處理器進(jìn)行處理.
//下面代碼中的 "ReqMsg1","ReqMsg2","ReqMsg3"都是發(fā)送的消息類型
如果有返回消息,如下面的代碼中,還需要指定返回的消息類型“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);上面的代碼中,定義發(fā)送3個(gè)消息,這3個(gè)消息都是string 類型
那么接收端就需要根據(jù)消息類型,寫3個(gè)對(duì)應(yīng)的處理器
<1>把3個(gè)處理器與通信框架進(jìn)行對(duì)接
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編輯
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注