Public Class UtsAppManager ''' ''' 设备运行APP列表,键为APP名称,值为App对象 ''' Private _appDic As Dictionary(Of String, UtsApp) Private _clientDic As Dictionary(Of Net.Sockets.TcpClient, UtsApp) Sub New() _appDic = New Dictionary(Of String, UtsApp) _clientDic = New Dictionary(Of Net.Sockets.TcpClient, UtsApp) End Sub Public Sub AddApp(app As UtsApp) If _appDic.ContainsKey(app.Name) = False Then _appDic.Add(app.Name, app) End If End Sub ''' ''' 判断App是否存在队列中 ''' ''' ''' Public Function AppExists(appName As String) As Boolean Return _appDic.ContainsKey(appName) End Function ''' ''' 获取UtsApp对象,没有则添加对象至队列后再返回 ''' ''' ''' Public Function GetApp(appName As String) As UtsApp Static lock As New Object SyncLock lock If _appDic.ContainsKey(appName) = False Then ServiceLog.WriteDebugLog($"{appName} Add!") _appDic.Add(appName, New UtsApp()) End If End SyncLock Return _appDic(appName) End Function ''' ''' 获取当前App列表 ''' ''' Public Function GetAllApps() As List(Of UtsApp) Return _appDic.Values.ToList() End Function Public Function GetClientBindApp(client As Net.Sockets.TcpClient) As UtsApp If _clientDic.ContainsKey(client) Then Return _clientDic(client) Else Return Nothing End If End Function Public Sub BindClientAndApp(client As Net.Sockets.TcpClient, app As UtsApp) Static lock As New Object SyncLock lock If _clientDic.ContainsKey(client) = False Then _clientDic.Add(client, app) ServiceLog.WriteDebugLog($"{_clientDic(client).Name} Connect!") End If End SyncLock End Sub Public Sub CancelClientBind(client As Net.Sockets.TcpClient) If _clientDic.ContainsKey(client) Then ServiceLog.WriteDebugLog($"{_clientDic(client).Name} Disconnect!") _clientDic(client).Status = UtsApp.AppStatus.Closed _clientDic(client).Client = Nothing _clientDic.Remove(client) End If End Sub End Class