设为首页 收藏本站
查看: 1297|回复: 0

[软件发布] ServerSuperIO 2.4(SSIO)发布,物联网通讯框架

[复制链接]
累计签到:29 天
连续签到:1 天
发表于 2016-10-28 09:11:55 | 显示全部楼层 |阅读模式
欢迎加入运维网交流群:263444886   DSC0000.png
  一、更新内容
  1.修改*Server类,以及承继关系。
2.增加IRunDevice的IServerProvider接口继承。
3.修复增加COM设备驱动可能造成的异常。
4.修复网络发送数据可能引发的异常。
5.完善协议驱动器。
  6.修改协议驱动接口。
7.修改协议命令接口。
8.修复协议命令,抽象基类情况下的异常BUG。
  9.增加协议接口GetPackageLength,数据交互更灵活。
10.修复一些BUG。
11.优化代码。
  二、GetPackageLength接口的使用
  这个接口主要的使用场景是:当协议中有请求发送数据长度的命令,例如先向服务器发送数据包长度命令,得到返回确定后,再发送实际数据包信息。在连接发送大
块数据的时候,例如文件内容、序列化后的内容等,内容有可能包含协议的头和尾,会影响数据包的完整性。主要用于交互连续的较大数据块内容。


  1.接口参数
/// <summary>
      /// 获得应该接收的数据长度,如果当前接收的数据小于这个返回值,那么继续接收数据,直到大于等于这个返回长度。如果接收数据超时,则直接返回当前已经接收的数据。
      /// </summary>
      /// <param name=&quot;data&quot;>接收的数据</param>
      /// <param name=&quot;channel&quot;>IO通道,用于返回确认数据</param>
      /// <param name=&quot;readTimeout&quot;>返回读数据超时间隔时间</param>
      /// <returns></returns>
      public abstract int GetPackageLength(byte[] data, IChannel channel, ref int readTimeout);  2.接口使用
  (1)设置配置参数
IServer server = new ServerFactory().CreateServer(new ServerConfig()
           {
               ServerName = &quot;服务1&quot;,
               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(&quot;ok&quot;);
            int num = channel.Write(okBytes);
            if (num > 0)
            {
                Console.WriteLine(&quot;返回数据&quot;);
            }
            return length;
        }
        catch (Exception)
        {
            return 0;
        }
    }
    else
    {
        Console.WriteLine(&quot;校验错误&quot;);
        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(&quot;正在初始化服务程序......&quot;);
            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(&quot;增加设备:&quot; + devCfg.DeviceID + &quot; 失败!&quot;);
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                            continue;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                success = false;
                Console.WriteLine(ex.Message);
            }
            if (success)
            {
                Console.WriteLine(&quot;初始化服务程序完成&quot;);
            }
            while (&quot;exit&quot; == Console.ReadLine())
            {
                _serverFactory.RemoveAllServer();
                break;
            }
        }
        private static bool HandlerRoutine(int ctrlType)
        {
            if (ctrlType == 0 || ctrlType == 2)
            {
                _serverFactory.RemoveAllServer();
            }
            return false;
        }
}  四、增加配置工具(ServerSuperIO.Tool)
  1.增加服务,如下图:
DSC0001.png
  2.增加设备,如下图:
DSC0002.png
  3.单击树型菜单,修改配置属性。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-292319-1-1.html 上篇帖子: Dat Data v11.3.0 发布,点对点数据共享 下篇帖子: JPress 0.4.0 发布,WordPress的Java代替版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表