1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. oetzn

Beiträge von oetzn

  • CryptChat

    • oetzn
    • 11. Januar 2010 um 21:55

    zu dem datenübertragungsproblem,

    Wieso nicht den Port des Chatclients verwenden?

    Oder kann jeweils nur 1 Anwendung 1 Port nützen, das wäre mir neu^^

    Dann einfach IP's austauschen, der der senden will fungiert als Server, etc...

  • CryptChat

    • oetzn
    • 10. Januar 2010 um 19:19

    Wow,
    Respekt, das Skript hats echt in sich^^

    Habs jetzt nur mal so überflogen, aber für das was es kann, ist es ziemlich kurz

    gute Arbeit würd ich sagen ;)

    Hab mich auch mal an einem Chat probiert (nicht jetzt, schon länger her) LINK
    Hat aber bissl mehr zeilen xD, aber auch mehr Funktionen (keine doppelten Nicknames, Admin-Kick / Ban, etc)
    Ich hab meines an ein paar Stellen allerdings sehr kompliziert geschrieben (finde ich zumindest, lasse mich gerne anderweitig belehren)
    Außerdem benutze ich den GuiOnEventMode..

  • TCP Multichat Client+Server

    • oetzn
    • 10. Januar 2010 um 19:15

    So, mal wieder weitergeskripted und ich denk das wird jetzt die letzte Version sein...(vorraussichtlich)
    Was eventuell noch kommen wird ist ein Flüster-Funktion und eine votekick-Funktion!

    ~~ Server ~~

    * Admin kann User bannen: Perm/Temp

    ~~ Client ~~

    * Logfile erweitert
    * GUI rezisefähig

    Im Anhang ist der Sourcecode und den 1.Post update ich auch mal.

  • TCP Multichat Client+Server

    • oetzn
    • 24. Dezember 2009 um 16:23

    So, mal wieder den Thread hochpushen :P

    Ne Spaß beiseite, hab ne neue Version :D

    Update siehe 1.Post
    Ich häng die Dateien auch in diesem Post an!

    Neuerungen:

    ~~ Server ~~

    * Admin kann mitchatten
    * Kommandobox entfernt (Kommandos jetzt in den Admin-Chat schreiben)
    * Ein paar kleine Bugs entfernt

    ~~ Client ~~

    * Neues Pattern für die IP
    * Andere Clients werden angezeigt
    * GUI überarbeitet
    * Style änderbar (Schriftart / Schriftgröße / Schriftfarbe)

    Dateien

    Multichat.zip 865,12 kB – 477 Downloads
  • Shoutbox Chat

    • oetzn
    • 16. Dezember 2009 um 18:32

    hmm..
    Ich weiß is veraltet, aber ich wollte mich einfach bedanken xD
    Wollte so etwas schon fast selber schreiben, war aber dann zu beschäftigt.

  • Rechnen mit AutoIt

    • oetzn
    • 15. Dezember 2009 um 18:02

    Ich hab auch mal nen Rechner gebastelt, wenn du willst kannst du ihn haben :D
    Is im GUIOnEventMode geschrieben:

    Viel Spaß ;)

    EDIT: Hab ihn grad noch überarbeitet, ist jetzt um 70 Zeilen kürzer :P

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=E:\Thomas\Programme\Programmieren\AutoIT v3\AutoIT-Skripte\Rechner\Rechner.kxf
    $Form1_1 = GUICreate("Rechner", 281, 253, 191, 129)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $Group1 = GUICtrlCreateGroup("Ziffern", 8, 64, 129, 185)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Button1 = GUICtrlCreateButton("1", 16, 88, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button2 = GUICtrlCreateButton("2", 56, 88, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button3 = GUICtrlCreateButton("3", 96, 88, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button4 = GUICtrlCreateButton("4", 16, 128, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button5 = GUICtrlCreateButton("5", 56, 128, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button6 = GUICtrlCreateButton("6", 96, 128, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button7 = GUICtrlCreateButton("7", 16, 168, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button8 = GUICtrlCreateButton("8", 56, 168, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button9 = GUICtrlCreateButton("9", 96, 168, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button10 = GUICtrlCreateButton("0", 56, 208, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button11 = GUICtrlCreateButton(".", 16, 208, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlSetOnEvent(-1, "_SetData")
    $Group2 = GUICtrlCreateGroup("Rechnugsarten", 144, 64, 129, 185)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Button12 = GUICtrlCreateButton("-", 152, 88, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button13 = GUICtrlCreateButton("+", 152, 128, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button14 = GUICtrlCreateButton("*", 152, 168, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button15 = GUICtrlCreateButton("/", 152, 208, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button16 = GUICtrlCreateButton("(", 192, 88, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button17 = GUICtrlCreateButton(")", 232, 88, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button18 = GUICtrlCreateButton("Sqrt", 192, 128, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button19 = GUICtrlCreateButton("1/x", 192, 208, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button21 = GUICtrlCreateButton("=", 232, 208, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button20 = GUICtrlCreateButton("x²", 192, 168, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button22 = GUICtrlCreateButton("DEL", 232, 128, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    $Button23 = GUICtrlCreateButton("CL", 232, 168, 35, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, "_SetData")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Output", 8, 0, 265, 65)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Input1 = GUICtrlCreateInput("", 16, 24, 249, 31, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _SetData()
    Switch @GUI_CtrlId
    Case $Button18
    GUICtrlSetData($Input1, Sqrt(Execute(GUICtrlRead($Input1))))
    Case $Button19
    GUICtrlSetData($Input1, (1 / (Execute(GUICtrlRead($Input1)))))
    Case $Button20
    GUICtrlSetData($Input1, Execute(GUICtrlRead($Input1) * Execute(GUICtrlRead($Input1))))
    Case $Button21
    GUICtrlSetData($Input1, Execute(GUICtrlRead($Input1)))
    Case $Button22
    GUICtrlSetData($Input1, StringTrimRight(GUICtrlRead($Input1), 1))
    Case $Button23
    GUICtrlSetData($Input1, "")
    Case Else
    GUICtrlSetData($Input1, GUICtrlRead($Input1) & GUICtrlRead(@GUI_CtrlId))
    EndSwitch
    EndFunc ;==>_SetData

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • TCP Multichat Client+Server

    • oetzn
    • 13. Dezember 2009 um 16:59

    hmm..
    Hast du ne Firewall aktiviert? - wenn ja dann schalt sie mal ab und probier dann nochmal verbinden
    Ich hab gestern noch einiges herumgeschraubt am Programm aber bin zurzeit nicht zuhause, und kann es daher nicht uppn (Skript nicht am Laptop -.-)

    Zu deinem Problem mit der Kommandobox; Hab schon eine Idee an was das liegen könnte ich such mir den Teil oben kurz raus und post ihn dann.
    Moment ;)

    EDIT:

    Ersetz mal die Funktion _Exit mit folgender Funktion, dann müsste es klappen..

    [autoit]


    Func _Exit()
    If TrayItemGetText(@TRAY_ID) = "Beenden" Then Exit
    If TrayItemGetText(@TRAY_ID) = "Server neu starten" Then
    $bRestart = True
    Exit
    ElseIf StringLower($sCmd) = "/restart" Then
    $bRestart = True
    Exit
    ElseIf GUICtrlRead(@GUI_CtrlId) = "Server neu starten" Then
    $bRestart = True
    Exit
    EndIf
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    EDIT 2 xD

    Hatt das Skript doch noch auf meim USB-Stick ;)
    Ich Update mal den 1.Post.
    Hab einiges hinzugefügt/verbessert etc

    Neuerungen:

    ~~ Server ~~
    - Kommandoboxbefehle nun ohne "/" (Quit, Restart, Kick "Clientname", sayall "Text")
    - System mit Client verbindet sich/trennt Verbindung überarbeitet: Die Nachricht wird nicht einfach an alle verschickt, sondern es wird ein Servercommand an alle Clients versendet (//UserQuit(Username)) Ich weiß unbedeutend, aber ich wollts erwähnen *gg*
    - Log-File bisschen verändert (Serverstartup-, Servershutdownmeldungen hinzugefügt)

    ~~ Client ~~
    - NEUE GUI xD (Andere Clients werden angezeigt)
    - Ini-Datei in der die letzte IP und der letzte Name gespeichert wird

    Noch vorhandene Probleme:
    Ich brauch noch ein 'richtiges' Pattern für eine IP (StringRegExp), mein derzeitige lässt es zu, dass HINTER der IP noch jedes mögliche Zeichen steht -.-
    Also wer Lust hat, kann eins basteln xD (Ich werd den jenigen natürlich erwähnen!)

    MfG oetzn

  • If Abfrage die auf einer grafischen Ausgabe beruht- alternativ If abfrage durch Auslesen des Speichers(_MemoryRead)

    • oetzn
    • 12. Dezember 2009 um 17:29

    dann würde ich das nicht über Memory lösen,
    hat WoW sowas wie einen 'Cheat-Schutz' ? hab noch nie wow gespielt, daher die frage xD
    Die könnte dir da nämlich dreinreden wenn du Memory lesen/schreiben willst xD

    zu deinem Relog-Problem, einfach mal schauen, mit AutoIt Window Info Tool, welches Pixel schwarz wird wenn du dich ausloggst und dann einfach

    [autoit][/autoit][autoit][/autoit][autoit]

    If Pixelgetcolor($x,$y) = $colour_schwarz Then Relog()

    [/autoit][autoit][/autoit][autoit][/autoit]

    so ausm kopf geschrieben xD

  • If Abfrage die auf einer grafischen Ausgabe beruht- alternativ If abfrage durch Auslesen des Speichers(_MemoryRead)

    • oetzn
    • 12. Dezember 2009 um 17:18

    naja das mit der Grafik wie stellst du dir das vor?

    Du kannst es mit PixelGetColor versuchen, das gibt dir die Farbe zurück die ein Pixel hat.
    Das bringt dir insofern was, da du vorher mit AutoIt Window Info die Farbe des Pixels herausfinden kannst, danach musst du sie nur noch abgleichen (Für Syntax einfach die Hilfe fragen ;) )
    Und das mit Speicher, Google mal nach NomadMemory.au3; mit der kannst du Speicheradressen auslesen, schreiben etc..
    Da machst du das selbe wie beim Pixel nur das du halt statt mit 'Window Info' über ein Testskript den Wert in der Speicheradresse auslesen musst.

    Noch Fragen?

    EDIT: Ach verdammt zu langsam -.-
    Ach ja, das mit dem Bot hätt ich fast vergessen xD

  • Html Datei online stellen

    • oetzn
    • 10. Dezember 2009 um 18:43

    Muss es denn über Internet sein?
    Ist der PC nicht im lokalen Netzwerk? - Wenn ja dann einfach TCPSend ;)

  • TCP Multichat Client+Server

    • oetzn
    • 9. Dezember 2009 um 20:56

    Update gemacht ;)

    Neuerungen:

    ~~ Server ~~
    - Ein Client wird gekickt, wenn er einen Namen benutzt der schon in Verwendung ist.
    - Clients können generell gekickt werden.
    - Kommandobox hinzugefügt (/Quit, /Restart, /Kick "Clientname")
    - Log-File (Chat)
    - Ein paar kleine, für den Anwender nicht bedeutende, Änderungen ;)
    - Zulassungsabfrage, wenn ein Client connected

    ~~ Client ~~
    - TrayItem(Beenden) hinzugefügt
    - Den $ES_READONLY-Style vom ListView entfernt => Spalten kann man jetzt nach belieben vergrößern
    - GUI vom Chat wird nicht sofort geöffnet, zuerst wird gewartet, ob man überhaupt connecten darf (Siehe Server)
    - Meldung, wenn die Verbindung zum Server verloren ging
    - Eigener Nickname wird in den Titel des Chats eingefügt

    So, das wars eigentlich ;)

    Hat noch jemand Wünsche oder Anliegen? - Mir persönlich gefällt die Art der GUI des Clients nicht sehr, habt ihr Vorschläge für eine bessere?
    Es kann gerne jemand ne neue GUI erstellen, wenn er möchte. Ich werd ihn/sie dann natürlich im Skript erwähnen ;)

  • MsgBox an verschiedenen Stellen

    • oetzn
    • 8. Dezember 2009 um 20:37

    machs doch mit Switch - Endswitch und

    [autoit]


    $hGui1 = GUICreate("GUI1")
    GUICtrlCreateButton("OK", ....)
    GUICtrlSetOnEvent(-1, "ButtonClick")
    $hGui2 = GUICreate("GUI2")
    GUICtrlSetOnEvent(-1, "ButtonClick")
    $hGui3 = GUICreate("GUI3")
    GUICtrlSetOnEvent(-1, "ButtonClick")
    $hGui4 = GUICreate("GUI4")
    GUICtrlSetOnEvent(-1, "ButtonClick")

    [/autoit][autoit][/autoit][autoit]

    While 1
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func ButtonClick()
    Switch @GUI_WinHandle
    Case $hGui1
    GUISetState(@SW_HIDE, $hGui1)
    Case $hGui2
    GUISetState(@SW_HIDE, $hGui2)
    Case $hGui3
    GUISetState(@SW_HIDE, $hGui3)
    Case $hGui4
    GUISetState(@SW_HIDE, $hGui4)
    EndSwitch
    EndFunc ;==>ButtonClick

    [/autoit]

    Sollte eigentlich so funktionieren..


    EDIT: Ach ne zu langsam -.-

  • TCP Multichat Client+Server

    • oetzn
    • 8. Dezember 2009 um 18:06

    ok, ja so gehts natürlich auch..

    vl bau ich das ein, aber derzeit bin ich mit meiner Lösung auch zufrieden, den in dem Fall ist der Mensch klüger als die Au3Check.exe xD
    da ja der Mensch weiß, dass die Funktion die die Au3Check nicht kennt, NIE aufgefrufen wird.

    Aber natürlich ist es schöner wenn erst gar kein Error kommt ;)

    Danke für die Funktion, ich werd sie mir mal speichern :D

  • TCPSend an alle und _GUIListView_AddItem Problem

    • oetzn
    • 8. Dezember 2009 um 17:47

    sry, ich weiß der Thread ist tot, aber für alle die mal auf den Thread stoßen und eine Lösung wollen => TCP Multichat Client+Server

  • TCP Multichat Client+Server

    • oetzn
    • 8. Dezember 2009 um 17:40

    hmm..
    schwieriges Problem xD

    wenn ich das verwende:

    [autoit]


    if _VersionCompare(@AutoItVersion,"3.3.1.0") = - 1 Then
    AdlibEnable("TrayTipTimer")
    Else
    AdlibRegister("TrayTipTimer")
    EndIf

    [/autoit]

    dann kommt trotzdem die Fehlermeldung, dass er AdlibRegister nicht kennt -.-
    obwohl er die Funktion ja gar nicht verwendet...

    Also entweder jeder schreibt sich das für die Version um, die er benützt, oder er verwendet die Beta ^^...

    Im Moment sehe ich keine andere Lösung, sry

    EDIT: Oder doch ;)

    Ich Update den Quellcode im 1. Post dann funzt das.

    Lösung: man muss die Errormeldung der Au3Check.exe ingnorieren (Continue Anyway drücken) weil das Programm ja durch die If-Abfrage sowiso nicht zu der Funktion kommt, die er nicht kennt :D

    Also viel Spaß ;)

  • TCP Multichat Client+Server

    • oetzn
    • 8. Dezember 2009 um 17:22
    Zitat

    Sollte mit der derzeitigen Beta-Version von AutoIT problems funktionieren.

    in den normalen AutoIT release heißt die Funktion AdlibEnable,

    Moment ich werd das schnell fixen ;)

  • TCP Multichat Client+Server

    • oetzn
    • 8. Dezember 2009 um 17:00

    hi Leute,

    ich weiß, gibt x-Verschiedene Multichats aber ich wollte meinen trotzdem posten xD

    WICHTIG: Er funktioniert(so wie er jetzt geschrieben ist) nur im lokalen Netzwerk!
    Wäre aber denk ich keine große Sache, ihn so umzuschreiben, dass er lokal und im Internet gleichzeitig funktioniert!

    Für Anregungen, Kritik und Bugmeldungen bin ich gerne offen!

    Server-Quellcode:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <File.au3>
    #include <GuiListView.au3>
    #include <Misc.au3>
    #include <Timers.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $tGes = _Timer_Init()

    [/autoit] [autoit][/autoit] [autoit]

    LogFile("@compiled: " & @Compiled, "Programm")
    LogFile("Pfad zur Exe: " & @AutoItExe, "Programm")
    LogFile("PID: " & @AutoItPID, "Programm")
    LogFile("AutoItVersion: " & @AutoItVersion, "Programm")
    LogFile("", "Programm")

    [/autoit] [autoit][/autoit] [autoit]

    If TCPStartup() <> 1 Then
    MsgBox(48, "Error", "TCP-Service konnte nicht gestartet werden!" & @LF & _
    "Programm wird beendet!")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    LogFile("TCP-Service erfolgreich gestartet", "Programm")

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $sTitle = "Chat Server"
    Global Const $sGUITitle = "Client-Verwaltung"
    Global Const $sIP = @IPAddress1
    Global Const $sPort = 2150
    Global Const $MainSocket = TCPListen($sIP, $sPort)
    Global Const $sPCNetworkName = @ComputerName
    Global Const $sBanListPath = @ScriptDir & "\Banlist.txt"

    [/autoit] [autoit][/autoit] [autoit]

    LogFile("Konstanten definiert", "Programm")
    LogFile("", "Programm")
    LogFile("Server-IP: " & $sIP, "Programm")
    LogFile("Server-Port: " & $sPort, "Programm")
    LogFile("Computername: " & $sPCNetworkName, "Programm")
    LogFile("", "Programm")
    LogFile("Abhör-Anschluss für eingehende Verbindung (Socket): " & $MainSocket, "Programm")
    LogFile("", "Programm")

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists($sBanListPath) Then _FileCreate($sBanListPath)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sTitleChat = "Multichat"
    Global $tTrayTipTimer
    Global $bRestart = False
    Global $sDataAdmin
    Global $iMaxIndexClientList
    Global $iHours
    Global $iMins
    Global $iSecs
    Global $iLastMins
    Global $iLastHour
    Global $Time
    Global $aBanList[1]
    Global $BanMode
    Global $sBannedUser

    [/autoit] [autoit][/autoit] [autoit]

    _FileReadToArray($sBanListPath, $aBanList)
    _ArrayDelete($aBanList, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aUsers[1][4]

    [/autoit] [autoit][/autoit] [autoit]

    If _Singleton($sGUITitle) = 0 Then
    LogFile("Zweite Instanz geschlossen! - Nur eine Instanz erlaubt!", "Programm")
    LogFile("", "Programm")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Opt("TrayOnEventMode", 1)
    Opt("GuiOnEventMode", 1)
    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    If _VersionCompare(@AutoItVersion, "3.3.1.0") = -1 Then
    AdlibEnable("RefreshStuff")
    AdlibEnable("CheckSocket")
    AdlibEnable("CheckConnection", 2000)
    AdlibEnable("CheckIncoming")
    Else
    AdlibRegister("RefreshStuff")
    AdlibRegister("CheckSocket")
    AdlibRegister("CheckConnection", 2000)
    AdlibRegister("CheckIncoming")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    TrayTipExt("Server IP: " & $sIP & "" & @LF _
    & "Computername: " & $sPCNetworkName)

    [/autoit] [autoit][/autoit] [autoit]

    TraySetToolTip("Server IP: " & $sIP & "" & @LF _
    & "Computername: " & $sPCNetworkName)

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### TrayMenu
    TrayCreateItem("Verwaltung")
    TrayItemSetOnEvent(-1, "ToggleClientGUI")
    TrayCreateItem("IP in Zwischenablage kopieren")
    TrayItemSetOnEvent(-1, "CopyIPClipboard")
    TrayCreateItem("Chatchronik öffnen")
    TrayItemSetOnEvent(-1, "OpenChatLog")
    TrayCreateItem("")
    TrayCreateItem("Server neu starten")
    TrayItemSetOnEvent(-1, "_Exit")
    TrayCreateItem("Beenden")
    TrayItemSetOnEvent(-1, "_Exit")
    TrayCreateItem("")
    TrayCreateItem("Chat beitreten (als Admin)")
    TrayItemSetOnEvent(-1, "_AdminChat")
    #EndRegion ### TrayMenu

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### VerwaltungGUI
    $hClientverwaltung = GUICreate($sGUITitle, 312, 248, 198, 131)
    $Group1 = GUICtrlCreateGroup("Verbundene Clients ", 0, 0, 185, 241)
    $ListView1 = GUICtrlCreateListView("Name|IP", 8, 16, 169, 217)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 70)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 95)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button1 = GUICtrlCreateButton("Kick", 192, 8, 115, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "KickSelected")
    $Button2 = GUICtrlCreateButton("GUI beenden", 192, 104, 115, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "ToggleClientGUI")
    $Button3 = GUICtrlCreateButton("Server beenden", 192, 136, 115, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_Exit")
    $Button4 = GUICtrlCreateButton("Server neu starten", 192, 168, 115, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_Exit")
    $Button5 = GUICtrlCreateButton("Erneuern", 192, 72, 115, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "ShowClients")
    $Button6 = GUICtrlCreateButton("Bann", 192, 40, 115, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "BanSelected")
    GUISetState(@SW_HIDE, $hClientverwaltung)
    #EndRegion ### VerwaltungGUI

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### ChatGUI
    $hMainGUI = GUICreate($sTitleChat, 750, 424, 203, 150)
    $Edit1 = GUICtrlCreateEdit("", 0, 0, 617, 393, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL))
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlSetCursor(-1, 2)
    $Input1 = GUICtrlCreateInput("", 0, 392, 521, 29)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlSetCursor(-1, 5)
    $Button6 = GUICtrlCreateButton("Senden", 520, 392, 97, 29, BitOR($BS_DEFPUSHBUTTON, $BS_CENTER, $BS_VCENTER, $WS_GROUP))
    GUICtrlSetOnEvent(-1, "_Send")
    $ListView2 = GUICtrlCreateListView("", 616, 0, 129, 420)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUISetState(@SW_HIDE, $hMainGUI)
    #EndRegion ### ChatGUI

    [/autoit] [autoit][/autoit] [autoit]

    #Region ###
    $hBanMsgBox = GUICreate("Wirklich verbannen?", 342, 103, 206, 133, BitOR($WS_CAPTION, $WS_BORDER, $WS_CLIPSIBLINGS))
    $Label1 = GUICtrlCreateLabel("", 16, 24, 308, 20)
    $Button7 = GUICtrlCreateButton("Permanent", 48, 64, 75, 25, $WS_GROUP)
    $Button8 = GUICtrlCreateButton("Temporär", 128, 64, 75, 25, $WS_GROUP)
    $Button9 = GUICtrlCreateButton("Gar nicht", 208, 64, 75, 25, $WS_GROUP)
    GUISetState(@SW_HIDE, $hBanMsgBox)
    #EndRegion ###

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "ToggleClientGUI", $hClientverwaltung)
    GUISetOnEvent($GUI_EVENT_CLOSE, "HideChatGUI", $hMainGUI)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetState($Input1, $GUI_FOCUS)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hListView1 = GUICtrlGetHandle($ListView1)
    Global $hListView2 = GUICtrlGetHandle($ListView2)

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlListView_AddColumn($hListView2, "Andere Clients", 125)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckSocket()
    $TempSocket = TCPAccept($MainSocket)
    If $TempSocket <> -1 Then
    LogFile("Verbindungsanfrage von " & SocketToIP($TempSocket), "Programm")
    LogFile("", "Programm")
    If MsgBox(48 + 4, "Neuer Cient", "Ein neuer Client will sich mit dem Server verbinden!" & @LF & _
    "Daten:" & @LF & _
    "IP: " & SocketToIP($TempSocket) & @LF & _
    "Zulassen?", 15) = 6 Then
    ReDim $aUsers[UBound($aUsers, 1) + 1][4]
    $aUsers[UBound($aUsers, 1) - 1][0] = $TempSocket
    $aUsers[UBound($aUsers, 1) - 1][1] = SocketToIP($TempSocket)
    TrayTipExt("Neuer Client verbunden: '" & $aUsers[UBound($aUsers, 1) - 1][1] & "'")
    TCPSend($TempSocket, "//Accept")
    Else
    TCPCloseSocket($TempSocket)
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $TempSocket = ""

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>CheckSocket

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckIncoming()
    Local $aData[1]
    Local $TempUsers

    [/autoit] [autoit][/autoit] [autoit]

    For $iIndex = 0 To UBound($aUsers, 1) - 1
    $TempData = TCPRecv($aUsers[$iIndex][0], 8192)
    Select

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLeft($TempData, 6) = "//Name"
    $TempData = StringTrimLeft($TempData, 7)
    $TempData = StringTrimRight($TempData, 1)
    If $TempData = "" Then ContinueCase
    $aUsers[$iIndex][2] = $TempData
    $TempSearchResultName = _ArraySearch($aUsers, $TempData, _ArraySearch($aUsers, $TempData) + 1)

    [/autoit] [autoit][/autoit] [autoit]

    If $TempSearchResultName <> -1 And StringLen($aUsers[$TempSearchResultName][2]) > 0 Then
    TCPSend($aUsers[$TempSearchResultName][0], "//Kick(DoubleName)")
    TCPCloseSocket($aUsers[$TempSearchResultName][0])

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "Server|" & $sIP & "|'" & $aUsers[$TempSearchResultName][2] & "' wurde vom Server gekickt, weil der Name bereits vergeben ist!")
    LogFile("Server => " & $aUsers[$i][2] & ": '" & $aUsers[$TempSearchResultName][2] & "' wurde vom Server gekickt, weil der Name bereits vergeben ist!", "Chat")
    Next
    WriteMemo("'" & $aUsers[$TempSearchResultName][2] & "' wurde vom Server gekickt, weil der Name bereits vergeben ist!", "Server")
    $aUsers[$TempSearchResultName][0] = ""
    $aUsers[$TempSearchResultName][1] = ""
    $aUsers[$TempSearchResultName][2] = ""
    $aUsers[$TempSearchResultName][3] = ""
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    $TempUsers = $aUsers[$i][2] & ";" & $TempUsers
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "//Users(" & $TempUsers & ")")
    If $TempSearchResultName = -1 Then LogFile("Server => " & $aUsers[$i][2] & ": '" & $TempData & "' ist dem Chat beigetreten! IP: (" & $aUsers[$i][1] & ")", "Chat")
    Next
    WriteMemo("'" & $TempData & "' ist dem Chat beigetreten!", "Server")
    _GUICtrlListView_AddItem($hListView2, $TempData)

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLeft($TempData, 5) = "//Key"
    $TempData = StringTrimLeft($TempData, 6)
    $TempData = StringTrimRight($TempData, 1)

    [/autoit] [autoit][/autoit] [autoit]

    If $TempData = "" Then ContinueCase

    [/autoit] [autoit][/autoit] [autoit]

    $aUsers[$iIndex][3] = $TempData
    $TempSearchResultKey = _ArraySearch($aBanList, $TempData)

    [/autoit] [autoit][/autoit] [autoit]

    If $TempSearchResultKey <> -1 Then
    $sBannedUser = _ArraySearch($aUsers, $TempData)
    TCPSend($aUsers[$sBannedUser][0], "//Kick(Banned)")
    TCPCloseSocket($aUsers[$sBannedUser][0])

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "Server|" & $sIP & "|'" & $aUsers[$sBannedUser][2] & "' ist ein verbannter User!")
    LogFile("Server => " & $aUsers[$i][2] & ": '" & $aUsers[$sBannedUser][2] & "' ist ein verbannter User!", "Chat")
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Else
    TCPSend($aUsers[$iIndex][0], "//Allowed")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $aUsers[$sBannedUser][0] = ""
    $aUsers[$sBannedUser][1] = ""
    $aUsers[$sBannedUser][2] = ""
    $aUsers[$sBannedUser][3] = ""

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLeft($TempData, 6) = "//Quit"
    $TempData = StringTrimLeft($TempData, 7)
    $TempData = StringTrimRight($TempData, 1)
    If $TempData = "" Then ContinueCase
    $TempSearch = _ArraySearch($aUsers, $TempData)
    TCPCloseSocket($aUsers[$TempSearch][0])

    [/autoit] [autoit][/autoit] [autoit]

    $aUsers[$TempSearch][0] = ""
    $aUsers[$TempSearch][1] = ""
    $aUsers[$TempSearch][2] = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "//UserQuit(" & $TempData & ")")
    LogFile("Server => " & $aUsers[$i][2] & ": '" & $TempData & "' hat den Chat verlassen!", "Chat")
    Next
    WriteMemo("'" & $TempData & "' hat den Chat verlassen!", "Server")
    _GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $TempData))

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLen($TempData) > 0
    _ArrayAdd($aData, $TempData)

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    Next
    If StringLen($aData[(UBound($aData, 1) - 1)]) > 0 Then

    [/autoit] [autoit][/autoit] [autoit]

    For $iIndex = 1 To UBound($aData, 1) - 1

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], $aData[$iIndex])
    $aTempData = StringSplit($aData[$iIndex], "|", 2)
    LogFile($aTempData[0] & " => " & $aUsers[$i][2] & ": " & $aTempData[2], "Chat")
    Next
    WriteMemo($aTempData[2], $aTempData[0])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $TempUsers = ""
    $TempData = ""
    $TempSearchResultName = ""

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>CheckIncoming

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckConnection()
    For $iIndex = 0 To UBound($aUsers, 1) - 1
    If Ping($aUsers[$iIndex][1], 250) = 0 And StringLen($aUsers[$iIndex][1]) > 0 Then
    TCPCloseSocket($aUsers[$iIndex][0])
    $aUsers[$iIndex][0] = ""
    $aUsers[$iIndex][1] = ""
    $aUsers[$iIndex][2] = ""
    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "Server|" & $sIP & "|Die Verbindung zur Maschine von '" & $aUsers[$iIndex][1] & "' ging verloren!")
    Next
    EndIf
    Next
    EndFunc ;==>CheckConnection

    [/autoit] [autoit][/autoit] [autoit]

    Func AFKKick()
    EndFunc ;==>AFKKick

    [/autoit] [autoit][/autoit] [autoit]

    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet
    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")
    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf
    $sockaddr = 0
    Return $aRet
    EndFunc ;==>SocketToIP

    [/autoit] [autoit][/autoit] [autoit]

    Func LogFile($sData, $sType)
    Switch $sType
    Case "Chat"
    _FileWriteLog(@ScriptDir & "\" & $sChatLogName, $sData)
    Case "Programm"
    _FileWriteLog(@ScriptDir & "\" & $sGeneralLogName, $sData)
    EndSwitch
    EndFunc ;==>LogFile

    [/autoit] [autoit][/autoit] [autoit]

    Func OpenChatLog()
    TrayItemSetState(@TRAY_ID, 68)
    If Not FileExists(@SystemDir & "\notepad.exe") Then
    MsgBox(48, "Error", "notepad.exe konnte nicht gefunden werden!")
    Return -1
    EndIf
    Run("notepad.exe " & $sChatLogName)
    EndFunc ;==>OpenChatLog

    [/autoit] [autoit][/autoit] [autoit]

    Func ShowClients()
    _GUICtrlListView_DeleteAllItems($hListView1)
    For $i = 0 To UBound($aUsers, 1) - 1
    If StringLen($aUsers[$i][2]) > 0 And StringLen($aUsers[$i][1]) > 0 Then
    $iTempIndex = _GUICtrlListView_AddItem($hListView1, $aUsers[$i][2], 0)
    _GUICtrlListView_AddSubItem($hListView1, $iTempIndex, $aUsers[$i][1], 1, 1)
    EndIf
    $iMaxIndexClientList = _GUICtrlListView_GetItemCount($hListView1)
    Next
    EndFunc ;==>ShowClients

    [/autoit] [autoit][/autoit] [autoit]

    Func KickSelected()
    For $iIndex = 0 To $iMaxIndexClientList - 1
    $TempStatus = _GUICtrlListView_GetItem($hListView1, $iIndex)
    If BitAND($TempStatus[0], 8) = 8 Then
    $TempSearchResult = _ArraySearch($aUsers, _GUICtrlListView_GetItemText($hListView1, $iIndex))
    If $TempSearchResult <> -1 Then
    TCPSend($aUsers[$TempSearchResult][0], "//Kick(Admin)")
    TCPCloseSocket($aUsers[$TempSearchResult][0])
    $aUsers[$TempSearchResult][0] = ""
    $aUsers[$TempSearchResult][1] = ""
    $aUsers[$TempSearchResult][3] = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "//UserKick(" & $aUsers[$TempSearchResult][2] & ")")
    Next
    _GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $aUsers[$TempSearchResult][2]))
    $aUsers[$TempSearchResult][2] = ""
    Else
    MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
    Return -1
    EndIf
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlListView_DeleteAllItems($hListView1)
    For $i = 0 To UBound($aUsers, 1) - 1
    If StringLen($aUsers[$i][2]) > 0 And StringLen($aUsers[$i][1]) > 0 Then
    $iTempIndex = _GUICtrlListView_AddItem($hListView1, $aUsers[$i][2], 0)
    _GUICtrlListView_AddSubItem($hListView1, $iTempIndex, $aUsers[$i][1], 1, 1)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $TempStatus = ""
    $iTempIndex = ""
    $TempSearchResult = ""

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>KickSelected

    [/autoit] [autoit][/autoit] [autoit]

    Func BanSelected()
    For $iIndex = 0 To $iMaxIndexClientList - 1
    $TempStatus = _GUICtrlListView_GetItem($hListView1, $iIndex)
    If BitAND($TempStatus[0], 8) = 8 Then
    $TempSearchResult = _ArraySearch($aUsers, _GUICtrlListView_GetItemText($hListView1, $iIndex))
    If $TempSearchResult <> -1 Then

    [/autoit] [autoit][/autoit] [autoit]

    Switch MsgBox(48 + 3, "Perm/Temp - Ban", "Soll der User permanent gebannt werden?" & @LF _
    "'JA' = Perm, 'NEIN' = Temp, 'Abbrechen' = Abbruch der Funktion")
    Case 6
    _FileWriteToLine($sBanListPath, _FileCountLines($sBanListPath) + 1, $aUsers[$TempSearchResult][3])
    _ArrayAdd($aBanList, $aUsers[$TempSearchResult][3])
    Case 7
    _ArrayAdd($aBanList, $aUsers[$TempSearchResult][3])
    Case Else
    Return -1
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    TCPSend($aUsers[$TempSearchResult][0], "//Kick(AdminBan)")
    TCPCloseSocket($aUsers[$TempSearchResult][0])
    $aUsers[$TempSearchResult][0] = ""
    $aUsers[$TempSearchResult][1] = ""
    $aUsers[$TempSearchResult][3] = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "//UserBan(" & $aUsers[$TempSearchResult][2] & ")")
    Next
    _GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $aUsers[$TempSearchResult][2]))
    $aUsers[$TempSearchResult][2] = ""
    Else
    MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
    Return -1
    EndIf
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlListView_DeleteAllItems($hListView1)
    For $i = 0 To UBound($aUsers, 1) - 1
    If StringLen($aUsers[$i][2]) > 0 And StringLen($aUsers[$i][1]) > 0 Then
    $iTempIndex = _GUICtrlListView_AddItem($hListView1, $aUsers[$i][2], 0)
    _GUICtrlListView_AddSubItem($hListView1, $iTempIndex, $aUsers[$i][1], 1, 1)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $TempStatus = ""
    $iTempIndex = ""
    $TempSearchResult = ""

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>BanSelected

    [/autoit] [autoit][/autoit] [autoit]

    Func _AdminChat()

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetState($Input1, $GUI_FOCUS)
    GUISetState(@SW_SHOW, $hMainGUI)
    TrayItemSetState(@TRAY_ID, 68)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_AdminChat

    [/autoit] [autoit][/autoit] [autoit]

    Func _Send()

    [/autoit] [autoit][/autoit] [autoit]

    $sDataAdmin = GUICtrlRead($Input1)

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case StringLower($sDataAdmin) = "restart"
    LogFile("Programm wird von Admin per Chatbefehle neugestartet!", "Programm")
    LogFile("", "Programm")
    $bRestart = True
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLower($sDataAdmin) = "shutdown"
    LogFile("Programm wird von Admin per Chatbefehle beendet!", "Programm")
    LogFile("", "Programm")
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLower(StringLeft($sDataAdmin, 5)) = "kick "
    $sName = StringRight($sDataAdmin, StringLen($sDataAdmin) - 5)
    $TempSearchResult = _ArraySearch($aUsers, $sName)
    If $TempSearchResult <> -1 Then
    TCPSend($aUsers[$TempSearchResult][0], "//Kick(Admin)")
    TCPCloseSocket($aUsers[$TempSearchResult][0])
    $aUsers[$TempSearchResult][0] = ""
    $aUsers[$TempSearchResult][1] = ""
    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "//UserKick(" & $aUsers[$TempSearchResult][2] & ")")
    Next
    _GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $aUsers[$TempSearchResult][2]))
    $aUsers[$TempSearchResult][2] = ""
    Else
    MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
    Return -1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLower(StringLeft($sDataAdmin, 4)) = "ban "
    $sName = StringRight($sDataAdmin, StringLen($sDataAdmin) - 4)
    $TempSearchResult = _ArraySearch($aUsers, $sName)
    If $TempSearchResult <> -1 Then

    [/autoit] [autoit][/autoit] [autoit]

    Switch MsgBox(48 + 3, "Perm/Temp - Ban", "Soll der User permanent gebannt werden?" & @LF _
    "'JA' = Perm, 'NEIN' = Temp, 'Abbrechen' = Abbruch der Funktion")
    Case 6
    _FileWriteToLine($sBanListPath, _FileCountLines($sBanListPath) + 1, $aUsers[$TempSearchResult][3])
    _ArrayAdd($aBanList, $aUsers[$TempSearchResult][3])
    Case 7
    _ArrayAdd($aBanList, $aUsers[$TempSearchResult][3])
    Case Else
    Return -1
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    TCPSend($aUsers[$TempSearchResult][0], "//Kick(AdminBan)")
    TCPCloseSocket($aUsers[$TempSearchResult][0])
    $aUsers[$TempSearchResult][0] = ""
    $aUsers[$TempSearchResult][1] = ""
    $aUsers[$TempSearchResult][3] = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "//UserBan(" & $aUsers[$TempSearchResult][2] & ")")
    Next
    _GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $aUsers[$TempSearchResult][2]))
    $aUsers[$TempSearchResult][2] = ""

    [/autoit] [autoit][/autoit] [autoit]

    Else
    MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
    Return -1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLen($sDataAdmin) > 0
    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "Admin|" & $sIP & "|" & $sDataAdmin)
    Next
    WriteMemo($sDataAdmin, "Admin")
    LogFile("Admin => ALL: " & $sDataAdmin, "Chat")
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Input1, "")
    GUICtrlSetState($Input1, $GUI_FOCUS)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Send

    [/autoit] [autoit][/autoit] [autoit]

    Func ToggleClientGUI()
    Switch _WinAPI_IsWindowVisible($hClientverwaltung)
    Case True
    GUISetState(@SW_HIDE, $hClientverwaltung)
    TrayItemSetState(@TRAY_ID, 68)
    ShowClients()
    Case False
    GUISetState(@SW_SHOW, $hClientverwaltung)
    TrayItemSetState(@TRAY_ID, 65)
    ShowClients()
    EndSwitch
    EndFunc ;==>ToggleClientGUI

    [/autoit] [autoit][/autoit] [autoit]

    Func HideChatGUI()
    GUISetState(@SW_HIDE, $hMainGUI)
    EndFunc ;==>HideChatGUI

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItStart()
    Global Const $sChatLogName = "ChatLog_" & @MDAY & "-" & @MON & "-" & @YEAR & ".log"
    Global Const $sGeneralLogName = "GeneralLog_" & @MDAY & "-" & @MON & "-" & @YEAR & ".log"
    LogFile("", "Programm")
    LogFile(" --- SERVER STARTUP --- ", "Programm")
    LogFile("", "Programm")
    LogFile("", "Chat")
    LogFile(" --- SERVER STARTUP --- ", "Chat")
    LogFile("", "Chat")
    EndFunc ;==>OnAutoItStart

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit()
    For $i = 1 To UBound($aUsers, 1) - 1
    If $aUsers[$i][0] = "" Then ContinueLoop
    TCPSend($aUsers[$i][0], "//Quit(Server-Shutdown)")
    LogFile("Server => " & $aUsers[$i][2] & "(" & $aUsers[$i][1] & "): //Quit(Server-Shutdown)", "Chat")
    TCPCloseSocket($aUsers[$i][0])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    TCPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    LogFile("Laufzeit: " & $Time, "Programm")
    LogFile("", "Chat")
    LogFile(" --- SERVER SHUTDOWN --- ", "Chat")
    LogFile("", "Chat")
    LogFile("", "Programm")
    LogFile(" --- SERVER SHUTDOWN --- ", "Programm")
    LogFile("", "Programm")
    If $bRestart = True Then ShellExecute(@ScriptFullPath)
    EndFunc ;==>OnAutoItExit

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    If TrayItemGetText(@TRAY_ID) = "Beenden" Then Exit
    If TrayItemGetText(@TRAY_ID) = "Server neu starten" Then
    LogFile("Programm wird von Admin per Traymenü neu gestartet!", "Programm")
    LogFile("", "Programm")
    $bRestart = True
    Exit
    ElseIf GUICtrlRead(@GUI_CtrlId) = "Server neu starten" Then
    LogFile("Programm wird von Admin über das Verwaltungsmenü neu gestartet!", "Programm")
    LogFile("", "Programm")
    $bRestart = True
    Exit
    EndIf
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func CopyIPClipboard()
    TrayItemSetState(@TRAY_ID, 68)
    If StringLen(ClipGet()) > 0 Then
    If MsgBox(48 + 4, "Error", "Die Zwischenablage ist NICHT leer!" & @LF _
    & "Enthält folgendes: " & @LF & @LF & _
    & ClipGet() & @LF & @LF & _
    "Überschreiben?") = 6 Then
    If ClipPut($sIP) = 1 Then
    LogFile("Server-IP (" & $sIP & ") erfolgreich in die Zwischenablage kopiert!", "Programm")
    TrayTipExt("Kopieren erfolgreich!")
    EndIf
    EndIf
    EndIf
    EndFunc ;==>CopyIPClipboard

    [/autoit] [autoit][/autoit] [autoit]

    Func TrayTipExt($sText)
    TrayTip($sTitle, $sText, 3)
    $tTrayTipTimer = _Timer_Init()
    EndFunc ;==>TrayTipExt

    [/autoit] [autoit][/autoit] [autoit]

    Func RefreshStuff()
    If _Timer_Diff($tTrayTipTimer) > 3000 Then TrayTip($sTitle, "", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $iLastMins = $iMins
    $iLastHour = $iHours

    [/autoit] [autoit][/autoit] [autoit]

    _TicksToTime(_Timer_Diff($tGes), $iHours, $iMins, $iSecs)

    [/autoit] [autoit][/autoit] [autoit]

    If $iLastMins <> $iMins Or $iLastHour <> $iHours Then
    $Time = StringFormat("i:i", $iHours, $iMins)
    TraySetToolTip("Server IP: " & $sIP & "" & @LF _
    & "Computername: " & $sPCNetworkName & "" & @LF _
    & "Server läuft: " & $Time)
    EndIf
    EndFunc ;==>RefreshStuff

    [/autoit] [autoit][/autoit] [autoit]

    Func WriteMemo($sData, $sNameEdit)
    GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & @HOUR & ":" & @MIN & " ~ " & $sNameEdit & " > " & $sData & @CRLF)
    EndFunc ;==>WriteMemo

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Client Quellcode:

    Spoiler anzeigen
    [autoit]


    #include <GuiListView.au3>
    #include <Misc.au3>
    #include <Timers.au3>
    #include <Array.au3>
    #include <GuiListBox.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiComboBox.au3>

    [/autoit] [autoit][/autoit] [autoit]

    If TCPStartup() <> 1 Then
    MsgBox(48, "Error", "TCP-Service konnte nicht gestartet werden!" & @LF & _
    "Programm wird beendet!")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Opt("TrayOnEventMode", 1)
    Opt("GuiOnEventMode", 1)
    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode", 1)
    Opt("TrayIconDebug", 0)
    Opt("TCPTimeout", 500)

    [/autoit] [autoit][/autoit] [autoit]

    TraySetToolTip("Eigene IP-Adresse: " & @IPAddress1)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $sTitleLogin = "Chat-Login"
    Global Const $sIniPath = @ScriptDir & "\Client.ini"
    Global $sProgID

    [/autoit] [autoit][/autoit] [autoit]

    If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Multichat", "Key") = "" Then
    _GenerateKey()
    Else
    $sProgID = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Multichat", "Key")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $sTitleChat = "Multichat"
    Global $tTrayTipTimer

    [/autoit] [autoit][/autoit] [autoit]

    $sTemp1 = IniRead($sIniPath, "LastSettings", "StyleEdit", "")
    $sTemp2 = IniRead($sIniPath, "LastSettings", "StyleAll", "")

    [/autoit] [autoit][/autoit] [autoit]

    If $sTemp1 <> "" Then $NewStyleEditOnly = StringSplit($sTemp1, "|", 2)
    If $sTemp2 <> "" Then $NewStyleAll = StringSplit($sTemp2, "|", 2)

    [/autoit] [autoit][/autoit] [autoit]

    Global $NewStyleEditOnly
    Global $NewStyleAll

    [/autoit] [autoit][/autoit] [autoit]

    Global $sLastIP = IniRead($sIniPath, "LastSettings", "LastIP", "")
    Global $sLastName = IniRead($sIniPath, "LastSettings", "LastName", "")

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### LoginGUI
    $hLoginGUI = GUICreate($sTitleLogin, 225, 165, 265, 155)
    $Group1 = GUICtrlCreateGroup("Server IP", 8, 0, 185, 49, $BS_CENTER)
    $Input1 = GUICtrlCreateInput($sLastIP, 16, 16, 169, 26, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
    GUICtrlSetFont(-1, 10)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Nickname", 8, 48, 185, 49, $BS_CENTER)
    $Input2 = GUICtrlCreateInput($sLastName, 16, 64, 169, 26, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
    GUICtrlSetFont(-1, 10)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button1 = GUICtrlCreateButton("Starte Verbindungsversuch", 10, 104, 179, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Connect")
    GUICtrlSetState(-1, $GUI_DEFBUTTON)
    GUICtrlSetFont(-1, 10)
    $Progress1 = GUICtrlCreateProgress(200, 8, 17, 153, $PBS_VERTICAL)
    $Button11 = GUICtrlCreateButton("Abbrechen", 10, 136, 179, 25, $WS_GROUP)
    GUICtrlSetFont(-1, 10)
    ;~ GUISetState(@SW_HIDE, $hLoginGUI)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### ChatGUI
    $hMainGUI = GUICreate($sTitleChat, 749, 450, 185, 137, BitOR($WS_SIZEBOX, $WS_SYSMENU))
    $Edit1 = GUICtrlCreateEdit("", 0, 0, 617, 393, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL))
    GUICtrlSetResizing(-1, 1)
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10)
    GUICtrlSetCursor(-1, 2)
    $Input3 = GUICtrlCreateInput("", 0, 392, 521, 29)
    GUICtrlSetResizing(-1, 1)
    GUICtrlSetFont(-1, 10)
    GUICtrlSetCursor(-1, 5)
    $Button2 = GUICtrlCreateButton("Senden", 520, 392, 97, 29, BitOR($BS_DEFPUSHBUTTON, $BS_CENTER, $BS_VCENTER, $WS_GROUP))
    GUICtrlSetResizing(-1, 1)
    GUICtrlSetOnEvent(-1, "_Send")
    $ListView1 = GUICtrlCreateListView("", 616, 0, 129, 292)
    GUICtrlSetResizing(-1, 1)
    GUICtrlSetFont(-1, 10)
    $Button6 = GUICtrlCreateButton("Style ändern", 616, 296, 131, 29, $WS_GROUP)
    GUICtrlSetResizing(-1, 1)
    GUICtrlSetOnEvent(-1, "HideStyleGUI")
    $Button3 = GUICtrlCreateButton("Chat verstecken", 616, 328, 131, 29, $WS_GROUP)
    GUICtrlSetResizing(-1, 1)
    GUICtrlSetOnEvent(-1, "ShowHideMultichat")
    $Button4 = GUICtrlCreateButton("Beenden", 616, 360, 131, 29, $WS_GROUP)
    GUICtrlSetResizing(-1, 1)
    GUICtrlSetOnEvent(-1, "_Exit")
    $Button5 = GUICtrlCreateButton("Neu starten", 616, 392, 131, 29, $WS_GROUP)
    GUICtrlSetResizing(-1, 1)
    GUICtrlSetOnEvent(-1, "_Exit")
    ;~ GUISetState(@SW_HIDE, $hMainGUI)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### ChangeStyleGUI
    $hChangeStyle = GUICreate("Style ändern", 212, 229, 332, 131)
    $Group2 = GUICtrlCreateGroup("Schriftgröße / Schriftfarbe ", 8, 8, 201, 129)
    $Group3 = GUICtrlCreateGroup("Nur Edit-Felder ", 16, 24, 185, 49)
    $Button7 = GUICtrlCreateButton("Auswählen", 24, 40, 171, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "ChooseFont")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group4 = GUICtrlCreateGroup("Alles ", 16, 80, 185, 49)
    $Button8 = GUICtrlCreateButton("Auswählen", 24, 96, 171, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "ChooseFont")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button9 = GUICtrlCreateButton("Speichern", 8, 144, 99, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "SaveStyle")
    $Button10 = GUICtrlCreateButton("Abbrechen", 112, 144, 91, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "HideStyleGUI")
    $Group1 = GUICtrlCreateGroup("Transparenz", 8, 176, 201, 49)
    $Slider1 = GUICtrlCreateSlider(16, 192, 185, 25)
    GUICtrlSetOnEvent(-1, "SetTransparenz")
    GUICtrlSetLimit(-1, 255, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    ;~ GUISetState(@SW_HIDE, $hChangeStyle)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hLoginGUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hMainGUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "HideStyleGUI", $hChangeStyle)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hListView1 = GUICtrlGetHandle($ListView1)
    Global $ServerSocket
    Global $ServerIP
    Global $Nickname
    Global $bRestart = False

    [/autoit] [autoit][/autoit] [autoit]

    _GUICtrlListView_AddColumn($hListView1, "Andere Clients", 125)

    [/autoit] [autoit][/autoit] [autoit]

    SaveStyle()

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $hLoginGUI)
    WinActivate($sTitleLogin)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Connect()

    [/autoit] [autoit][/autoit] [autoit]

    Local $intTryConnect = 0

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetState($Input3, $GUI_FOCUS)
    GUICtrlSetState($Button2, $GUI_DEFBUTTON)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Progress1, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $ServerIP = GUICtrlRead($Input1)
    $Nickname = GUICtrlRead($Input2)

    [/autoit] [autoit][/autoit] [autoit]

    If Not StringRegExp($ServerIP, "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\." & _
    "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\." & _
    "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\." & _
    "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$") Then
    MsgBox(48, "Error", "IP Adresse hat nicht das richtige Format! (xxx.xxx.xxx.xxx)" & @LF & _
    "Fehlercode: " & StringRegExp($ServerIP, "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"))
    GUICtrlSetData($Progress1, 0)
    Return -1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Progress1, 10)

    [/autoit] [autoit][/autoit] [autoit]

    If StringRegExp($Nickname, "\A[\w-\s]+\z", 0) = 0 Then
    MsgBox(48, "Error", "Nickname enthält ungültige Zeichen!" & @LF & _
    "Es sind nur Buchstaben, Zahlen und Unterstrich sowie Bindestrich erlaubt!")
    Return -1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Progress1, 20)

    [/autoit] [autoit][/autoit] [autoit]

    If Ping($ServerIP, 500) = 0 Then
    MsgBox(48, "Error", "Der Server konnte nicht angepingt werden!" & @LF & _
    "Fehlercode: [" & @error & "]" & @LF & _
    "Bitte überprüfen Sie die IP-Adresse!")
    GUICtrlSetData($Progress1, 0)
    Return -1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $ServerSocket = TCPConnect($ServerIP, 2150)
    GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 10)
    $intTryConnect += 1
    Sleep(500)
    Until $intTryConnect > 5 Or $ServerSocket <> -1

    [/autoit] [autoit][/autoit] [autoit]

    If $intTryConnect > 5 Then
    GUICtrlSetData($Progress1, 0)
    MsgBox(48, "Error", "Server nach 5 Verbindungsversuchen nicht erreichbar!")
    Return -1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip($sTitleChat, "Warte bis der Server die Verbindung zulässt...", 20)
    $TimerWaitAccept = _Timer_Init()

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GuiOnEventMode", 0)

    [/autoit] [autoit][/autoit] [autoit]

    If _VersionCompare(@AutoItVersion, "3.3.1.0") = -1 Then
    AdlibEnable("CheckIncoming")
    AdlibEnable("CheckConnection")
    Else
    AdlibRegister("CheckIncoming")
    AdlibRegister("CheckConnection")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Sleep(100)
    $TempRecv = TCPRecv($ServerSocket, 1024)
    If @error Then
    TrayTipExt("Verbindungsversuch wurde abgelehnt..")
    GUICtrlSetData($Progress1, 0)
    Return -1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If _Timer_Diff($TimerWaitAccept) > 15000 Then
    MsgBox(48, "Error", "Verbindungstimeout (15 Sekunden) wurde erreicht!" & @LF & _
    "Verbindungsversuch wurde abgebrochen!")
    GUICtrlSetData($Progress1, 0)
    Return -2
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If GUIGetMsg() = $Button11 Then
    GUICtrlSetData(0, $Progress1)
    Opt("GuiOnEventMode", 1)
    MsgBox(48, "Abbruch", "Verbindungsversuch wurde abgebrochen!")
    Return -3
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Until $TempRecv = "//Accept"

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GuiOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    TrayTip($sTitleChat, "", 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Progress1, 100)

    [/autoit] [autoit][/autoit] [autoit]

    TrayCreateItem("Zeige Multichat")
    TrayItemSetOnEvent(-1, "ShowHideMultichat")
    TrayCreateItem("Beenden")
    TrayItemSetOnEvent(-1, "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    SendSpecial($ServerSocket, "Key", $sProgID)
    Sleep(500)
    SendSpecial($ServerSocket, "Name", $Nickname)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_HIDE, $hLoginGUI)
    GUISetState(@SW_SHOW, $hMainGUI)

    [/autoit] [autoit][/autoit] [autoit]

    WinSetTitle($sTitleChat, "", $sTitleChat & " - " & $Nickname)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>Connect

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckIncoming()
    $TestTimer = _Timer_Init()
    $TempData = TCPRecv($ServerSocket, 8192)
    If StringLen($TempData) > 0 Then
    $aRecv = StringSplit($TempData, "|", 2)

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case StringLeft($TempData, 6) = "//Quit"
    TCPCloseSocket($ServerSocket)
    WriteMemo("Verbindung verloren!", "Server")
    If MsgBox(48 + 4, "Error", "Die Verbindung zum Server ging verloren!" & @LF & _
    "Der Socket wurde geschlossen! - Programm neu starten?") = 6 Then
    $bRestart = True
    Exit
    Else
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLeft($TempData, 6) = "//Kick"
    $TempData = StringTrimLeft($TempData, 7)
    $TempData = StringTrimRight($TempData, 1)

    [/autoit] [autoit][/autoit] [autoit]

    Switch $TempData
    Case "DoubleName"
    MsgBox(48, "Name bereits verwendet!", "Der Name wird auf dem Server bereits verwendet!" & @LF & _
    "Bitte anderen Namen verwenden!")
    $bRestart = True
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case "Admin"
    GUISetState(@SW_HIDE, $hMainGUI)
    If MsgBox(48 + 4, "Verbindung verloren!", "Sie wurden vom Server gekickt!" & @LF & _
    "Client neu starten?") = 6 Then $bRestart = True
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case "Banned"
    GUISetState(@SW_HIDE, $hMainGUI)
    MsgBox(48, "Verbindung verloren!", "Sie sind auf diesem Server gebannt!")
    Return -1

    [/autoit] [autoit][/autoit] [autoit]

    Case "AdminBan"
    GUISetState(@SW_HIDE, $hMainGUI)
    MsgBox(48, "Verbindung verloren!", "Sie wurden soeben auf diesem Server gebannt!")
    Return -2

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLeft($TempData, 7) = "//Users"
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $TempData = ' & $TempData & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $TempData = StringTrimLeft($TempData, 8)
    $TempData = StringTrimRight($TempData, 1)
    $aTempUsers = StringSplit($TempData, ";")
    WriteMemo("'" & $aTempUsers[1] & "' ist dem Chat beigetreten!", "Server")
    _GUICtrlListView_DeleteAllItems($hListView1)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aTempUsers[0]
    If $aTempUsers[$i] = "" Then ContinueLoop
    _GUICtrlListView_AddItem($hListView1, $aTempUsers[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLeft($TempData, 10) = "//UserQuit"
    $TempData = StringTrimLeft($TempData, 11)
    $TempData = StringTrimRight($TempData, 1)
    WriteMemo("'" & $TempData & "' hat den Chat verlassen!", "Server")
    _GUICtrlListView_DeleteItem($hListView1, _GUICtrlListView_FindInText($hListView1, $TempData))

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLeft($TempData, 10) = "//UserKick"
    $TempData = StringTrimLeft($TempData, 11)
    $TempData = StringTrimRight($TempData, 1)
    WriteMemo("'" & $TempData & "' wurde vom Server gekickt!", "Server")
    _GUICtrlListView_DeleteItem($hListView1, _GUICtrlListView_FindInText($hListView1, $TempData))

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLeft($TempData, 10) = "//UserKick"
    $TempData = StringTrimLeft($TempData, 11)
    $TempData = StringTrimRight($TempData, 1)
    WriteMemo("'" & $TempData & "' wurde vom Server gebannt!", "Server")
    _GUICtrlListView_DeleteItem($hListView1, _GUICtrlListView_FindInText($hListView1, $TempData))

    [/autoit] [autoit][/autoit] [autoit]

    Case IsArray($aRecv) And @error <> 1
    WriteMemo($aRecv[2], $aRecv[0])

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    EndIf
    ConsoleWrite("Durchlaufdauer von 'Check Incoming' beträgt: " & @LF & _Timer_Diff($TestTimer) & @LF & @LF)
    EndFunc ;==>CheckIncoming

    [/autoit] [autoit][/autoit] [autoit]

    Func CheckConnection()
    If Ping($ServerIP, 500) = 0 And $intTryConnect > 0 Then
    WriteMemo("Verbindung verloren!", "Server")
    TCPCloseSocket($ServerSocket)
    If MsgBox(262144 + 4, "Verbindungstimeout", "Die Verbindung zum Server ging verloren!" & @LF & _
    "Der Socket wurde geschlossen! - Programm neu starten?") = 6 Then
    $bRestart = True
    Exit
    Else
    Exit
    EndIf
    EndIf
    EndFunc ;==>CheckConnection

    [/autoit] [autoit][/autoit] [autoit]

    Func _Send()
    Local $intTrySend = 0

    [/autoit] [autoit][/autoit] [autoit]

    If StringLen(GUICtrlRead($Input3)) = 0 Then Return -1

    [/autoit] [autoit][/autoit] [autoit]

    If StringLen(GUICtrlRead($Input3)) > 200 Then
    MsgBox(48, "Error", "Die maximale Zeichenanzahl beträgt 200!" & @LF _
    & "Sie wollten '" StringLen(GUICtrlRead($Input3)) & "' Zeichen senden." & @LF _
    & "Das sind '" & StringLen(GUICtrlRead($Input3)) - 200 & "' Zeichen zuviel!")
    Return -1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $TCPData = TCPSend($ServerSocket, $Nickname & "|" & @IPAddress1 & "|" & GUICtrlRead($Input3))
    $intTrySend += 1
    Until $intTrySend > 5 Or $TCPData > 0

    [/autoit] [autoit][/autoit] [autoit]

    If $intTrySend > 5 Then
    WriteMemo("Konnte Daten nicht an den Server schicken!", "Error")
    Else
    GUICtrlSetData($Input3, "")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Send

    [/autoit] [autoit][/autoit] [autoit]

    Func SendSpecial($Socket, $sType, $sData)
    TCPSend($Socket, "//" & $sType & "(" & $sData & ")")
    EndFunc ;==>SendSpecial

    [/autoit] [autoit][/autoit] [autoit]

    Func WriteMemo($sData, $sNameEdit)
    GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & @HOUR & ":" & @MIN & " ~ " & $sNameEdit & " > " & $sData & @CRLF)
    EndFunc ;==>WriteMemo

    [/autoit] [autoit][/autoit] [autoit]

    Func ChooseFont()
    Switch @GUI_CtrlId
    Case $Button7
    Switch IsArray($NewStyleEditOnly)
    Case 1
    $NewStyleEditOnly = _ChooseFont($NewStyleEditOnly[2], $NewStyleEditOnly[3], $NewStyleEditOnly[5], $NewStyleEditOnly[4], BitAND($NewStyleEditOnly[1], 2), BitAND($NewStyleEditOnly[1], 4), BitAND($NewStyleEditOnly[1], 8))
    Case 0
    $NewStyleEditOnly = _ChooseFont()
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    Case $Button8
    Switch IsArray($NewStyleAll)
    Case 1
    $NewStyleAll = _ChooseFont($NewStyleAll[2], $NewStyleAll[3], $NewStyleAll[5], $NewStyleAll[4], BitAND($NewStyleAll[1], 2), BitAND($NewStyleAll[1], 4), BitAND($NewStyleAll[1], 8))
    Case 0
    $NewStyleAll = _ChooseFont()
    EndSwitch
    EndSwitch
    EndFunc ;==>ChooseFont

    [/autoit] [autoit][/autoit] [autoit]

    Func SaveStyle()
    If IsArray($NewStyleAll) Then
    GUICtrlSetFont($Edit1, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Input1, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Input2, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Input3, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button1, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button2, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button3, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button4, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button5, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button6, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button7, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button8, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button9, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button10, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetFont($Button11, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
    GUICtrlSetColor($Edit1, $NewStyleAll[7])
    GUICtrlSetColor($Input1, $NewStyleAll[7])
    GUICtrlSetColor($Input2, $NewStyleAll[7])
    GUICtrlSetColor($Input3, $NewStyleAll[7])
    GUICtrlSetColor($Button1, $NewStyleAll[7])
    GUICtrlSetColor($Button2, $NewStyleAll[7])
    GUICtrlSetColor($Button3, $NewStyleAll[7])
    GUICtrlSetColor($Button4, $NewStyleAll[7])
    GUICtrlSetColor($Button5, $NewStyleAll[7])
    GUICtrlSetColor($Button6, $NewStyleAll[7])
    GUICtrlSetColor($Button7, $NewStyleAll[7])
    GUICtrlSetColor($Button8, $NewStyleAll[7])
    GUICtrlSetColor($Button9, $NewStyleAll[7])
    GUICtrlSetColor($Button10, $NewStyleAll[7])
    GUICtrlSetColor($Button11, $NewStyleAll[7])
    EndIf
    If IsArray($NewStyleEditOnly) Then
    GUICtrlSetFont($Edit1, $NewStyleEditOnly[3], $NewStyleEditOnly[4], $NewStyleEditOnly[1], $NewStyleEditOnly[2])
    GUICtrlSetFont($Input1, $NewStyleEditOnly[3], $NewStyleEditOnly[4], $NewStyleEditOnly[1], $NewStyleEditOnly[2])
    GUICtrlSetFont($Input2, $NewStyleEditOnly[3], $NewStyleEditOnly[4], $NewStyleEditOnly[1], $NewStyleEditOnly[2])
    GUICtrlSetFont($Input3, $NewStyleEditOnly[3], $NewStyleEditOnly[4], $NewStyleEditOnly[1], $NewStyleEditOnly[2])
    GUICtrlSetColor($Edit1, $NewStyleEditOnly[7])
    GUICtrlSetColor($Input1, $NewStyleEditOnly[7])
    GUICtrlSetColor($Input2, $NewStyleEditOnly[7])
    GUICtrlSetColor($Input3, $NewStyleEditOnly[7])
    EndIf
    GUISetState(@SW_HIDE, $hChangeStyle)
    EndFunc ;==>SaveStyle

    [/autoit] [autoit][/autoit] [autoit]

    Func HideStyleGUI()
    Switch _WinAPI_IsWindowVisible($hChangeStyle)
    Case True
    GUISetState(@SW_HIDE, $hChangeStyle)
    Case False
    GUISetState(@SW_SHOW, $hChangeStyle)
    EndSwitch
    EndFunc ;==>HideStyleGUI

    [/autoit] [autoit][/autoit] [autoit]

    Func ShowHideMultichat()
    Switch _WinAPI_IsWindowVisible($hMainGUI)
    Case True
    GUISetState(@SW_HIDE, $hMainGUI)
    Case False
    GUISetState(@SW_SHOW, $hMainGUI)
    EndSwitch
    EndFunc ;==>ShowHideMultichat

    [/autoit] [autoit][/autoit] [autoit]

    Func TrayTipExt($sText)
    TrayTip($sTitleChat, $sText, 3)
    $tTrayTipTimer = _Timer_Init()
    If _VersionCompare(@AutoItVersion, "3.3.1.0") = -1 Then
    AdlibEnable("TrayTipTimer", 3100)
    Else
    AdlibRegister("TrayTipTimer", 3100)
    EndIf
    EndFunc ;==>TrayTipExt

    [/autoit] [autoit][/autoit] [autoit]

    Func TrayTipTimer()
    If _Timer_Diff($tTrayTipTimer) > 3000 Then
    TrayTip($sTitleChat, "", 1)
    If _VersionCompare(@AutoItVersion, "3.3.1.0") = -1 Then
    AdlibDisable("TrayTipTimer")
    Else
    AdlibUnRegister("TrayTipTimer")
    EndIf
    EndIf
    EndFunc ;==>TrayTipTimer

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Select
    Case @GUI_CtrlId = $Button5
    $bRestart = True
    EndSelect
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit()
    IniWrite($sIniPath, "LastSettings", "LastIP", $ServerIP)
    IniWrite($sIniPath, "LastSettings", "LastName", $Nickname)
    IniWrite($sIniPath, "LastSettings", "StyleEdit", _ArrayToString($NewStyleEditOnly, "|"))
    IniWrite($sIniPath, "LastSettings", "StyleAll", _ArrayToString($NewStyleAll, "|"))
    SendSpecial($ServerSocket, "Quit", $Nickname)
    TCPCloseSocket($ServerSocket)
    TCPShutdown()
    If $bRestart = True Then ShellExecute(@ScriptFullPath)
    EndFunc ;==>OnAutoItExit

    [/autoit] [autoit][/autoit] [autoit]

    Func SetTransparenz()
    WinSetTrans($sTitleChat, "", GUICtrlRead(@GUI_CtrlId))
    EndFunc ;==>SetTransparenz

    [/autoit] [autoit][/autoit] [autoit]

    Func _GenerateKey()
    Local $TempKey = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $iTemp = 1 To 20
    $TempKey &= Random(0, 10, 1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $sProgID = $TempKey

    [/autoit] [autoit][/autoit] [autoit]

    If RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Multichat", "Key", "REG_SZ", $sProgID) <> 1 Then
    MsgBox(48, "Error", "Programmkey konnte nicht in die Registry geschrieben werden!" & @LF & "Programm wird beendet!")
    Exit
    EndIf
    EndFunc ;==>_GenerateKey

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Im Anhang sind dann nochmal die Quellcodes!

    Sollte mit der derzeitigen Beta-Version von AutoIT problems funktionieren.
    Wäre nett wenn den Chat jemand mal auf den XP, Vista etc testen könnte (bis jetzt nur auf Win 7 x86 getestet)

    MfG oetzn

    Dateien

    Multichat.zip 9,66 kB – 699 Downloads
  • µit Light Dezember 2009

    • oetzn
    • 3. Dezember 2009 um 18:21

    zu deiner sehr wichtigen Frage was die Mehzahl von Datum ist xD

    "Datum" kommt aus dem lateinischen(dare 1 - geben) und bedeutet eigentlich wörtlich "das Gegebene", da es Neutrum ist wäre die richtige Pluralform: Data xD

    wow, das erste Mal in meinem Leben wo ich Latein wirklich gebrauchen konnte -.- sehr deprimierend

  • Usb Manager

    • oetzn
    • 3. Dezember 2009 um 18:09

    habs mir noch nicht angesehen, aber das nächste mal könntest du es mit [autoit][autoit] posten(im 2. [autoit] gehötr vorne ein backslash rein ;) )

  • Lastfmpr (Lastfm Player)

    • oetzn
    • 3. Dezember 2009 um 17:53

    könntest du den Sourcecode auch noch posten pls?
    oder in die .zip mit-reinpacken?

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™