Merge branch 'master' of http://172.24.11.74:90/scm/git/DDMonorepo
This commit is contained in:
commit
f5febac0e1
@ -1,5 +1,4 @@
|
|||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
Imports DigitalData.Modules.EDMIAPI.EDMIServiceReference
|
|
||||||
Imports DigitalData.Modules.EDMIAPI.IDBServiceReference
|
Imports DigitalData.Modules.EDMIAPI.IDBServiceReference
|
||||||
Imports System.ServiceModel
|
Imports System.ServiceModel
|
||||||
Imports System.IO
|
Imports System.IO
|
||||||
|
|||||||
@ -15,14 +15,9 @@ Namespace Base
|
|||||||
Public Class BaseForm
|
Public Class BaseForm
|
||||||
Inherits Form
|
Inherits Form
|
||||||
|
|
||||||
Private ReadOnly _Logger As Logger
|
|
||||||
Private ReadOnly _ErrorHandler As ClassErrorHandler
|
Private ReadOnly _ErrorHandler As ClassErrorHandler
|
||||||
|
|
||||||
Protected ReadOnly Property Logger As Logger
|
Protected ReadOnly Property Logger As Logger
|
||||||
Get
|
|
||||||
Return _Logger
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
|
|
||||||
Public Sub New()
|
Public Sub New()
|
||||||
' Get the full name of the inheriting form
|
' Get the full name of the inheriting form
|
||||||
@ -30,8 +25,8 @@ Namespace Base
|
|||||||
Dim oClassName = [GetType]().FullName
|
Dim oClassName = [GetType]().FullName
|
||||||
|
|
||||||
' My.LogConfig is undefined in the designer
|
' My.LogConfig is undefined in the designer
|
||||||
_Logger = My.LogConfig?.GetLogger(oClassName)
|
Logger = My.LogConfig?.GetLogger(oClassName)
|
||||||
_ErrorHandler = New ClassErrorHandler(_Logger)
|
_ErrorHandler = New ClassErrorHandler(Logger)
|
||||||
|
|
||||||
' When you add something, be careful if it
|
' When you add something, be careful if it
|
||||||
' depends on a global var like My.LogConfig
|
' depends on a global var like My.LogConfig
|
||||||
@ -43,18 +38,14 @@ Namespace Base
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Me.SuspendLayout()
|
SuspendLayout()
|
||||||
'
|
'
|
||||||
'BaseForm
|
'BaseForm
|
||||||
'
|
'
|
||||||
Me.ClientSize = New System.Drawing.Size(284, 261)
|
ClientSize = New Size(284, 261)
|
||||||
Me.Name = "BaseForm"
|
Name = "BaseForm"
|
||||||
Me.ResumeLayout(False)
|
|
||||||
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub BaseForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
||||||
|
|
||||||
|
ResumeLayout(False)
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
|
|||||||
@ -85,7 +85,7 @@ Namespace Base
|
|||||||
''' This can be overridden by all inheriting forms to extend the list of panels
|
''' This can be overridden by all inheriting forms to extend the list of panels
|
||||||
''' Panels will be created by PanelManager.
|
''' Panels will be created by PanelManager.
|
||||||
''' </summary>
|
''' </summary>
|
||||||
''' <seealso cref="ClassPanelManager"/>
|
''' <seealso cref="PanelManager"/>
|
||||||
''' <returns>A list of PanelInformation</returns>
|
''' <returns>A list of PanelInformation</returns>
|
||||||
Public Overridable Function GetInitialPanels() As List(Of PanelInfo)
|
Public Overridable Function GetInitialPanels() As List(Of PanelInfo)
|
||||||
Return New List(Of PanelInfo)
|
Return New List(Of PanelInfo)
|
||||||
|
|||||||
@ -6,7 +6,7 @@ Imports DevExpress.XtraGrid
|
|||||||
Imports DigitalData.GUIs.ClientSuite.Base
|
Imports DigitalData.GUIs.ClientSuite.Base
|
||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
|
|
||||||
Public Class ClassPanelManager
|
Public Class PanelManager
|
||||||
Private _logger As Logger
|
Private _logger As Logger
|
||||||
Private _logConfig As LogConfig
|
Private _logConfig As LogConfig
|
||||||
|
|
||||||
|
|||||||
@ -1,67 +0,0 @@
|
|||||||
Imports System.ServiceModel
|
|
||||||
Imports System.Threading
|
|
||||||
Imports System.Timers
|
|
||||||
Imports DigitalData.GUIs.ClientSuite.Base
|
|
||||||
Imports DigitalData.Modules.EDMIAPI.IDBServiceReference
|
|
||||||
Imports DigitalData.Modules.Logging
|
|
||||||
|
|
||||||
Public Class ClassTimer
|
|
||||||
Inherits BaseClass
|
|
||||||
|
|
||||||
Private _Callback As TimerCallback
|
|
||||||
Private _LogConfig As LogConfig
|
|
||||||
Private _Logger As Logger
|
|
||||||
Private _Timer As Timers.Timer
|
|
||||||
Private _Channel As IIDBServiceChannel
|
|
||||||
|
|
||||||
Public Event OnlineChanged As OnlineChangedEventHandler
|
|
||||||
Public Delegate Sub OnlineChangedEventHandler(sender As Object, Online As Boolean)
|
|
||||||
|
|
||||||
Public Sub New(LogConfig As LogConfig, SynchronizingObject As frmMain, HeartbeatInterval As Integer)
|
|
||||||
MyBase.New(LogConfig)
|
|
||||||
|
|
||||||
Try
|
|
||||||
_Channel = My.ChannelFactory.CreateChannel()
|
|
||||||
_Channel.Open()
|
|
||||||
|
|
||||||
_Timer = New Timers.Timer(HeartbeatInterval) With {
|
|
||||||
.SynchronizingObject = SynchronizingObject,
|
|
||||||
.Enabled = True
|
|
||||||
}
|
|
||||||
|
|
||||||
AddHandler _Timer.Elapsed, AddressOf Callback
|
|
||||||
Catch ex As Exception
|
|
||||||
Logger.Error(ex)
|
|
||||||
End Try
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Public Async Sub Callback(sender As Object, e As ElapsedEventArgs)
|
|
||||||
Try
|
|
||||||
Logger.Debug("Checking if Service is up...")
|
|
||||||
|
|
||||||
If _Channel.State = ServiceModel.CommunicationState.Faulted Then
|
|
||||||
_Channel = My.ChannelFactory.CreateChannel()
|
|
||||||
End If
|
|
||||||
|
|
||||||
' Connect to service and send hearbeat request
|
|
||||||
Dim oResult = Await _Channel.HeartbeatAsync()
|
|
||||||
|
|
||||||
Logger.Debug("Service is online")
|
|
||||||
|
|
||||||
SetOnlineState(True)
|
|
||||||
Catch ex As Exception
|
|
||||||
Logger.Debug("Service is offline!")
|
|
||||||
|
|
||||||
SetOnlineState(False)
|
|
||||||
Finally
|
|
||||||
My.Application.Service.LastChecked = DateTime.Now
|
|
||||||
End Try
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub SetOnlineState(NewState As Boolean)
|
|
||||||
If My.Application.Service.Online <> NewState Then
|
|
||||||
My.Application.Service.Online = NewState
|
|
||||||
RaiseEvent OnlineChanged(Me, NewState)
|
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
End Class
|
|
||||||
@ -144,7 +144,6 @@
|
|||||||
<Compile Include="ClassLayout.vb" />
|
<Compile Include="ClassLayout.vb" />
|
||||||
<Compile Include="ClassPanelManager.vb" />
|
<Compile Include="ClassPanelManager.vb" />
|
||||||
<Compile Include="ClassService.vb" />
|
<Compile Include="ClassService.vb" />
|
||||||
<Compile Include="ClassTimer.vb" />
|
|
||||||
<Compile Include="ClassUIConfig.vb" />
|
<Compile Include="ClassUIConfig.vb" />
|
||||||
<Compile Include="ClassUtils.vb" />
|
<Compile Include="ClassUtils.vb" />
|
||||||
<Compile Include="Common\ClassCommon.vb" />
|
<Compile Include="Common\ClassCommon.vb" />
|
||||||
@ -194,6 +193,10 @@
|
|||||||
<SubType>UserControl</SubType>
|
<SubType>UserControl</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Panels\PanelInfo.vb" />
|
<Compile Include="Panels\PanelInfo.vb" />
|
||||||
|
<Compile Include="Workers\HeartbeatWorker.vb" />
|
||||||
|
<Compile Include="Workers\IWorker.vb" />
|
||||||
|
<Compile Include="Workers\WorkerManager.vb" />
|
||||||
|
<Compile Include="Workers\WorkflowWorker.vb" />
|
||||||
<Compile Include="_TEST\DockManagerTest.Designer.vb">
|
<Compile Include="_TEST\DockManagerTest.Designer.vb">
|
||||||
<DependentUpon>DockManagerTest.vb</DependentUpon>
|
<DependentUpon>DockManagerTest.vb</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|||||||
63
GUIs.ClientSuite/Workers/HeartbeatWorker.vb
Normal file
63
GUIs.ClientSuite/Workers/HeartbeatWorker.vb
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
Imports System.Timers
|
||||||
|
Imports DigitalData.GUIs.ClientSuite
|
||||||
|
Imports DigitalData.GUIs.ClientSuite.Base
|
||||||
|
Imports DigitalData.Modules.EDMIAPI.IDBServiceReference
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
Namespace Workers
|
||||||
|
Public Class HeartbeatWorker
|
||||||
|
Inherits BaseClass
|
||||||
|
Implements IWorker
|
||||||
|
|
||||||
|
Private _Channel As IIDBServiceChannel
|
||||||
|
|
||||||
|
Public Event OnlineChanged As OnlineChangedEventHandler
|
||||||
|
Public Delegate Sub OnlineChangedEventHandler(sender As Object, Online As Boolean)
|
||||||
|
|
||||||
|
Public ReadOnly Property Interval As Integer = 4000 Implements IWorker.Interval
|
||||||
|
|
||||||
|
Public Sub New(LogConfig As LogConfig)
|
||||||
|
MyBase.New(LogConfig)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub Setup() Implements IWorker.Setup
|
||||||
|
_Channel = My.ChannelFactory.CreateChannel()
|
||||||
|
_Channel.Open()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Async Sub Callback(manager As WorkerManager, e As ElapsedEventArgs) Implements IWorker.Callback
|
||||||
|
Try
|
||||||
|
Logger.Debug("Checking if Service is up...")
|
||||||
|
|
||||||
|
If _Channel.State = ServiceModel.CommunicationState.Faulted Then
|
||||||
|
_Channel = My.ChannelFactory.CreateChannel()
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Connect to service and send hearbeat request
|
||||||
|
Dim oResult = Await _Channel.HeartbeatAsync()
|
||||||
|
|
||||||
|
Logger.Debug("Service is online")
|
||||||
|
|
||||||
|
SetOnlineState(True)
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Debug("Service is offline!")
|
||||||
|
Logger.Error(ex)
|
||||||
|
|
||||||
|
SetOnlineState(False)
|
||||||
|
Finally
|
||||||
|
My.Application.Service.LastChecked = DateTime.Now
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub Teardown() Implements IWorker.Teardown
|
||||||
|
' TODO: Close channel gracefully
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub SetOnlineState(NewState As Boolean)
|
||||||
|
If My.Application.Service.Online <> NewState Then
|
||||||
|
My.Application.Service.Online = NewState
|
||||||
|
RaiseEvent OnlineChanged(Me, NewState)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
|
|
||||||
12
GUIs.ClientSuite/Workers/IWorker.vb
Normal file
12
GUIs.ClientSuite/Workers/IWorker.vb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
Imports System.Timers
|
||||||
|
|
||||||
|
Namespace Workers
|
||||||
|
Public Interface IWorker
|
||||||
|
ReadOnly Property Interval As Integer
|
||||||
|
|
||||||
|
Sub Setup()
|
||||||
|
Sub Teardown()
|
||||||
|
Sub Callback(manager As WorkerManager, e As ElapsedEventArgs)
|
||||||
|
End Interface
|
||||||
|
End Namespace
|
||||||
|
|
||||||
70
GUIs.ClientSuite/Workers/WorkerManager.vb
Normal file
70
GUIs.ClientSuite/Workers/WorkerManager.vb
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
Imports System.Timers
|
||||||
|
Imports DigitalData.GUIs.ClientSuite.Base
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
|
||||||
|
Namespace Workers
|
||||||
|
Public Class WorkerManager
|
||||||
|
Inherits BaseClass
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' List of workers that will be started.
|
||||||
|
''' </summary>
|
||||||
|
Private WorkerTypes As New List(Of Type) From {
|
||||||
|
GetType(HeartbeatWorker)
|
||||||
|
}
|
||||||
|
Private Workers As New List(Of IWorker)
|
||||||
|
Private TimerList As New List(Of Timer)
|
||||||
|
|
||||||
|
Public Sub New(LogConfig As LogConfig, SyncronizingObject As frmMain)
|
||||||
|
MyBase.New(LogConfig)
|
||||||
|
|
||||||
|
Workers = CreateWorkers()
|
||||||
|
|
||||||
|
For Each oWorker As IWorker In Workers
|
||||||
|
Dim oTimer = New Timer(oWorker.Interval) With {
|
||||||
|
.SynchronizingObject = SyncronizingObject,
|
||||||
|
.Enabled = True
|
||||||
|
}
|
||||||
|
|
||||||
|
AddHandler oTimer.Elapsed, Sub(sender As Object, e As ElapsedEventArgs)
|
||||||
|
Try
|
||||||
|
oWorker.Callback(Me, e)
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Warn("Worker {0} threw an error in callback.", oWorker.GetType.Name)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
TimerList.Add(oTimer)
|
||||||
|
Next
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function GetWorker(Of T)() As T
|
||||||
|
For Each oWorker In Workers
|
||||||
|
If TypeOf oWorker Is T Then
|
||||||
|
Return oWorker
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function CreateWorkers() As List(Of IWorker)
|
||||||
|
Dim oWorkers As New List(Of IWorker)
|
||||||
|
|
||||||
|
For Each oWorkerType In WorkerTypes
|
||||||
|
Try
|
||||||
|
Dim oWorker As IWorker = Activator.CreateInstance(oWorkerType, New Object() {LogConfig})
|
||||||
|
oWorker.Setup()
|
||||||
|
oWorkers.Add(oWorker)
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Warn("Worker {0} threw an error while creating. Skipping.", oWorkerType.Name)
|
||||||
|
Logger.Error(ex)
|
||||||
|
Continue For
|
||||||
|
End Try
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return oWorkers
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
|
|
||||||
29
GUIs.ClientSuite/Workers/WorkflowWorker.vb
Normal file
29
GUIs.ClientSuite/Workers/WorkflowWorker.vb
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Imports System.Timers
|
||||||
|
Imports DigitalData.GUIs.ClientSuite.Base
|
||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
|
||||||
|
Namespace Workers
|
||||||
|
Public Class WorkflowWorker
|
||||||
|
Inherits BaseClass
|
||||||
|
Implements IWorker
|
||||||
|
|
||||||
|
Public Sub New(LogConfig As LogConfig)
|
||||||
|
MyBase.New(LogConfig)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public ReadOnly Property Interval As Integer = 60000 Implements IWorker.Interval
|
||||||
|
|
||||||
|
Public Sub Setup() Implements IWorker.Setup
|
||||||
|
Throw New NotImplementedException()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub Teardown() Implements IWorker.Teardown
|
||||||
|
Throw New NotImplementedException()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub Callback(manager As WorkerManager, e As ElapsedEventArgs) Implements IWorker.Callback
|
||||||
|
Throw New NotImplementedException()
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
|
|
||||||
@ -1,18 +1,16 @@
|
|||||||
Imports DevExpress.XtraBars.Docking2010
|
Imports System.IO
|
||||||
Imports System.ComponentModel
|
Imports System.ComponentModel
|
||||||
Imports DigitalData.GUIs.ClientSuite.ClassLayout
|
Imports DevExpress.XtraBars.Docking2010
|
||||||
Imports System.IO
|
|
||||||
Imports DigitalData.Modules.Logging
|
|
||||||
Imports DigitalData.Modules.License
|
|
||||||
Imports DevExpress.LookAndFeel
|
Imports DevExpress.LookAndFeel
|
||||||
Imports DevExpress.XtraBars.Ribbon
|
Imports DevExpress.XtraBars.Ribbon
|
||||||
Imports DevExpress.XtraBars.Docking
|
Imports DigitalData.GUIs.ClientSuite.ClassLayout
|
||||||
Imports DevExpress.XtraGrid
|
Imports DigitalData.GUIs.ClientSuite.Workers
|
||||||
Imports DevExpress.XtraBars.Docking2010.Views
|
Imports DigitalData.Modules.License
|
||||||
|
|
||||||
Public Class frmMain
|
Public Class frmMain
|
||||||
Private _PanelManager As ClassPanelManager
|
Private _PanelManager As PanelManager
|
||||||
Private _Timer As ClassTimer
|
Private _Timer As ClassTimer
|
||||||
|
Private _WorkerManager As WorkerManager
|
||||||
Private _Loading As Boolean = True
|
Private _Loading As Boolean = True
|
||||||
|
|
||||||
Public Sub New()
|
Public Sub New()
|
||||||
@ -45,12 +43,13 @@ Public Class frmMain
|
|||||||
|
|
||||||
Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
Try
|
||||||
' Initialize Main Timer
|
' Initialize Worker Manager
|
||||||
_Timer = New ClassTimer(My.LogConfig, Me, My.SysConfig.HeartbeatInterval)
|
_WorkerManager = New WorkerManager(My.LogConfig, Me)
|
||||||
AddHandler _Timer.OnlineChanged, AddressOf HandleOnlineChanged
|
Dim oHeartbeatWorker = _WorkerManager.GetWorker(Of HeartbeatWorker)()
|
||||||
|
AddHandler oHeartbeatWorker.OnlineChanged, AddressOf HandleOnlineChanged
|
||||||
|
|
||||||
' Initialize Panel Manager
|
' Initialize Panel Manager
|
||||||
_PanelManager = New ClassPanelManager(My.LogConfig, DocumentManager, DockManager)
|
_PanelManager = New PanelManager(My.LogConfig, DocumentManager, DockManager)
|
||||||
|
|
||||||
' Show Service Status Label
|
' Show Service Status Label
|
||||||
SetOnlineLabel(True)
|
SetOnlineLabel(True)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user