
# 接口方法
**表1** DcClient支持的接口方法
| 接口                             | 说明                         |
|:---|:---|
| CreateFromEnv                  | 创建客户端 ，执行初始化操作             |
| Open                           | 打开客户端，开始消息收发               |
| Close                          | 关闭客户端，清理资源                 |
| ForbidSendWhenBrokerOverLoaded | 设置是否在离线缓存达到阈值时禁止发送数据       |
| SendMode                       | 设置上报模式(同步\|异步)             |
| OnPointGet                     | 用于网关处理点位读取请求               |
| OnPointSet                     | 用于网关处理点位设置请求               |
| OnModuleShadowReceived         | 用于网关处理模块影子，接收下行数采配置        |
| StartModuleShadow              | 启动模块影子，设置模块影子回调，并触发获取影子的动作 |
| GetModuleShadow                | 主动获取一次模块影子                 |
| GetDevicesStatuses             | 获取子设备状态                    |
| PointReport                    | 点位上报                       |
| DataSourceConnStateReport      | 连接状态上报                     |
   
1. 创建客户端
方法描述：
```
static DcClient CreateFromEnv();
```
方法功能：
根据环境变量创建客户端，返回客户端实例。
2. 打开客户端
方法描述：
```
void Open();
```
方法功能：
打开客户端，使用客户端其他功能前必须先调用该方法，才能正常收发消息。
3. 打开客户端
方法描述：
```
void Close();
```
方法功能：
关闭客户端，清理资源，程序将退出时调用该方法。
4. 点位设置请求处理
方法描述：
```
PointsSetRsp OnPointsSet(string requestId, PointsSetReq pointsSetReq);
```
方法功能：
点位设置回调，用于网关处理点位设置请求。
表1参数说明 
| 名称           | 类型           | 描述                                |
|:---|:---|:---|
| requestId    | string       | 用于唯一标识某次请求的请求ID                   |
| pointsSetReq | PointsSetReq | 点位设置请求的对象，该对象结构见下表                |
| @return      | PointsSetRsp | 点位设置响应，网关处理完请求以后，需要返回该响应，该对象结构见下表 |
   
表2PointsSetReq结构说明 
| 名称     | 类型                           | 描述                      |
|:---|:---|:---|
| Points | Dictionary\<string, object\> | 按\<点位ID，点位对象\>存储点位数据的字典 |
   
表3PointsSetRsp结构说明 
| 名称         | 类型     | 描述         |
|:---|:---|:---|
| ResultCode | int    | 点位设置请求结果码  |
| ResultDesc | string | 点位设置请求结果描述 |
   
5. 点位读取请求处理
方法描述：
```
PointsGetRsp OnPointsGet(string requestId, PointsGetReq pointsGetReq);
```
方法功能：
点位读取回调，用于网关处理点位读取请求。
表4参数说明 
| 名称           | 类型           | 描述                                |
|:---|:---|:---|
| requestId    | string       | 用于唯一标识某次请求的请求ID                   |
| pointsGetReq | PointsGetReq | 点位读取请求的对象，该对象结构见下表                |
| @return      | PointsGetRsp | 点位读取响应，网关处理完请求以后，需要返回该响应，该对象结构见下表 |
   
表5PointsGetReq结构说明 
| 名称     | 类型             | 描述                  |
|:---|:---|:---|
| Points | List\<string\> | 按\[点位ID\]存储需要读的点位列表 |
   
表6PointsGetRsp结构说明 
| 名称     | 类型                           | 描述                        |
|:---|:---|:---|
| Points | Dictionary\<string, object\> | 按\<点位ID，点位对象\>存储点位读取结果的字典 |
   
6. 模块影子下行处理
方法描述：
```
void OnModuleShadowReceived(ModuleShadow shadow);
```
方法功能：
模块影子下行回调，用于网关接收模块数采配置信息，可根据需要对模块影子进行缓存或持久化。
表7参数说明 
| 名称     | 类型           | 描述   |
|:---|:---|:---|
| shadow | ModuleShadow | 模块影子 |
   
表8ModuleShadow结构说明 
| 名称                   | 类型                           | 描述                                    |
|:---|:---|:---|
| Properties           | Dictionary\<string, object\> | 按\<影子属性名，影子属性对象\>存储的字典                |
| PropertiesUpdateTime | Dictionary\<string, long\>   | 按\<影子属性名，更新时间戳\>存储的字典，用户可根据更新时间进行增量同步 |
   
7. StartModuleShadow
方法描述：
```
void StartModuleShadow(IModuleShadowCallback callback);
```
方法功能：
启动模块影子，设置模块影子用户回调，并主动触发一次模块影子的获取。SDK在收到下行的模块影子后将调用用户回调。
表9参数说明 
| 名称       | 类型                    | 描述   |
|:---|:---|:---|
| callback | IModuleShadowCallback | 用户回调 |
   
表10IModuleShadowCallback说明 
| 方法签名                                             | 描述       |
|:---|:---|
| void OnModuleShadowReceived(ModuleShadow shadow) | 收到模块影子回调 |
   
8. GetModuleShadow
方法描述：
```
void GetModuleShadow();
```
方法功能：
主动获取一次模块影子，获取成功后将触发用户回调。
9. GetDevicesStatuses
方法描述：
```
DevicesStatuses GetDevicesStatuses(List<string> deviceIds, int timeout);
```
方法功能：
获取子设备状态。
表11参数说明 
| 名称        | 类型              | 描述                  |
|:---|:---|:---|
| deviceIds | List\<string\>  | 要查询的子设备ID列表         |
| timeout   | int             | 超时，范围1\~30000(单位ms) |
| @return   | DevicesStatuses | 查询到的子设备状态列表         |
   
表12DevicesStatuses结构说明 
| 名称      | 类型                   | 描述          |
|:---|:---|:---|
| Devices | List\<DeviceStatus\> | 存储设备状态信息的列表 |
   
表13DevicesStatus结构说明 
| 名称       | 类型     | 描述   |
|:---|:---|:---|
| DeviceId | string | 设备ID |
| Status   | string | 设备状态 |
   
10. PointReport
方法描述：
```
void PointReport(PointsReport pointsReport);
```
方法功能：
点位上报。
表14参数说明 
| 名称           | 类型           | 描述       |
|:---|:---|:---|
| pointsReport | PointsReport | 要上报的点位数据 |
   
表15PointsReport结构说明 
| 名称     | 类型                           | 描述                    |
|:---|:---|:---|
| Points | Dictionary\<string, object\> | 以\<点位ID，点位数据对象\>存储的字典 |
   
11. DataSourceConnStateReport
方法描述：
```
void DataSourceConnStateReport(DataSourceConnState dataSourceConnState);
```
方法功能：
上报连接状态。
表16参数说明 
| 名称                  | 类型                  | 描述        |
|:---|:---|:---|
| dataSourceConnState | DataSourceConnState | 存储连接状态的对象 |
   
表17DataSourceConnState结构说明 
| 名称    | 类型     | 描述   |
|:---|:---|:---|
| State | string | 连接状态 |
| Info  | string | 状态描述 |
   
12. ForbidSendWhenBrokerOverLoaded
属性描述：
```
bool ForbidSendWhenBrokerOverLoaded { get; set; };
```
属性功能：
设置是否在离线缓存满时禁止发送数据，默认值为false。当EdgeHub离线缓存达到阈值时，若设定为true，在属性上报和点位上报发送数据时，会抛出HubOverloadedException异常。
13. SendMode
属性描述：
```
ClientConfig.SendMode SendMode { get; set; };
```
属性功能：
设置上报模式，默认为异步发送，若设定为同步发送，则上报数据时将同步等待3秒，超时则抛出TransportException异常。
表18SendMode说明 
| 名称             | 描述   |
|:---|:---|
| SendMode.Async | 异步发送 |
| SendMode.Sync  | 同步发送 |
   
