Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports DevExpress.ExpressApp.Win
Imports Nuvolar.Module.Win
Imports DevExpress.ExpressApp
Imports DevExpress.Xpo
Imports DevExpress.Data.Filtering
Imports DevExpress.XtraBars.Alerter
Imports DevExpress.ExpressApp.Utils
Imports DevExpress.ExpressApp.Xpo
Imports Nuvolar.Module.GeneralFunction
Imports System.Data.SqlClient
Imports System.IO
Imports System.Net
Imports Newtonsoft.Json
Imports Nuvolar.Module
Imports System.Text

Partial Public Class NuvolarWindowsFormsApplication
    Inherits WinApplication
    Public Sub New()
        InitializeComponent()
    End Sub

    Private Sub NuvolarWindowsFormsApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles MyBase.DatabaseVersionMismatch
#If EASYTEST Then
        e.Updater.Update()
        e.Handled = True
#Else
        If System.Diagnostics.Debugger.IsAttached Then
            e.Updater.Update()
            e.Handled = True
        Else
            Throw New InvalidOperationException( _
             "The application cannot connect to the specified database, because the latter doesn't exist or its version is older than that of the application." & vbCrLf & _
             "This error occurred  because the automatic database update was disabled when the application was started without debugging." & vbCrLf & _
             "To avoid this error, you should either start the application under Visual Studio in debug mode, or modify the " & _
             "source code of the 'DatabaseVersionMismatch' event handler to enable automatic database update, " & _
             "or manually create a database using the 'DBUpdater' tool." & vbCrLf & _
             "Anyway, refer to the 'Update Application and Database Versions' help topic at http://www.devexpress.com/Help/?document=ExpressApp/CustomDocument2795.htm " & _
             "for more detailed information. If this doesn't help, please contact our Support Team at http://www.devexpress.com/Support/Center/")
        End If
#End If
    End Sub
    Protected Overrides Function GetTraceLogDirectory() As String
        Return MyBase.GetTraceLogDirectory()
    End Function
    Protected Overrides Function CreateLogonWindowControllers() As System.Collections.Generic.List(Of DevExpress.ExpressApp.Controller)
        Dim _result As System.Collections.Generic.List(Of DevExpress.ExpressApp.Controller)
        Dim _CreateLogonWindowsControllerVC As New CreateLogonWindowsControllerVC
        _result = MyBase.CreateLogonWindowControllers()
        _result.Add(_CreateLogonWindowsControllerVC)
        Return _result
    End Function
    Protected Overrides Sub CreateDefaultObjectSpaceProvider(args As CreateCustomObjectSpaceProviderEventArgs)
        args.ObjectSpaceProvider = New XPObjectSpaceProvider(args.ConnectionString, args.Connection, True)
    End Sub
    Protected Overrides Sub OnLoggedOn(args As DevExpress.ExpressApp.LogonEventArgs)
        MyBase.OnLoggedOn(args)
        Dim _onew As Xpo.XPObjectSpace = Me.ObjectSpaceProvider.CreateObjectSpace()
        Dim _uow As New UnitOfWork(_onew.Session.DataLayer)
        Dim _User As DevExpress.Persistent.BaseImpl.User = _onew.FindObject(Of DevExpress.Persistent.BaseImpl.User)(CriteriaOperator.Parse("Oid=?", SecuritySystem.CurrentUserId))
        Nuvolar.Module.LockingModule.ReleaseAllLocking(_uow, _User)

        '// Itt sikeres a belépés !!!
        SISPushInfoSSL()
    End Sub
    
    Protected Overrides Sub OnLoggingOff(args As DevExpress.ExpressApp.LoggingOffEventArgs)
        MyBase.OnLoggingOff(args)
        Dim _onew As Xpo.XPObjectSpace = Me.ObjectSpaceProvider.CreateObjectSpace()
        Dim _uow As New UnitOfWork(_onew.Session.DataLayer)
        Dim _User As DevExpress.Persistent.BaseImpl.User = _onew.FindObject(Of DevExpress.Persistent.BaseImpl.User)(CriteriaOperator.Parse("Oid=?", SecuritySystem.CurrentUserId))
        Nuvolar.Module.LockingModule.ReleaseAllLocking(_uow, _User)
    End Sub
    Private Sub SISPushInfoSSL()
        Dim _PushInfoClass As New PushInfoClass
        Dim _InfoString As String = ""
        Try
            Dim _onew As Xpo.XPObjectSpace = Me.ObjectSpaceProvider.CreateObjectSpace()
            Dim _uow As New UnitOfWork(_onew.Session.DataLayer)
            Dim _User As DevExpress.Persistent.BaseImpl.User = _onew.FindObject(Of DevExpress.Persistent.BaseImpl.User)(CriteriaOperator.Parse("Oid=?", SecuritySystem.CurrentUserId))

            _PushInfoClass.UserName = _User.UserName
            _PushInfoClass.FullName = _User.FullName

            _InfoString = JsonConvert.SerializeObject(_PushInfoClass)
            _InfoString = AESEncrypt(_InfoString, "HrX12!!0Zm7764W2", "vXm657YS+!0@mmT")
            _InfoString = Convert.ToBase64String(Encoding.UTF8.GetBytes(_InfoString))

            Dim _url = "http://sis-r.hu/SISChat/SISPushInfoSSL.ashx?id=" & _InfoString
            Dim _request As HttpWebRequest = TryCast(WebRequest.Create(_url), HttpWebRequest)
            Dim _response As HttpWebResponse = TryCast(_request.GetResponse, HttpWebResponse)
            Dim _reader As StreamReader = New StreamReader(_response.GetResponseStream())
            _InfoString = _reader.ReadToEnd

            GLOBAL_ActivityID = _InfoString
        Catch ex As Exception

        End Try
    End Sub

End Class
Public Class PushInfoClass
    Property Company As String
    Property ComputerName As String
    Property ComputerIPAddress As String
    Property ComputerUserName As String
    Property ComputerUserDomainName As String
    Property UserName As String
    Property FullName As String
    Sub New()
        Company = GLOBAL_Company
        ComputerName = Environment.MachineName
        ComputerIPAddress = GetIPv4Address()
        ComputerUserName = Environment.UserName
        ComputerUserDomainName = Environment.UserDomainName
    End Sub
    Private Function GetIPv4Address() As String
        Dim _GetIPv4Address As String = ""
        GetIPv4Address = String.Empty
        Dim strHostName As String = System.Net.Dns.GetHostName()
        Dim iphe As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(strHostName)

        For Each ipheal As System.Net.IPAddress In iphe.AddressList
            If ipheal.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork Then
                If _GetIPv4Address = "" Then
                    _GetIPv4Address = ipheal.ToString()
                Else
                    _GetIPv4Address += ";" + ipheal.ToString()
                End If
            End If
        Next
        Return _GetIPv4Address
    End Function

End Class

