博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
networkComms 通信框架之 消息处理器
阅读量:4327 次
发布时间:2019-06-06

本文共 1848 字,大约阅读时间需要 6 分钟。

经常做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编辑

---------------------
作者:networkcomms
来源:CSDN
原文:https://blog.csdn.net/networkcomms/article/details/44218217
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/Jeely/p/10972218.html

你可能感兴趣的文章
206. Reverse Linked List(LeetCode)
查看>>
day 04 Java并发多线程
查看>>
Java定时任务调度工具Timer Quartz
查看>>
WPF,Silverlight与XAML读书笔记第三十五 - 可视化效果之图像
查看>>
Nginx中location配置[转]
查看>>
编程重点
查看>>
00-A-springmvc分布式项目项目结构
查看>>
vs调试时报503错误
查看>>
SVN使用&CVS使用
查看>>
redis
查看>>
Oracle存储过程中如何使用游标
查看>>
揭开NodeJS的神秘面纱!
查看>>
Number Triangles
查看>>
Ext分页实现(前台与后台)
查看>>
转 迭代器模式
查看>>
CYQ.Data V5 MAction新增加SetExpression方法说明
查看>>
数据安全&MD5加密
查看>>
bzoj 2594: 水管局长数据加强版 Link-Cut-Tree
查看>>
世界是数字的观后感
查看>>
由DBCursor的“can't switch cursor access methods”异常引发的思考
查看>>