TCPListen Verbindungen Parallel verarbeiten nicht Sequentiell

  • Hallo,

    ich habe ein Script geschrienen in dem ich mit TCP Verbindungen Arbeite,

    Spoiler anzeigen
    [autoit]

    TCPStartup()
    If @error Then Exit
    $MainSocket = TCPListen($szIPADDRESS, $nPORT, 255)
    If $MainSocket = -1 Then Exit

    [/autoit]


    Nun möchte ich nicht mit einer Schleife jede einzelne Connection bearbeiten sonder alle nahezu gleichzeitig.

    Dazu habe ich erst mal _Timer_SetTimer($hGUI, 100, "_LookConnect") Verwendet und die Funktion _LookConnect aufgerufen

    Spoiler anzeigen
    [autoit]

    Func _LookConnect($hWnd, $Msg, $iIDTimer, $dwTime)
    #forceref $hWnd, $Msg, $iIDTimer, $dwTime
    Local $ConnectedSocket = -1
    $ConnectedSocket = TCPAccept($MainSocket)
    If $ConnectedSocket > 0 Then
    _connected($ConnectedSocket)
    EndIf
    EndFunc ;==>_LookConnect

    [/autoit]

    Wenn die Funktion eine Verbindung findet wird die Funktion für die Verbindung gestartet.
    Funktionert auch wunderbar

    Aber wenn ich das Script als Dienst starte Funktioniert das nicht mehr.
    Ich nehme an das die GUI als Dienst nicht Funktioniert und Somit auch der Timer nicht Funktioniert.

    Hat jemand eine Idee?
    Ich hatte noch einen anderen Ansatz verfolgt:

    ist es möglich einen Event im OS zu Verankern der eine Funktion im Script aufruft wenn er Ausgelöst wird so könnte in _LookConnect geprüft werden ob eine Verbindung besteht und wenn ja wird der Event gefeuert.

    mit _WinAPI_CreateEvent und _WinAPI_SetEvent wäre so mein Ansatz aber ich habe das Konstrukt noch nicht so geblickt.

    CU Alex

  • Warum nicht mit einer Schleife?
    1. Ist es sehr unwahrscheinlich das alle Clients genau zu selben Zeit connecten (wenn du vorhast ein Server für viele Clients zu programmieren vergess Autoit besser gleich)
    2. Könntest du obwohl ich davon nichts halt Adlib benutzen
    3. Bleib bei der Schleife und versuch dein Script zu optimieren

  • Na ja mit dem Timer hat das eigentlich Wunderbar Fuktioniert. Ich denke wenn es möglich wäre wie bei TESTTEST.au3 Script in der hilfe Autoit Selbst als Objekt zu laden und Events zu feuern würde das gehen. Ich habe mal ein Projekt realisiert welches den Explorer überwacht und die Zeiten Mitprotokoliert. das leuft auch asyncron. Auf die selbe weise könnte das hier auch gehen.