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

简介: 一、更新内容 1.修改*Server类,以及承继关系。2.增加IRunDevice的IServerProvider接口继承。3.修复增加COM设备驱动可能造成的异常。4.修复网络发送数据可能引发的异常。

一、更新内容

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.单击树型菜单,修改配置属性。

 

 

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
EMQ
|
Prometheus 监控 物联网
EMQX 5.0 全新网关框架:轻松实现多物联网协议接入
本文将对EMQX全新的网关框架及功能使用进行详细解读,帮助读者更好地利用EMQX的多协议接入能力连接各类设备,满足更多物联网场景的数据接入需求。
EMQ
825 16
EMQX 5.0 全新网关框架:轻松实现多物联网协议接入
|
3月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
3月前
|
物联网 测试技术 持续交付
软件测试的艺术与科学:探索自动化测试框架未来技术的融合与创新:探索区块链、物联网和虚拟现实的交汇点
【8月更文挑战第30天】在软件开发的海洋中,测试是确保航行安全不可或缺的灯塔。本文将带领读者揭开软件测试神秘的面纱,深入理解自动化测试框架的重要性和实现方法。通过实际案例,我们将一起探索如何构建高效、可靠的自动化测试系统,从而保障软件质量,提升开发效率。
|
3月前
|
物联网 监控 API
探索Xamarin在物联网浪潮中的宝石般闪耀:跨平台框架如何成为连接智能设备的桥梁并预示着技术的未来
【8月更文挑战第31天】在数字化转型中,物联网通过设备互联提升了生活与工作的智能化水平。Xamarin凭借其跨平台特性,在物联网开发中展现出巨大潜力,能够以一套代码同时支持多个操作系统,显著降低开发成本。通过高效的硬件交互与稳定的性能表现,Xamarin不仅优化了物联网应用的开发流程,还为未来的持续进化奠定了坚实基础。
57 0
|
监控 小程序 物联网
阿里云物联网平台专用工具详细说明
阿里云物联网平台专用工具基本涵盖了阿里云物联网平台提供你主要管理功能,可以方便创建产品、设备、物模型,查看设备实时属性,事件,发送服务和查看服务日志等等。
836 0
阿里云物联网平台专用工具详细说明
|
6月前
|
JSON 缓存 物联网
推荐一款go语言的开源物联网框架-opengw
推荐一款go语言的开源物联网框架-opengw
151 4
|
6月前
|
Prometheus 数据可视化 Cloud Native
助力工业物联网,工业大数据之服务域:可视化工具Grafana介绍【三十八】
助力工业物联网,工业大数据之服务域:可视化工具Grafana介绍【三十八】
155 1
|
物联网
《物联网专场-基于物联网技术赋能框架传媒行业变革》电子版地址
物联网专场-基于物联网技术赋能框架传媒行业变革
124 15
《物联网专场-基于物联网技术赋能框架传媒行业变革》电子版地址
|
传感器 监控 安全
基于物联网的智能厨房安全监测系统-下位机程序
基于物联网的智能厨房安全监测系统-下位机程序
182 0
|
传感器 监控 网络协议
基于物联网的智能厨房安全监测系统-上位机程序
基于物联网的智能厨房安全监测系统-上位机程序
236 0

相关产品

  • 物联网平台