当前位置: 首页 > news >正文

【云原生】设备云之基于FlexManager的C#SDK开发案例代码

文章目录

  • 前言
  • 一、C#SDK开发说明
    • 1、软件版本
    • 2、开发依赖
    • 3、引入项目文件
  • 二、示例代码
    • 1、创建全局变量
    • 2、创建IFBoxClientManager、ILogger实例并初始化。
    • 3、开启指定盒子所有监控点数据推送
    • 4、侦听盒子状态变更事件
    • 5、侦听实时数据变更事件
    • 6、发起请求并处理返回。
    • 7、释放资源
  • 总结

前言

上几篇介绍了FlexManager设备云端数据的各种操作,相信大家都有看了。本篇将就怎么使用设备云数据库的数据进行客户端应用C#SDK开发做一下讲解。当然,最基层的设备入云得基本掌握一点自动化的一些相关知识,同学们如果有兴趣可以到我的学习资料里边去学习一波,此处不做重点讲述。本文重点讲述的是基于FlexManager的C#SDK应用开发。


提示:以下是本篇文章正文内容,下面案例可供参考

一、C#SDK开发说明

1、软件版本

1、此 C# SDK 适用于 Visual Studio版本号15.3及以上。
2、此 C# SDK 中为Console程序(.NET Core)。
3、接口返回401均为token过期。需要根据refresh_token调重新登录接口刷新access_token后重试。refresh_token有效期为30天。java demo和C# SDK已处理刷新token流程和signalr重连问题。

2、开发依赖

本案例代码需要引入NuGet依赖包FBoxClientDriver、FBoxClientDriver.Contract。
例如引入FBoxClientDriver包
方式一:
在Visual Studio2017命令行中执行如下语句
PM> Install-Package FBoxClientDriver
方式二:
在Visual Studio2017中导入项目,在NuGet包库中引入依赖包名,如下图所示:
在这里插入图片描述

3、引入项目文件

在Visual Studio的界面中,右键单击您的解决方案。

单击添加 -> 现有项目。

在弹出的对话框中,选择C# SDK中项目文件(与),单击打开。FBoxDemo.csProgram.cs

二、示例代码

注意:
数据推送前需要先开点。


案例代码中调用C# SDK方法步骤如下:

1、创建全局变量

2、创建IFBoxClientManager、ILogger实例并初始化。

3、开启指定盒子所有监控点数据推送

4、侦听盒子状态变更事件

5、侦听实时数据变更事件

6、发起请求并处理返回。

7、释放资源

代码示例:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using FBoxClientDriver;
using FBoxClientDriver.Contract;
using FBoxClientDriver.Impl;
using Microsoft.Extensions.Logging;

namespace SDKDEMO
{
    //创建配置参数
    public class FBoxClientParameters
    {
        public static string ClientId { get; set; } = "";       //找销售申请
        public static string ClientSecret { get; set; } = "";   //找销售申请
        public static string UserName { get; set; } = "";       //FlexManager注册
        public static string Password { get; set; } = "";       //FlexManager注册
        //服务器地址,公有云不变,私有云改为对应服务器地址
        public static string IdServer { get; set; } = "https://account.flexem.com/core";
        public static string MainServer { get; set; } = "http://fbox360.com";
        public static string HdataServer { get; set; } = "http://fbhs1.fbox360.com";
    }

    public class FBoxDemo : IDisposable
    {
        private readonly IFBoxClientManager _fbox;
        private readonly ILogger<FBoxDemo> _logger;
        private readonly string boxNo = "300015050009"; //以这个盒子为例

        public FBoxDemo(ILoggerFactory loggerFactory)
        {
            //创建ICredentialProvider、FBoxClientManager对象并初始化
            _logger = loggerFactory.CreateLogger<FBoxDemo>();

            ICredentialProvider provider =
                new DefaultCredentialProvider(FBoxClientParameters.ClientId,FBoxClientParameters.ClientSecret,FBoxClientParameters.UserName,FBoxClientParameters.Password);
            _fbox = new FBoxClientManager(FBoxClientParameters.IdServer,FBoxClientParameters.MainServer,FBoxClientParameters.HdataServer,provider,Guid.NewGuid().ToString("N"), loggerFactory);
            //侦听FBox状态变更事件
            _fbox.BoxConnectStateChanged += _fbox_BoxConnectStateChanged;
            //侦听实时数据变更事件
            _fbox.DataMonitorValueChanged += _fbox_DataMonitorValueChanged;
        }

        private void _fbox_DataMonitorValueChanged(object sender, IList<DataMonitorValueChangedArgs> e)
        {
            foreach (var dmon in e)
                Console.WriteLine($"dmv:{dmon.Uid}:{dmon.Value},{dmon.Status}");
        }

        private void _fbox_BoxConnectStateChanged(object sender, IList<BoxConnectionStateItem> e)
        {
            //NewState:1、2是盒子在线状态。0、3为盒子不在线状态,根据盒子状态对盒子进行开点操作
            foreach (var stateItem in e)
            {
                Console.WriteLine($"{stateItem.BoxNo},{stateItem.NewState}");
            }
        }

        public async Task Go()
        {
            try
            {
                //初始化SDK,内部建立signalr连接对象,Restart只需全局执行一次。
                await _fbox.Restart();

                //盒子掉线后,等盒子重新上线后均需要重新开点
                await _fbox.StartAllDataMonitorPointsOnBox(new BoxArgs(boxNo));  //开启FBox所有监控点数据推送

                //逻辑代码
                //例如: 
                //var groups = await _fbox.GetDataMonitorGroups(new GetDMonitorGroupsArgs()
                //{
                //  BoxNo = boxNo                                   //盒子号
                //});
                //foreach (var group in groups)
                //{
                //  Console.WriteLine(group.DataMonitorDefinitions); //监控点组下的监控点条目Id
                //  Console.WriteLine(group.Uid);                    //监控点组的Id
                //  Console.WriteLine(group.GroupName);              //监控点组的名称
                //}
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }

        public void Dispose()
        {
            _fbox.BoxConnectStateChanged -= _fbox_BoxConnectStateChanged;
            _fbox.DataMonitorValueChanged -= _fbox_DataMonitorValueChanged;
            _fbox?.Dispose();
        }
    }
}

在创建IFBoxClientManager实例并初始化时,您需要提供以下参数:
1、为FBox客户端的账号、密码。
2、为找销售申请的开发者账号、密码。
3、和若公有云的话不变,私有云改为对应地址地址。
ClientId ClientSecret Username Password IdServer MainServer HdataServer Username Password ClientId ClientSecret IdServer MainServer HdataServer

总结

以上就是今天要讲的内容,本文仅仅简单介绍了基于FlexManager的C#SDK开发,而FlexManager提供了大量能使我们自己使用云数据创建客户端应用的方式方法,同学们可以多深入了解一下。

相关文章:

  • Rust(7):数组类型
  • STM32——FLASH闪存编程原理与步骤
  • 计算机毕业设计之java+javaweb的大学生就业帮助系统-就业招聘网站
  • 跳表论文解读
  • 1061:求整数的和与均值
  • Day04JavaWeb第四次笔记---Maven的使用
  • Unrecognized option: --no-transfer-progress
  • 加载指定 having lines separator 时max_data_processor 不起作用
  • 高薪程序员面试题精讲系列150之电商专题(上)-你们的电商项目有什么特色?是B2B还是B2C、还是C2C的?直播电商你了解吗?
  • kafka是啥?虽然很难学,但是实验入门很简单
  • MySQL8.0 索引优化-invisible index
  • 基于java仓库管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  • C++对象内存故事, 一个对象是如何由子对象来构成的?
  • 软件过程模型(软件开发模型)
  • 138-基于51单片机的教室智能照明灯控制系统光控人数检测(原理图+源程序+元件清单+PCB)
  • android 一些 utils
  • centos安装java运行环境jdk+tomcat
  • happypack两次报错的问题
  • JS笔记四:作用域、变量(函数)提升
  • js对象的深浅拷贝
  • js正则,这点儿就够用了
  • Leetcode 27 Remove Element
  • Object.assign方法不能实现深复制
  • Python打包系统简单入门
  • ReactNativeweexDeviceOne对比
  • 大整数乘法-表格法
  • 你不可错过的前端面试题(一)
  • 前端面试之闭包
  • 实习面试笔记
  • 写代码的正确姿势
  • Prometheus VS InfluxDB
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #ifdef 的技巧用法
  • #QT(一种朴素的计算器实现方法)
  • #单片机(TB6600驱动42步进电机)
  • (2)nginx 安装、启停
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (二)JAVA使用POI操作excel
  • (分类)KNN算法- 参数调优
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (南京观海微电子)——I3C协议介绍
  • (强烈推荐)移动端音视频从零到上手(下)
  • (四)图像的%2线性拉伸
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)ORM
  • (转)大型网站架构演变和知识体系
  • (转载)Linux 多线程条件变量同步
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net 8.0 新的变化
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑