Imports System.IO
'Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.Data.SQLite
Public Class DDWDResultHandler
#Region "+++++ Variablen +++++"
    Public Shared _windream As New clsWindream_allgemein
    Public Shared threadRunner As BackgroundWorker

    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
                clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler")
                clsLogger.Add(" ", False)
                clsLogger.Add("## WindreamResultHandler gestartet - " & Now & " ## ", False)
            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
                clsLogger.Add("Achtung: Es wurde noch kein Datenbank-ConnectionString hinterlegt.", True)
            Else
                If clsDatatabase.Init = False Then
                    clsLogger.Add("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.SQLSERVER_CS & "' hergestellt werden!", True)
                    clsLogger.WriteLog()
                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
                    clsLogger.AddDetailLog("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)
            clsLogger.AddError(ex.Message, "OnStart")
        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")
            clsLogger.Add("", False)
            clsLogger.Add("## WindreamResultHandler wurde gestoppt - " & Now & " ## ", False)
            clsDatatabase.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 1 WHERE GUID = " & _PROFIL_ID)
            clsLogger.Add("", False)
            clsLogger.WriteLog()
        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")
            clsLogger.Add("", False)
            clsLogger.Add("## Start Durchlauf WindreamResultHandler - " & Now & " ## ", False)
            clsLogger.Add("", False)
            'windream initialisieren
            If _windream.Init() = True Then
                clsLogger.AddDetailLog("windream vollumfänglich initialisiert!")
                'Zur sicherheit die DB nochmal initialiseren
                If clsDatatabase.Init() = True Then
                    Dim DT As DataTable = clsDatatabase.Return_Datatable("select * from TBWMRH_KONFIGURATION where GUID = 1")
                    If DT.Rows.Count = 1 Then
                        LOG_ERRORS_ONLY = DT.Rows(0).Item("LOG_ERRORS_ONLY")
                        If LOG_ERRORS_ONLY = False Then
                            clsLogger.Add("Detaillog is ON!", False)
                        End If
                        WDLAUFWERK = DT.Rows(0).Item("WD_LAUFWERK")

                    End If
                    DT = clsDatatabase.Return_Datatable("SELECT GUID FROM TBWMRH_PROFIL WHERE AKTIV = 1 order by REIHENFOLGE")
                    If DT.Rows.Count > 0 Then
                            clsLogger.AddDetailLog("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 = clsProfil.Init(_PROFIL_ID)
                                If initresult = True Then
                                    clsLogger.WriteLog()
                                    clsProfil.Profil_Durchlauf()
                                ElseIf initresult = False Then
                                    clsLogger.Add("clsProfil konnte nicht initialisiert werden", True, "RUN_THREAD")
                                    notcompleted = True
                                ElseIf initresult = 0 Then
                                    clsLogger.AddDetailLog("initresult: 0")
                                    notcompleted = True
                                ElseIf initresult = 1 Then
                                    clsLogger.AddDetailLog("initresult: 1")
                                    notcompleted = True
                                End If
                            Next
                        Else
                            clsLogger.Add("- Keine aktiven Profile vorhanden", False)
                            notcompleted = True
                        End If
                    clsDatatabase.Execute_non_Query("UPDATE TBWMRH_KONFIGURATION SET LAST_TICK = GETDATE() WHERE GUID = 1")
                Else
                    clsLogger.Add("- clsDatabase konnte nicht initialisiert werden!", False)
                    notcompleted = True
                End If
            Else
                clsLogger.Add("# Achtung: Windream-Init mit Fehlern beendet", False)
                notcompleted = True
            End If
            If notcompleted = True Then
                clsLogger.WriteLog()
            End If
        Catch ex As Exception
            clsLogger.AddError(ex.Message, "RUN_THREAD")
        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
                clsLogger.Add("## Der Process wurde durch den Anwender abgebrochen", False)
                clsLogger.WriteLog()
            ElseIf e.Error IsNot Nothing Then
                clsLogger.Add("Fehler bei Durchlauf. Der Vorgang wird abgebrochen.", True, "Thread_Completed")
                clsLogger.Add(e.Error.Message, True, "Thread_Completed")
                clsLogger.WriteLog()
            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)
            clsLogger.AddError(ex.Message, "Thread_Abbrechen")
            Return False
        End Try
    End Function
#End Region
End Class
