diff --git a/EDMI_FILE_OPs/Document.vb b/EDMI_FILE_OPs/Document.vb
index d5363bcb..d3f57042 100644
--- a/EDMI_FILE_OPs/Document.vb
+++ b/EDMI_FILE_OPs/Document.vb
@@ -1,5 +1,4 @@
Imports DigitalData.Modules.Logging
-Imports DigitalData.Modules.EDMIAPI.EDMIServiceReference
Imports DigitalData.Modules.EDMIAPI.IDBServiceReference
Imports System.ServiceModel
Imports System.IO
diff --git a/GUIs.ClientSuite/Base/BaseForm.vb b/GUIs.ClientSuite/Base/BaseForm.vb
index 8bde5fd9..3287035d 100644
--- a/GUIs.ClientSuite/Base/BaseForm.vb
+++ b/GUIs.ClientSuite/Base/BaseForm.vb
@@ -15,14 +15,9 @@ Namespace Base
Public Class BaseForm
Inherits Form
- Private ReadOnly _Logger As Logger
Private ReadOnly _ErrorHandler As ClassErrorHandler
Protected ReadOnly Property Logger As Logger
- Get
- Return _Logger
- End Get
- End Property
Public Sub New()
' Get the full name of the inheriting form
@@ -30,8 +25,8 @@ Namespace Base
Dim oClassName = [GetType]().FullName
' My.LogConfig is undefined in the designer
- _Logger = My.LogConfig?.GetLogger(oClassName)
- _ErrorHandler = New ClassErrorHandler(_Logger)
+ Logger = My.LogConfig?.GetLogger(oClassName)
+ _ErrorHandler = New ClassErrorHandler(Logger)
' When you add something, be careful if it
' depends on a global var like My.LogConfig
@@ -43,18 +38,14 @@ Namespace Base
End Sub
Private Sub InitializeComponent()
- Me.SuspendLayout()
+ SuspendLayout()
'
'BaseForm
'
- Me.ClientSize = New System.Drawing.Size(284, 261)
- Me.Name = "BaseForm"
- Me.ResumeLayout(False)
-
- End Sub
-
- Private Sub BaseForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+ ClientSize = New Size(284, 261)
+ Name = "BaseForm"
+ ResumeLayout(False)
End Sub
End Class
End Namespace
diff --git a/GUIs.ClientSuite/Base/BaseRibbonForm.vb b/GUIs.ClientSuite/Base/BaseRibbonForm.vb
index 20a32fa4..290af614 100644
--- a/GUIs.ClientSuite/Base/BaseRibbonForm.vb
+++ b/GUIs.ClientSuite/Base/BaseRibbonForm.vb
@@ -85,7 +85,7 @@ Namespace Base
''' This can be overridden by all inheriting forms to extend the list of panels
''' Panels will be created by PanelManager.
'''
- '''
+ '''
''' A list of PanelInformation
Public Overridable Function GetInitialPanels() As List(Of PanelInfo)
Return New List(Of PanelInfo)
diff --git a/GUIs.ClientSuite/ClassPanelManager.vb b/GUIs.ClientSuite/ClassPanelManager.vb
index 30a753a8..123e831e 100644
--- a/GUIs.ClientSuite/ClassPanelManager.vb
+++ b/GUIs.ClientSuite/ClassPanelManager.vb
@@ -6,7 +6,7 @@ Imports DevExpress.XtraGrid
Imports DigitalData.GUIs.ClientSuite.Base
Imports DigitalData.Modules.Logging
-Public Class ClassPanelManager
+Public Class PanelManager
Private _logger As Logger
Private _logConfig As LogConfig
diff --git a/GUIs.ClientSuite/ClassTimer.vb b/GUIs.ClientSuite/ClassTimer.vb
deleted file mode 100644
index 48d2d61f..00000000
--- a/GUIs.ClientSuite/ClassTimer.vb
+++ /dev/null
@@ -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
diff --git a/GUIs.ClientSuite/ClientSuite.vbproj b/GUIs.ClientSuite/ClientSuite.vbproj
index 6f126011..61088e0f 100644
--- a/GUIs.ClientSuite/ClientSuite.vbproj
+++ b/GUIs.ClientSuite/ClientSuite.vbproj
@@ -144,7 +144,6 @@
-
@@ -194,6 +193,10 @@
UserControl
+
+
+
+
DockManagerTest.vb
diff --git a/GUIs.ClientSuite/Workers/HeartbeatWorker.vb b/GUIs.ClientSuite/Workers/HeartbeatWorker.vb
new file mode 100644
index 00000000..7bba52ba
--- /dev/null
+++ b/GUIs.ClientSuite/Workers/HeartbeatWorker.vb
@@ -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
+
diff --git a/GUIs.ClientSuite/Workers/IWorker.vb b/GUIs.ClientSuite/Workers/IWorker.vb
new file mode 100644
index 00000000..9405ca10
--- /dev/null
+++ b/GUIs.ClientSuite/Workers/IWorker.vb
@@ -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
+
diff --git a/GUIs.ClientSuite/Workers/WorkerManager.vb b/GUIs.ClientSuite/Workers/WorkerManager.vb
new file mode 100644
index 00000000..f228d535
--- /dev/null
+++ b/GUIs.ClientSuite/Workers/WorkerManager.vb
@@ -0,0 +1,70 @@
+Imports System.Timers
+Imports DigitalData.GUIs.ClientSuite.Base
+Imports DigitalData.Modules.Logging
+
+Namespace Workers
+ Public Class WorkerManager
+ Inherits BaseClass
+
+ '''
+ ''' List of workers that will be started.
+ '''
+ 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
+
diff --git a/GUIs.ClientSuite/Workers/WorkflowWorker.vb b/GUIs.ClientSuite/Workers/WorkflowWorker.vb
new file mode 100644
index 00000000..dc2a9fc1
--- /dev/null
+++ b/GUIs.ClientSuite/Workers/WorkflowWorker.vb
@@ -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
+
diff --git a/GUIs.ClientSuite/frmMain.vb b/GUIs.ClientSuite/frmMain.vb
index 1c7662a9..a175c282 100644
--- a/GUIs.ClientSuite/frmMain.vb
+++ b/GUIs.ClientSuite/frmMain.vb
@@ -1,18 +1,16 @@
-Imports DevExpress.XtraBars.Docking2010
+Imports System.IO
Imports System.ComponentModel
-Imports DigitalData.GUIs.ClientSuite.ClassLayout
-Imports System.IO
-Imports DigitalData.Modules.Logging
-Imports DigitalData.Modules.License
+Imports DevExpress.XtraBars.Docking2010
Imports DevExpress.LookAndFeel
Imports DevExpress.XtraBars.Ribbon
-Imports DevExpress.XtraBars.Docking
-Imports DevExpress.XtraGrid
-Imports DevExpress.XtraBars.Docking2010.Views
+Imports DigitalData.GUIs.ClientSuite.ClassLayout
+Imports DigitalData.GUIs.ClientSuite.Workers
+Imports DigitalData.Modules.License
Public Class frmMain
- Private _PanelManager As ClassPanelManager
+ Private _PanelManager As PanelManager
Private _Timer As ClassTimer
+ Private _WorkerManager As WorkerManager
Private _Loading As Boolean = True
Public Sub New()
@@ -45,12 +43,13 @@ Public Class frmMain
Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
Try
- ' Initialize Main Timer
- _Timer = New ClassTimer(My.LogConfig, Me, My.SysConfig.HeartbeatInterval)
- AddHandler _Timer.OnlineChanged, AddressOf HandleOnlineChanged
+ ' Initialize Worker Manager
+ _WorkerManager = New WorkerManager(My.LogConfig, Me)
+ Dim oHeartbeatWorker = _WorkerManager.GetWorker(Of HeartbeatWorker)()
+ AddHandler oHeartbeatWorker.OnlineChanged, AddressOf HandleOnlineChanged
' Initialize Panel Manager
- _PanelManager = New ClassPanelManager(My.LogConfig, DocumentManager, DockManager)
+ _PanelManager = New PanelManager(My.LogConfig, DocumentManager, DockManager)
' Show Service Status Label
SetOnlineLabel(True)