一、更新内容

1.修改*Server类,以及承继关系。
2.增加IRunDevice的IServerProvider接口继承。
3.修复增加COM设备驱动可能造成的异常。
4.修复网络发送数据可能引发的异常。
5.完善协议驱动器。

6.修改协议驱动接口。
7.修改协议命令接口。
8.修复协议命令,抽象基类情况下的异常BUG。

9.增加协议接口GetPackageLength,数据交互更灵活。
10.修复一些BUG。
11.优化代码。

二、GetPackageLength接口的使用

这个接口主要的使用场景是:当协议中有请求发送数据长度的命令,例如先向服务器发送数据包长度命令,得到返回确定后,再发送实际数据包信息。在连接发送大块数据的时候,例如文件内容、序列化后的内容等,内容有可能包含协议的头和尾,会影响数据包的完整性。主要用于交互连续的较大数据块内容。

1.接口参数

  /// <summary>
/// 获得应该接收的数据长度,如果当前接收的数据小于这个返回值,那么继续接收数据,直到大于等于这个返回长度。如果接收数据超时,则直接返回当前已经接收的数据。
/// </summary>
/// <param name="data">接收的数据</param>
/// <param name="channel">IO通道,用于返回确认数据</param>
/// <param name="readTimeout">返回读数据超时间隔时间</param>
/// <returns></returns>
public abstract int GetPackageLength(byte[] data, IChannel channel, ref int readTimeout);

2.接口使用

(1)设置配置参数

 IServer server = new ServerFactory().CreateServer(new ServerConfig()
{
ServerName = "服务1",
SocketMode = SocketMode.Tcp,
ControlMode = ControlMode.Loop,
CheckSameSocketSession = false,
StartCheckPackageLength = true, //开启检测数据包长度
NetReceiveBufferSize = 20,
});

(2)接口代码

        public override int GetPackageLength(byte[] data, IChannel channel, ref int readTimeout)
{
if (data == null || data.Length <= 0)
return 0; readTimeout = 2000; if (CheckData(data))
{
try
{
int length = BitConverter.ToInt32(new byte[] {data[3], data[4], data[5], data[6]}, 0); byte[] okBytes = System.Text.Encoding.ASCII.GetBytes("ok");
int num = channel.Write(okBytes);
if (num > 0)
{
Console.WriteLine("返回数据");
}
return length;
}
catch (Exception)
{ return 0;
}
}
else
{
Console.WriteLine("校验错误");
return 0;
}
}

 三、增加宿主程序(ServerSuperIO.Host)

static IServerFactory _serverFactory = null;
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Green;
ConsoleUtil.SetConsoleCtrlHandler(new ConsoleUtil.ControlCtrlDelegate(HandlerRoutine), true);
bool success = true;
Console.WriteLine("正在初始化服务程序......");
IObjectBuilder builder = new TypeCreator();
_serverFactory = new ServerFactory();
try
{
GlobalConfig gc = GlobalConfigTool.Load();
foreach (ServerSuperIO.Config.Server serverCfg in gc.Servers)
{
IServer server = _serverFactory.CreateServer(serverCfg.ServerConfig);
server.AddDeviceCompleted += server_AddDeviceCompleted;
server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;
server.Start();
_serverFactory.AddServer(server); foreach (Config.Device devCfg in serverCfg.Devices)
{
try
{
IRunDevice runDev = builder.BuildUp<IRunDevice>(devCfg.AssemblyFile, devCfg.Instance); runDev.DeviceParameter.DeviceID = devCfg.DeviceID;
runDev.DeviceDynamic.DeviceID = devCfg.DeviceID;
runDev.CommunicateType = devCfg.CommunicateType;
runDev.Initialize(devCfg.DeviceID); if (server.AddDevice(runDev) != devCfg.DeviceID)
{
Console.WriteLine("增加设备:" + devCfg.DeviceID + " 失败!");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
continue;
}
}
}
}
catch (Exception ex)
{
success = false;
Console.WriteLine(ex.Message);
} if (success)
{
Console.WriteLine("初始化服务程序完成");
} while ("exit" == Console.ReadLine())
{
_serverFactory.RemoveAllServer();
break;
}
} private static bool HandlerRoutine(int ctrlType)
{
if (ctrlType == 0 || ctrlType == 2)
{
_serverFactory.RemoveAllServer();
}
return false;
}
}

 四、增加配置工具(ServerSuperIO.Tool)

1.增加服务,如下图:

2.增加设备,如下图:

3.单击树型菜单,修改配置属性。

物联网框架ServerSuperIO(SSIO)更新、以及增加宿主程序和配置工具,详细介绍的更多相关文章

  1. 《物联网框架ServerSuperIO教程》- 22.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率

     22.1   概述及要解决的问题 设备驱动有DeviceDynamic接口,可以继承并增加新的实时数据属性,每次通讯完成后更新这些属性数据.原来是通过DeviceDynamic接口实体类反射的方式获 ...

  2. 《物联网框架ServerSuperIO教程》- 23.动态数据接口增加缓存,提高数据输出到OPCServer和(实时)数据库的效率

     22.1   概述及要解决的问题 设备驱动有DeviceDynamic接口,可以继承并增加新的实时数据属性,每次通讯完成后更新这些属性数据.原来是通过DeviceDynamic接口实体类反射的方式获 ...

  3. 开源物联网框架ServerSuperIO(SSIO),项目中实践应用介绍

    一.项目背景 我们是传统行业,但是我们有一颗不传统的心.企业用户遍布国内和国外,面对行业,要建设行业级的(大)数据平台.一提到大数据平台,大家往往想到Hadoop.Spark.Nosql.分布式等等, ...

  4. 《连载 | 物联网框架ServerSuperIO教程》- 16.OPC Server的使用步骤。附:3.3 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  5. 《连载 | 物联网框架ServerSuperIO教程》- 17.支持实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  6. 《连载 | 物联网框架ServerSuperIO教程》- 18.集成OPC Client,及使用步骤

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  7. 《连载 | 物联网框架ServerSuperIO教程》- 17.集成Golden实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  8. 《连载 | 物联网框架ServerSuperIO教程》- 16.集成OPC Server,及使用步骤。附:3.3 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  9. 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

随机推荐

  1. centos6.5 nginx-1.8.0和ftp搭建图片服务器

    一.Nginx的安装步骤 1.Nginx安装环境: gcc: 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c+ ...

  2. 为什么 Android Studio 工程文件夹占用空间这么大?我们来给它减减肥

    偶然中发现Android Studio的工程文件夹比ADT Bundle的大很多.用Android Studio新建一个空工程,工程文件夹大小为30M,运行一次后大小为40M.同样用ADT Bundl ...

  3. MyBatis5:MyBatis集成Spring事物管理(上篇)

    前言 有些日子没写博客了,主要原因一个是工作,另一个就是健身,因为我们不仅需要努力工作,也需要有健康的身体嘛. 那有看LZ博客的网友朋友们放心,LZ博客还是会继续保持更新,只是最近两三个月LZ写博客相 ...

  4. Git入门资料汇总

    Git是一个非常好用的版本控制工具,同时,它也是一个相对比较复杂的工具,想要掌握它还是需要花一番功夫的.网络上关于Git的入门资料已经很多了,我就不再重复了,直接把我学习的文章放在这里. Git详解 ...

  5. 转职成为TypeScript程序员的参考手册

    写在前面 作者并没有任何可以作为背书的履历来证明自己写作这份手册的分量. 其内容大都来自于TypeScript官方资料或者搜索引擎获得,期间掺杂少量作者的私见,并会标明. 大部分内容来自于http:/ ...

  6. ASP.NET MVC Model绑定(六)

    ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...

  7. CSS3 nth 伪类选择器

    考察下面的 HTML 代码片段: <div> <section>section 1</section> <section>section 2</s ...

  8. CSharpGL(10)两个纹理叠加

    CSharpGL(10)两个纹理叠加 本文很简单,只说明如何用shader实现叠加两个纹理的效果. 另外,最近CSharpGL对渲染框架做了修改,清理一些别扭的内容(DoRender()前后的事件都去 ...

  9. 海量数据处理利器greenplum——初识

    简介及适用场景 如果想在数据仓库中快速查询结果,可以使用greenplum. Greenplum数据库也简称GPDB.它拥有丰富的特性: 第一,完善的标准支持:GPDB完全支持ANSI SQL 200 ...

  10. Linux Nano命令

    Nano命令指南 今天在输命令时,无意中输入了nano,对这个命令不太熟悉,结果不知道如何才能退出,保存,赶快查了一下资料,原来是这样的啊. 打开文件与新建文件 使用nano打开或新建文件,只需键入: ...