ResulHandlerMSSQL/app/DDWDResultHandler/DDWDResultHandler.vb
2018-08-16 10:58:57 +02:00

194 lines
9.5 KiB
VB.net

Imports System.IO
'Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports Modules.Logging.Logger
Imports Modules.Logging
Public Class DDWDResultHandler
#Region "+++++ Variablen +++++"
Private Shared _windream As DD_WMResulthandler.clsWindream_allgemein
Private Shared _MyLoggerConfig As Modules.Logging.Logger
Public Shared threadRunner As BackgroundWorker
Private Shared Logger As NLog.Logger = NLog.LogManager.GetCurrentClassLogger
Public Shared _PROFIL_ID As Integer
Dim _INTERVALL As Integer
'Variablen für Dateiimporter
#End Region
Public Sub New()
MyBase.New()
InitializeComponent()
End Sub
Protected Overrides Sub OnStart(ByVal args() As String)
' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge
' ausführen, damit der Dienst gestartet werden kann.
'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestartet")
Try
If Not System.Diagnostics.EventLog.SourceExists("DDWMResultHandler") Then
System.Diagnostics.EventLog.CreateEventSource("DDWMResultHandlerr", "DigitalData Log")
End If
Catch ex As Exception
EventLog.WriteEntry("DDWMResultHandler", "ERROR in Creating source:" & ex.ToString(), EventLogEntryType.Error)
End Try
Try
Try
_MyLoggerConfig = New Logger(PathType.CurrentDirectory)
' clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler")
Logger.Info("WindreamResultHandler gestartet - " & Now)
Catch ex As Exception
EventLog.WriteEntry("DDWMResultHandler", "ERROR in CREATING-LOG:" & ex.ToString(), EventLogEntryType.Error)
End Try
If My.Settings.SQLSERVER_CS = String.Empty Then
Logger.Warn("Achtung: Es wurde noch kein Datenbank-ConnectionString hinterlegt.")
Else
If DD_WMResulthandler.clsDatatabase.Init(My.Settings.SQLSERVER_CS) = False Then
Logger.Warn("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.SQLSERVER_CS & "' hergestellt werden!")
Else
' '#Thread für Durchlauf generieren
DDWDResultHandler.threadRunner = New BackgroundWorker()
DDWDResultHandler.threadRunner.WorkerReportsProgress = True
DDWDResultHandler.threadRunner.WorkerSupportsCancellation = True
AddHandler threadRunner.DoWork, AddressOf RUN_THREAD
AddHandler threadRunner.RunWorkerCompleted, AddressOf Thread_Completed
' '### Den Timer generieren
Dim Timer_Durchlauf As New System.Timers.Timer()
'Das Event hinterlegen welches bei "Tick" ausgelöst wird
AddHandler Timer_Durchlauf.Elapsed, AddressOf Thread_Run
' Set the Interval
Timer_Durchlauf.Interval = 60000
'ClassLogger.Add("Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False)
Timer_Durchlauf.Enabled = True
Logger.Info("Timer gestartet")
' Und den Durchlauf das erste Mal starten
threadRunner.RunWorkerAsync()
End If
End If
Catch ex As Exception
EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in OnStart: " & ex.ToString(), EventLogEntryType.Error)
Logger.Error(ex)
End Try
End Sub
Public Shared Sub Thread_Run()
If Not threadRunner.IsBusy Then
threadRunner.RunWorkerAsync()
End If
End Sub
Protected Overrides Sub OnStop()
Try
' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen.
'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestoppt")
Logger.Warn("WindreamResultHandler wurde gestoppt - " & Now)
DD_WMResulthandler.clsDatatabase.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 1 WHERE GUID = " & _PROFIL_ID)
Catch ex As Exception
EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in OnStop: " & ex.ToString(), EventLogEntryType.Error)
End Try
End Sub
Public Shared Sub RUN_THREAD(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Try
Dim notcompleted As Boolean = False
'clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler")
Logger.Info("Start Durchlauf WindreamResultHandler - " & Now)
' Windream instanziieren
_windream = New DD_WMResulthandler.clsWindream_allgemein()
'windream initialisieren
If _windream.Init() = True Then
Logger.Info("windream vollumfänglich initialisiert!")
'Zur sicherheit die DB nochmal initialiseren
If DD_WMResulthandler.clsDatatabase.Init(My.Settings.SQLSERVER_CS) = True Then
Dim DT As DataTable = DD_WMResulthandler.clsDatatabase.Return_Datatable("select * from TBWMRH_KONFIGURATION where GUID = 1")
If DT.Rows.Count = 1 Then
DD_WMResulthandler.clsCURRENT.LOG_ERRORS_ONLY = DT.Rows(0).Item("LOG_ERRORS_ONLY")
_MyLoggerConfig.Debug = Not DT.Rows(0).Item("LOG_ERRORS_ONLY")
If DD_WMResulthandler.clsCURRENT.LOG_ERRORS_ONLY = False Then
Logger.Info("Detaillog is ON!")
End If
DD_WMResulthandler.clsCURRENT.WDLAUFWERK = DT.Rows(0).Item("WD_LAUFWERK")
End If
DT = DD_WMResulthandler.clsDatatabase.Return_Datatable("SELECT GUID FROM TBWMRH_PROFIL WHERE AKTIV = 1 order by REIHENFOLGE")
If DT.Rows.Count > 0 Then
Logger.Info("Anzahl der aktiven Profile: " & DT.Rows.Count.ToString)
For Each DR As DataRow In DT.Rows
_PROFIL_ID = CInt(DR.Item("GUID"))
'Und nun das Profil durchlaufen
Dim initresult = DD_WMResulthandler.clsProfil.Init(_PROFIL_ID)
If initresult = True Then
DD_WMResulthandler.clsProfil.Profil_Durchlauf()
ElseIf initresult = False Then
Logger.Warn("clsProfil konnte nicht initialisiert werden")
notcompleted = True
ElseIf initresult = 0 Then
Logger.Info("initresult: 0")
notcompleted = True
ElseIf initresult = 1 Then
Logger.Info("initresult: 1")
notcompleted = True
End If
Next
Else
Logger.Warn("Keine aktiven Profile vorhanden")
notcompleted = True
End If
DD_WMResulthandler.clsDatatabase.Execute_non_Query("UPDATE TBWMRH_KONFIGURATION SET LAST_TICK = GETDATE() WHERE GUID = 1")
Else
Logger.Warn("clsDatabase konnte nicht initialisiert werden!")
notcompleted = True
End If
Else
Logger.Warn("# Achtung: Windream-Init mit Fehlern beendet")
notcompleted = True
End If
If notcompleted = True Then
End If
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
#Region "*** BackgroundWorker beenden und Abbrechen ***"
Private Shared Sub Thread_Completed(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted
' This event fires when the DoWork event completes
Try
Dim result As String = ""
If e.Cancelled Then
Logger.Warn("Der Process wurde durch den Anwender abgebrochen")
ElseIf e.Error IsNot Nothing Then
Logger.Warn("Fehler bei Durchlauf. Der Vorgang wird abgebrochen: " & e.Error.Message)
End If
'If DI_Verzeichnisloeschen Then
' Try
' My.Computer.FileSystem.DeleteDirectory(DI_Quellordner, FileIO.DeleteDirectoryOption.ThrowIfDirectoryNonEmpty)
' Catch ex As Exception
' ClassLogger.Add("ACHTUNG: Der Vorgang wurde abgeschlossen. Das Quellverzeichnis konnte jedoch nicht gelöscht werden, da sich in dem Ordner noch Dateien/Verzeichnisse befinden.", False)
' End Try
'End If
Catch ex As Exception
EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in Thread_Completed: " & ex.ToString(), EventLogEntryType.Error)
End Try
End Sub
Public Shared Function Thread_Abbrechen()
Try
If DDWDResultHandler.threadRunner.IsBusy Then
DDWDResultHandler.threadRunner.CancelAsync()
End If
Return True
Catch ex As Exception
EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in Thread_Abbrechen: " & ex.ToString(), EventLogEntryType.Error)
Logger.Error(ex)
Return False
End Try
End Function
#End Region
End Class