经常做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
版权声明:本文为博主原创文章,转载请附上博文链接!

networkComms 通信框架之 消息处理器的更多相关文章

  1. 介绍开源的.net通信框架NetworkComms框架之四 消息边界

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  2. 介绍开源的.net通信框架NetworkComms框架 源码分析(三)PacketHeader

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  3. c#网络通信框架networkcomms内核解析之三 消息同步调用

    networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn 客户端发送消息给服务器,服务器计算结果返回 ...

  4. 介绍开源的.net通信框架NetworkComms框架 源码分析(五)ReservedPacketType

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  5. 介绍开源的.net通信框架NetworkComms框架之五 心跳检测

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  6. 介绍开源的.net通信框架NetworkComms框架之七 数据加密通信

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  7. 介绍开源的.net通信框架NetworkComms

    Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地址是:https://github.com/MarcFletcher/ ...

  8. c#网络通信框架networkcomms内核解析之一 消息传送

    networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn 在网络通信程序中,本地的类或者对象,要传输 ...

  9. c#网络通信框架networkcomms内核解析之一 消息传送2

    networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn 在网络通信程序中,本地的类或者对象,要传输 ...

随机推荐

  1. selenium2-java 浏览器操作常用命令语法

    WebDriver driver = new ChromeDriver(); xpath定位:driver.findElement(By.xpath("//div[@id='register ...

  2. idea中以maven工程的方式运行tomcat源码

    0. 准备环境 idea+jdk8+tomcat源码 1.下载tomcat源码: http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/ ...

  3. Linux操作系统(四)_部署MySQL

    一.部署过程 1.当前服务器的内核版本和发行版本 cat /etc/issue uname -a 2.检查系统有没有自带mysql,并卸载自带版本 yum list installed | grep ...

  4. POJ 1410 Intersection (计算几何)

    题目链接:POJ 1410 Description You are to write a program that has to decide whether a given line segment ...

  5. 我的js

    <case value="select"> <div class="form-group item_{$[type]form.name} {$[type ...

  6. 转:inline-block 前世今生

    曾几何时,display:inline-block 已经深入「大街小巷」,随处可见 「display:inline-block; *display:inline; *zoom:1; 」这样的代码.如今 ...

  7. Cocos2d 之FlyBird开发---GameScore类

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 这个类主要实现的是,显示历次成绩中的最好成绩.当然我写的这个很简洁,还可以写的更加的丰富.下面贴上代码: GameScore.h #ifn ...

  8. springCloud的使用06-----分布式配置

    1 分布式配置中心的搭建 1.1 在git仓库中创建配置文件 1.2 创建springboot项目引入相应jar依赖 <project xmlns="http://maven.apac ...

  9. How to compile Linux kernel in fedora 6

    前提:已裝好Fedora 6 core 2.6.18 ,在 Fedora 6 中compile linux kernel.1.下載 Fedora 6 core 2.6.18 http://www.ke ...

  10. Codeforces 498A Crazy Town

    C. Crazy Town time limit per test 1 second memory limit per test 256 megabytes input standard input ...