Imports Newtonsoft.Json
Imports Newtonsoft.Json.Converters
Namespace UTSModule.Service
'''
''' 应用程序与服务通讯协议类,可将此类序列化为Json字符串或反序列化Json字符串为此类
'''
''' 更改须知:
''' 当需要增加不参与序列化的共有字段时,
''' 在变量名上一行,参照JsonFilter字段增加JsonIgnore特性.
'''
''' 当需要增加命令名称类型时,
''' 首先在CmdNamesEnum中增加枚举字段,
''' 之后在FilterFiled函数中,增加指定命令名称中需要序列话的字段名数组.
'''
''' 2021-03-26
''' 增加软件与设备通讯命令,用于注册软件 InitApp
'''
'''
Public Class TaskJsonParam
'发送
'''
''' 发送控制命令时,通信的用户账号
'''
Public User As String
'''
''' 发送控制命令时,执行程序名
'''
Public AppName As String
'''
''' 通讯时使用的命令名称
'''
Public CmdName As CmdNamesEnum
'''
''' 用户存储服务中任务信息
'''
Public TasksInfo As List(Of Dictionary(Of String, String))
'''
''' 指定需要控制的任务名称集合
'''
Public TasksName As List(Of String)
'''
''' 回复命令时,指示命令执行的状态
'''
Public CmdStatus As String
'''
''' 回复命令时,指定命令执行后的提示信息
'''
Public CmdMsg As String
'''
''' 回复命令时,获取当前服务的版本号
'''
Public ServiceVersion As String
'''
''' 发送与恢复时,软件信息
'''
Public AppInfo As Dictionary(Of String, String)
'''
''' 是否为回复数据
'''
Public IsReply As Boolean
'''
''' 是否启用筛选功能,默认为启用筛选功能
''' 此字段不参与Json序列化
'''
Public Shared Property JsonFilter As Boolean
'''
''' Json序列化时的显示格式,分行对齐显示或是单行无格式显示,默认单行显示
''' 此字段不参与Json序列化
'''
Public Shared Property JsonFormat As Formatting
''' 任务命令执行状态列表
Enum CmdStatusEnum
Pass
Fail
End Enum
''' 任务命令列表
Enum CmdNamesEnum
''' 添加任务
AddTasks
''' 设置任务
SetTasks
''' 获取任务
GetTasks
''' 获取所有任务
GetAllTasks
''' 删除任务
DeleteTasks
''' 删除所有任务
DeleteAllTasks
''' 开启任务
StartTasks
''' 开启所有任务
StartAllTasks
''' 暂停任务
StopTasks
''' 暂停所有任务
StopAllTasks
''' 重启任务
RestartTasks
''' 重启所有任务
RestartAllTasks
''' 获取DataService版本信息
GetServiceVersion
''' 初始化APP,从服务端获取APP运行参数
InitApp
''' App上报状态至服务
AppMsg
''' 服务下发通知App
ServiceMsg
End Enum
'''
''' App上报时包含的类型
'''
Enum AppMsgTypes
'''
''' APP已启动
'''
AppStart
'''
''' APP已关闭
'''
AppClose
'''
''' APP站位切换
'''
StationChanged
'''
''' APP心跳包
'''
AppAlive
'''
''' Sn总表发生变化
'''
SnListChanged
End Enum
'''
''' 服务下发时包含的类型
'''
Enum ServiceMsgTypes
DbHostChange
FtpHostChange
End Enum
Sub New()
IsReply = False
JsonFilter = True
JsonFormat = Formatting.None
TasksName = New List(Of String)()
TasksInfo = New List(Of Dictionary(Of String, String))
AppInfo = New Dictionary(Of String, String)
End Sub
Sub New(reply As Boolean)
IsReply = reply
JsonFilter = True
JsonFormat = Formatting.None
TasksName = New List(Of String)()
TasksInfo = New List(Of Dictionary(Of String, String))
AppInfo = New Dictionary(Of String, String)
End Sub
Sub New(cmd As CmdNamesEnum)
IsReply = False
JsonFilter = True
JsonFormat = Formatting.None
TasksName = New List(Of String)()
TasksInfo = New List(Of Dictionary(Of String, String))
AppInfo = New Dictionary(Of String, String)
CmdName = cmd
End Sub
Sub New(cmd As CmdNamesEnum, reply As Boolean)
IsReply = reply
JsonFilter = True
JsonFormat = Formatting.None
TasksName = New List(Of String)()
TasksInfo = New List(Of Dictionary(Of String, String))
AppInfo = New Dictionary(Of String, String)
CmdName = cmd
End Sub
Sub New(cmd As CmdNamesEnum, usr As String, app As String)
IsReply = False
JsonFilter = True
JsonFormat = Formatting.None
TasksName = New List(Of String)()
TasksInfo = New List(Of Dictionary(Of String, String))
AppInfo = New Dictionary(Of String, String)
CmdName = cmd
User = usr
AppName = app
End Sub
Sub New(cmd As CmdNamesEnum, usr As String, app As String, reply As Boolean)
IsReply = reply
JsonFilter = True
JsonFormat = Formatting.None
TasksName = New List(Of String)()
TasksInfo = New List(Of Dictionary(Of String, String))
AppInfo = New Dictionary(Of String, String)
CmdName = cmd
User = usr
AppName = app
End Sub
'''
''' 序列化类中字段为Json字符串
'''
'''
Public Shared Function SerializeToJson(jsonParam As TaskJsonParam) As String
If JsonFilter Then
Dim jSetting As New JsonSerializerSettings
jSetting.ContractResolver = FilterFiled(jsonParam.CmdName, jsonParam.IsReply)
Return JsonConvert.SerializeObject(jsonParam, JsonFormat, jSetting)
Else
Return JsonConvert.SerializeObject(jsonParam, JsonFormat)
End If
End Function
'''
''' 反序列Json字符串填充当前类中
'''
'''
Public Shared Function DeserializeFormJson(jsonString As String) As TaskJsonParam
Return JsonConvert.DeserializeObject(Of TaskJsonParam)(jsonString)
End Function
'''
''' 根据任务名称,设置参与序列化的字段名称
''' 增加任务名称时,需要更新该函数
'''
'''
'''
Private Shared Function FilterFiled(cmd As CmdNamesEnum, Optional isReply As Boolean = False) As TaskJsonSettings
If isReply Then
Return FilterReplyFiled(cmd)
Else
Return FilterSendFiled(cmd)
End If
End Function
Private Shared Function FilterSendFiled(cmd As CmdNamesEnum) As TaskJsonSettings
Dim lst As New List(Of String)
lst.Add("User")
lst.Add("AppName")
lst.Add("CmdName")
Select Case cmd
Case CmdNamesEnum.AddTasks,
CmdNamesEnum.SetTasks
lst.Add("TasksInfo")
Case CmdNamesEnum.DeleteTasks,
CmdNamesEnum.GetTasks,
CmdNamesEnum.StartTasks,
CmdNamesEnum.StopTasks,
CmdNamesEnum.RestartTasks
lst.Add("TasksName")
Case CmdNamesEnum.InitApp, CmdNamesEnum.AppMsg, CmdNamesEnum.ServiceMsg
lst.Add("AppInfo")
Case CmdNamesEnum.GetServiceVersion
lst.Add("ServiceVersion")
End Select
Return New TaskJsonSettings(lst.ToArray())
End Function
Private Shared Function FilterReplyFiled(cmd As CmdNamesEnum) As TaskJsonSettings
Dim lst As New List(Of String)
lst.Add("CmdName")
lst.Add("CmdStatus")
lst.Add("CmdMsg")
Select Case cmd
Case CmdNamesEnum.GetTasks
lst.Add("TasksInfo")
Case CmdNamesEnum.GetAllTasks
lst.Add("TasksInfo")
Case CmdNamesEnum.GetServiceVersion
lst.Add("ServiceVersion")
Case CmdNamesEnum.InitApp, CmdNamesEnum.AppMsg, CmdNamesEnum.ServiceMsg
lst.Add("AppInfo")
End Select
Return New TaskJsonSettings(lst.ToArray())
End Function
End Class
End Namespace