3.修复增添COM设备驱动可能导致的丰富,4.修复互连网发送数据只怕引发的老大

一 、更新内容

一 、更新内容

1.修改*Server类,以及承继关系。
2.日增IRunDevice的IServerProvider接口继承。
3.修复扩展COM设备驱动恐怕造成的那些。
4.修复网络发送数据也许引发的不行。
5.周全商业事务驱动器。

1.修改*Server类,以及承继关系。
2.日增IRunDevice的IServerProvider接口继承。
3.修复增添COM设备驱动可能造成的丰盛。
4.修复网络发送数据或者引发的那多少个。
5.健全商业事务驱动器。

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

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

9.充实协商接口GetPackageLength,数据交互更灵敏。
10.修复一些BUG。
11.优化代码。

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

style=”font-size: 18px;”>贰 、GetPackageLength接口的选择

style=”font-size: 18px;”>② 、GetPackageLength接口的应用

    
这么些接口首要的行使情状是:当协议中有请求发送数据长度的一声令下,例如先向服务器发送数据包长度命令,获得重回明显后,再发送实际数目包音信。在一连发送大块数据的时候,例如文件内容、连串化后的始末等,内容有恐怕包括协议的头和尾,会影响数据包的完整性。首要用来互动一而再的较大数目块内容。

    
这几个接口主要的施用处境是:当协议中有请求发送数据长度的吩咐,例如先向服务器发送数据包长度命令,得到重临分明后,再发送实际数据包音信。在连年发送大块数据的时候,例如文件内容、类别化后的剧情等,内容有也许带有协议的头和尾,会影响数据包的完整性。主要用以互动一而再的较大数据块内容。

      1.接口参数

      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);
  /// <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.接口使用

      2.接口使用

         (1)设置配置参数

         (1)设置配置参数

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

          (2)接口代码

          (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;
            }
        }
        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;
            }
        }

style=”font-size: 18px;”> ③ 、扩展宿主程序(ServerSuperIO.Host)

style=”font-size: 18px;”> 叁 、扩张宿主程序(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;
        }
}
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;
        }
}

style=”font-size: 18px;”> ④ 、扩展安排工具(ServerSuperIO.Tool)

style=”font-size: 18px;”> 肆 、扩展布置工具(ServerSuperIO.Tool)

1.充实服务,如下图:

1.增添服务,如下图:

图片 1

图片 2

 

 

2.日增设备,如下图:

2.日增设备,如下图:

图片 3

图片 4

 

 

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

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

图片 5

图片 6

 

 

1.[连载]《C#通信(串口和互联网)框架的宏图与贯彻》

1.[连载]《C#广播发表(串口和网络)框架的布置与贯彻》

2.[开源]C#跨平台物联网通信框架ServerSuperIO(SSIO)介绍

2.[开源]C#跨平台物联网通信框架ServerSuperIO(SSIO)介绍

2.使用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)创设系统的完好方案

2.选拔SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)营造系统的一体化方案

3.C#工业物联网和集成系统化解方案的技术途径(数据源、数据搜集、数据上传与吸收、ActiveMQ、Mongodb、WebApi、手机App)

3.C#工业物联网和集成系统化解方案的技能途径(数据源、数据收集、数据上传与吸收、ActiveMQ、Mongodb、WebApi、手提式有线电话机App)

5.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO

5.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO

物联网&集成技术(.NET) QQ群54256083

物联网&集成技术(.NET) QQ群54256083

 

 

相关文章