Monorepo/GUIs.ZooFlow/ApplicationEvents.vb

113 lines
5.1 KiB
VB.net

Imports System.IO.Path
Imports DigitalData.Modules.Config
Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Logging.LogConfig
Imports Microsoft.VisualBasic.ApplicationServices
Namespace My
' Für MyApplication sind folgende Ereignisse verfügbar:
' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung mit einem Fehler beendet wird.
' UnhandledException: Wird bei einem Ausnahmefehler ausgelöst.
' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn die Anwendung bereits aktiv ist.
' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
Partial Friend Class MyApplication
Private Logger As Logger
Private ReadOnly CommonAppDataPath As String = Windows.Forms.Application.CommonAppDataPath
Private ReadOnly StartupPath As String = Windows.Forms.Application.StartupPath
Private ReadOnly Property Prefix
Get
Return My.Settings.UserConfig_Prefix
End Get
End Property
Private ReadOnly Property HasPrefix
Get
Return TypeOf Prefix Is String AndAlso Prefix.Length > 0
End Get
End Property
Public ReadOnly Property UserAppDataPath As String
Get
If HasPrefix Then
Return Combine(Windows.Forms.Application.UserAppDataPath, Prefix)
Else
Return Windows.Forms.Application.UserAppDataPath
End If
End Get
End Property
Public ReadOnly Property LocalUserConfigPath As String
Get
If HasPrefix Then
Return Combine(Windows.Forms.Application.LocalUserAppDataPath, Prefix)
Else
Return Windows.Forms.Application.LocalUserAppDataPath
End If
End Get
End Property
Public Sub App_Startup() Handles Me.Startup
Dim oLogConfig As New LogConfig(LogPath:=PathType.CustomPath,
CustomLogPath:=Combine(LocalUserConfigPath, "Log"),
CompanyName:="Digital Data",
ProductName:="ZooFlow",
FileKeepRangeInDays:=30) With {.Debug = True}
' System Config files like Service Url will be saved in %LocalAppdata% so they will remain on the machine
Dim oConfigManager As New ConfigManager(Of SystemConfig)(oLogConfig, UserAppDataPath, CommonAppDataPath, StartupPath)
' Layout files will be saved in %Appdata% (Roaming) so they will be syncronized with the user profile
Dim oUIConfigPath = IO.Path.Combine(UserAppDataPath, ClassConstants.FOLDER_NAME_LAYOUT)
Dim oUIConfigAlternatePath = IO.Path.Combine(UserAppDataPath, ClassConstants.FOLDER_NAME_LAYOUT)
Dim oUIConfigManager As New ConfigManager(Of UIConfig)(oLogConfig, oUIConfigPath, oUIConfigPath, oUIConfigAlternatePath)
LogConfig = oLogConfig
LogConfig.Debug = True
SystemConfigManager = oConfigManager
UIConfigManager = oUIConfigManager
Logger = LogConfig.GetLogger()
Logger.Debug("Starting ZooFlow...")
If oConfigManager.Config.AppServerConfig <> String.Empty Then
Try
Dim oSplit() As String = oConfigManager.Config.AppServerConfig.ToString.Split(":"c)
Dim oAppServerAddress As String = oSplit(0)
Dim oAppServerPort As Integer = 9000
If oSplit.Length = 2 Then
oAppServerPort = oSplit(1)
End If
My.Application.Service.Client = New Client(LogConfig, oAppServerAddress, oAppServerPort)
If Not IsNothing(My.Application.Service.Client) Then
My.Application.Service.Client.Connect()
End If
Catch ex As Exception
Logger.Warn($"Could not initialize the AppServer: {ex.Message}")
End Try
End If
Dim oCommandLineArgs As New ClassCommandlineArgs(LogConfig)
Dim oArgs = Environment.GetCommandLineArgs().Skip(1).ToList()
oCommandLineArgs.Parse(oArgs)
CommandLineFunction = oCommandLineArgs.FunctionName
CommandLineArguments = oCommandLineArgs.FunctionArgs
End Sub
Public Sub App_Shutdown(sender As Object, e As EventArgs) Handles Me.Shutdown
Logger.Debug("Shutting down Zooflow..")
End Sub
Private Sub MyApplication_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) Handles Me.UnhandledException
Logger.Warn("Unhandled exception occurred: [{0}]", e.Exception.Message)
Logger.Error(e.Exception)
End Sub
End Class
End Namespace