Imports UTS_Core.UTSModule.Service
'''
''' 服务任务列表,管理服务的所有任务
'''
Public Class ServiceTasks
Private ReadOnly _tasks As Dictionary(Of String, ServiceTask)
Public Event AddTask(task As Dictionary(Of String, String))
Public Event UpdateTask(task As Dictionary(Of String, String))
Public Event DelTask(task As String)
Public Event ClearTask()
Sub New()
_tasks = New Dictionary(Of String, ServiceTask)()
End Sub
'''
''' 任务总数
'''
'''
Public Function Count() As Integer
Return _tasks.Count
End Function
'''
''' 获取所有的服务任务
'''
'''
Public Function GetAllServiceTasks() As List(Of ServiceTask)
Return _tasks.Values.ToList()
End Function
'''
''' 添加任务,默认开启任务
'''
Public Sub Add(task As ServiceTask, Optional start As Boolean = True)
If String.IsNullOrEmpty(task.TaskName) Then '无效的任务名
Throw New Exception($"TaskName {task.TaskName} is invalid!")
End If
If _tasks.ContainsKey(task.TaskName) Then '已存在的任务名
Throw New Exception($"TaskName {task.TaskName} already exists!")
End If
_tasks.Add(task.TaskName, task)
If start Then task.Start() '默认添加任务时,开启任务
RaiseEvent AddTask(task.GetParams())
End Sub
'''
''' 添加任务,默认开启服务
'''
Public Sub Add(taskInfo As Dictionary(Of String, String), Optional start As Boolean = True)
If taskInfo.ContainsKey("Type") AndAlso taskInfo.ContainsKey("Name") Then
Dim task As ServiceTask
Select Case taskInfo("Type")'根据类型进行不同任务的初始化
Case $"{ ServiceTask.ServiceTaskTypeEnum.DbSync}"
task = New DbSyncServiceTask(taskInfo("Name"), taskInfo)
Add(task, start)
ServiceLog.WriteInfoLog($"taskParam:{task.TaskName} {task.TaskStatus} {task.TaskType}")
Case $"{ ServiceTask.ServiceTaskTypeEnum.ListenJsonFile}"
task = New ListenJsonFileServiceTask(taskInfo("Name"), taskInfo)
Add(task, start)
Case Else
Throw New Exception($"Unknown Type:{taskInfo("Type")}")
End Select
Else
Throw New Exception($"AddTask Invalid TaskInfo")
End If
End Sub
'''
''' 添加任务列表
'''
'''
Public Sub AddRange(tasks As List(Of ServiceTask), Optional start As Boolean = True)
For Each task As ServiceTask In tasks
Add(task, start)
Next
End Sub
'''
''' 移除指定的服务任务
'''
'''
Sub Remove(task As ServiceTask)
If _tasks.ContainsKey(task.TaskName) Then
task.Stop()
RaiseEvent DelTask(task.TaskName)
_tasks.Remove(task.TaskName)
End If
End Sub
'''
''' 移除指定名称的服务任务
'''
Sub RemoveAt(taskName As String)
If _tasks.ContainsKey(taskName) Then
Remove(_tasks.Item(taskName))
End If
End Sub
'''
''' 清空所有的服务任务
'''
Sub Clear()
'关闭所有任务
For Each task As KeyValuePair(Of String, ServiceTask) In _tasks
task.Value.Stop()
Next
'清空任务列表
_tasks.Clear()
RaiseEvent ClearTask()
End Sub
'''
''' 设置指定任务的任务参数
'''
'''
'''
Public Sub SetTaskParams(taskName As String, param As Dictionary(Of String, String))
If _tasks.ContainsKey(taskName) = False Then '不存在的任务
Throw New Exception($"TaskName {taskName} is nonexistent!")
End If
_tasks.Item(taskName).SetParams(param)
RaiseEvent UpdateTask(_tasks.Item(taskName).GetParams())
End Sub
'''
''' 返回指定任务名称的任务参数
'''
'''
'''
Public Function GetTaskParams(taskName As String) As Dictionary(Of String, String)
If _tasks.ContainsKey(taskName) = False Then '不存在的任务
Throw New Exception($"TaskName {taskName} is nonexistent!")
End If
Return _tasks.Item(taskName).GetParams()
End Function
'''
''' 获取所有任务的参数信息
'''
'''
Public Function GetAllTasksParam() As List(Of Dictionary(Of String, String))
Dim allParams As New List(Of Dictionary(Of String, String))
For Each task As KeyValuePair(Of String, ServiceTask) In _tasks
allParams.Add(task.Value.GetParams())
Next
Return allParams
End Function
Public Sub StartTask(taskName As String)
If _tasks.ContainsKey(taskName) = False Then '不存在的任务
Throw New Exception($"TaskName {taskName} is nonexistent!")
End If
_tasks.Item(taskName).Start()
RaiseEvent UpdateTask(_tasks.Item(taskName).GetParams())
End Sub
'''
'''开启所有任务
'''
Public Sub StartAllTasks()
For Each task As KeyValuePair(Of String, ServiceTask) In _tasks
task.Value.Start()
RaiseEvent UpdateTask(task.Value.GetParams())
Next
End Sub
'''
''' 结束休眠,立即执行任务
'''
'''
Public Sub RestartTask(taskName As String)
If _tasks.ContainsKey(taskName) = False Then '不存在的任务
Throw New Exception($"TaskName {taskName} is nonexistent!")
End If
_tasks.Item(taskName).Restart()
RaiseEvent UpdateTask(_tasks.Item(taskName).GetParams())
End Sub
'''
'''开启所有任务
'''
Public Sub RestartAllTasks()
For Each task As KeyValuePair(Of String, ServiceTask) In _tasks
task.Value.Restart()
RaiseEvent UpdateTask(task.Value.GetParams())
Next
End Sub
'''
''' 停止指定任务名的任务
'''
'''
Public Sub StopTask(taskName As String)
If _tasks.ContainsKey(taskName) = False Then '不存在的任务
Throw New Exception($"TaskName {taskName} is nonexistent!")
End If
_tasks.Item(taskName).Stop()
RaiseEvent UpdateTask(_tasks.Item(taskName).GetParams())
End Sub
'''
'''停止所有任务
'''
Public Sub StopAllTasks()
For Each task As KeyValuePair(Of String, ServiceTask) In _tasks
task.Value.Stop()
RaiseEvent UpdateTask(task.Value.GetParams())
Next
End Sub
End Class