示例代码
特别说明
1、适用于 Visual Studio版本号15.3及以上。
2、需要引入NuGet依赖包FBoxClientDriver
、FBoxClientDriver.Contract
示例代码中步骤如下:
配置参数
创建DefaultCredentialProvider对象
创建FBoxClientManager对象
登录服务器
侦听盒子状态变更事件
侦听实时数据推送变更事件
开启盒子的所有监控点数据推送
定义方法
调用方法
示例代码如下:
注意:
数据推送前需要先开点
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using FBoxClientDriver;
using FBoxClientDriver.Contract;
using FBoxClientDriver.Impl;
namespace SDKDEMO
{
//配置参数
public class FBoxClientParameters
{
public static string ClientId { get; set; } = "";
public static string ClientSecret { get; set; } = "";
public static string UserName { get; set; } = "";
public static string Password { get; set; } = "";
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 string boxNo = "300015050009"; // 以这个为例子
public FBoxDemo()
{
//创建对象并初始化
var 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"), null);
}
public void Dispose()
{
_fbox?.Dispose();
}
/// <summary>
/// 启动
/// </summary>
public void Start()
{
//初始化SDK,内部建立signalr连接对象,Restart只需全局执行一次。
_fbox.Restart().Wait();
//侦听盒子状态变更事件
_fbox.BoxConnectStateChanged += _fbox_BoxConnectStateChanged;
//侦听实时数据变更事件
_fbox.DataMonitorValueChanged += _fbox_DataMonitorValueChanged;
}
/// <summary>
/// 实时数据变更函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _fbox_DataMonitorValueChanged(object sender, IList<DataMonitorValueChangedArgs> e)
{
foreach (var dmon in e)
Console.WriteLine($"dmv:{dmon.Uid}:{dmon.Value},{dmon.Status}");
}
/// <summary>
/// 盒子状态变更函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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}");
}
}
/// <summary>
/// 开启盒子所有监控点
/// </summary>
public void StartAllDMonData()
{
//盒子每次掉线后,重新上线后均需要重新开点
try
{
_fbox.StartAllDataMonitorPointsOnBox(new BoxArgs(boxNo)).Wait();//boxNo为盒子号
}
catch (Exception ex)
{
switch (ex.Message)
{
// 未登录服务器,请先Restart()
case "Box server not found.":; break;
// 当前账号下未找到BoxNo序列号的盒子
case "Not Found":; break;
default:; break;
}
}
}
/// <summary>
/// 获取盒子分组和盒子信息
/// </summary>
public void GetBoxGroups()
{
var grpList = _fbox.GetBoxGroups().Result;
foreach (var grp in grpList)
{
Console.WriteLine(grp.Uid); // 盒子分组的Uid
Console.WriteLine(grp.Name); // 盒子分组名称
foreach (var box in grp.Boxes) // 遍历分组下的盒子集合
{
Console.WriteLine(box.BoxId); // 盒子Id
Console.WriteLine(box.Alias); // 盒子名称
Console.WriteLine(box.BoxNo); // 盒子号码
Console.WriteLine(box.ConnectionState); // 获取的时候盒子状态, 不能作为实时状态用,也不能一直调用这个接口来作为盒子状态变更,盒子状态变更请使用SignalR实时推送
Console.WriteLine(box.NetworkType); // 网络类型 1:网络, 2:2G, 3:3G (这个不支持),4:Wifi ,5:4G
Console.WriteLine(box.Disabled); // 盒子是否被禁用
Console.WriteLine(box.ApiBaseUrl); // ApiBaseUrl服务器地址
Console.WriteLine(box.SignalrUrl); // SignalR服务器地址
Console.WriteLine(box.Owned); // 是否为拥有者
Console.WriteLine(box.BoxType); // 盒子类型, 0:标准盒子,1:mini盒子,2:Lite 3:VPN盒子
}
}
}
//定义方法
}
class Program
{
static void Main(string[] args)
{
using (var fbox = new FBoxDemo())
{
fbox.Start();
fbox.StartAllDMonData();
fbox.GetBoxGroups();
//调用定义的方法
Console.ReadLine();
}
}
}
}
在创建IFBoxClientManager实例并初始化时,您需要提供一下参数:clientId
、clientsecret
、username
、password
、Id server
、App server
、和Hdata Server
username
、password
为FlexManager的账号、密码clientId
、clientsecret
为找销售申请的账号、密码Id server
、App server
、和Hdata Server
若公有云的话不变,私有云改为对应地址