Hallo 666Chucky666,
ich habe mal ein wenig rumgebastelt und es so ans Laufen bekommen:
Multichat-Server.au3
#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>
OnAutoItExitRegister("OnAutoItExit")
[/autoit] [autoit][/autoit] [autoit]$tGes = _Timer_Init()
[/autoit] [autoit][/autoit] [autoit]Global Const $sChatLogName = "ChatLog_" & @MDAY & "-" & @MON & "-" & @YEAR & ".log"
Global Const $sGeneralLogName = "GeneralLog_" & @MDAY & "-" & @MON & "-" & @YEAR & ".log"
OnAutoItStart()
[/autoit] [autoit][/autoit] [autoit]LogFile("@compiled: " & @Compiled, "Programm")
LogFile("Pfad zur Exe: " & @AutoItExe, "Programm")
LogFile("PID: " & @AutoItPID, "Programm")
LogFile("AutoItVersion: " & @AutoItVersion, "Programm")
LogFile("", "Programm")
If TCPStartup() <> 1 Then
MsgBox(48, "Error", "TCP-Service konnte nicht gestartet werden!" & @LF & _
"Programm wird beendet!")
Exit
EndIf
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"
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")
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
_FileReadToArray($sBanListPath, $aBanList)
_ArrayDelete($aBanList, 0)
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
Opt("TrayOnEventMode", 1)
Opt("GuiOnEventMode", 1)
Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1)
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
TrayTipExt("Server IP: " & $sIP & "" & @LF _
& "Computername: " & $sPCNetworkName)
TraySetToolTip("Server IP: " & $sIP & "" & @LF _
& "Computername: " & $sPCNetworkName)
#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
#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
#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
#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 ###
GUISetOnEvent($GUI_EVENT_CLOSE, "ToggleClientGUI", $hClientverwaltung)
GUISetOnEvent($GUI_EVENT_CLOSE, "HideChatGUI", $hMainGUI)
GUICtrlSetState($Input1, $GUI_FOCUS)
[/autoit] [autoit][/autoit] [autoit]Global $hListView1 = GUICtrlGetHandle($ListView1)
Global $hListView2 = GUICtrlGetHandle($ListView2)
_GUICtrlListView_AddColumn($hListView2, "Andere Clients", 125)
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
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
$TempSocket = ""
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>CheckSocket
[/autoit] [autoit][/autoit] [autoit]Func CheckIncoming()
Local $aData[1]
Local $TempUsers
For $iIndex = 0 To UBound($aUsers, 1) - 1
$TempData = TCPRecv($aUsers[$iIndex][0], 8192)
Select
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)
If $TempSearchResultName <> -1 And StringLen($aUsers[$TempSearchResultName][2]) > 0 Then
TCPSend($aUsers[$TempSearchResultName][0], "//Kick(DoubleName)")
TCPCloseSocket($aUsers[$TempSearchResultName][0])
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
For $i = 1 To UBound($aUsers, 1) - 1
$TempUsers = $aUsers[$i][2] & ";" & $TempUsers
Next
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)
Case StringLeft($TempData, 5) = "//Key"
$TempData = StringTrimLeft($TempData, 6)
$TempData = StringTrimRight($TempData, 1)
If $TempData = "" Then ContinueCase
[/autoit] [autoit][/autoit] [autoit]$aUsers[$iIndex][3] = $TempData
$TempSearchResultKey = _ArraySearch($aBanList, $TempData)
If $TempSearchResultKey <> -1 Then
$sBannedUser = _ArraySearch($aUsers, $TempData)
TCPSend($aUsers[$sBannedUser][0], "//Kick(Banned)")
TCPCloseSocket($aUsers[$sBannedUser][0])
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
Else
TCPSend($aUsers[$iIndex][0], "//Allowed")
EndIf
$aUsers[$sBannedUser][0] = ""
$aUsers[$sBannedUser][1] = ""
$aUsers[$sBannedUser][2] = ""
$aUsers[$sBannedUser][3] = ""
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])
$aUsers[$TempSearch][0] = ""
$aUsers[$TempSearch][1] = ""
$aUsers[$TempSearch][2] = ""
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))
Case StringLen($TempData) > 0
_ArrayAdd($aData, $TempData)
EndSelect
Next
If StringLen($aData[(UBound($aData, 1) - 1)]) > 0 Then
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
EndIf
[/autoit] [autoit][/autoit] [autoit]$TempUsers = ""
$TempData = ""
$TempSearchResultName = ""
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
Func AFKKick()
EndFunc ;==>AFKKick
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
Func LogFile($sData, $sType)
Switch $sType
Case "Chat"
_FileWriteLog(@ScriptDir & "\" & $sChatLogName, $sData)
Case "Programm"
_FileWriteLog(@ScriptDir & "\" & $sGeneralLogName, $sData)
EndSwitch
EndFunc ;==>LogFile
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
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
Func KickSelected()
For $iIndex = 0 To $iMaxIndexClientList - 1
$TempStatus = _GUICtrlListView_GetItem($hListView1, $iIndex)
If BitAND($TempStatus[0], = 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] = ""
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
_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
$TempStatus = ""
$iTempIndex = ""
$TempSearchResult = ""
EndFunc ;==>KickSelected
[/autoit] [autoit][/autoit] [autoit]Func BanSelected()
For $iIndex = 0 To $iMaxIndexClientList - 1
$TempStatus = _GUICtrlListView_GetItem($hListView1, $iIndex)
If BitAND($TempStatus[0], = 8 Then
$TempSearchResult = _ArraySearch($aUsers, _GUICtrlListView_GetItemText($hListView1, $iIndex))
If $TempSearchResult <> -1 Then
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
TCPSend($aUsers[$TempSearchResult][0], "//Kick(AdminBan)")
TCPCloseSocket($aUsers[$TempSearchResult][0])
$aUsers[$TempSearchResult][0] = ""
$aUsers[$TempSearchResult][1] = ""
$aUsers[$TempSearchResult][3] = ""
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
_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
$TempStatus = ""
$iTempIndex = ""
$TempSearchResult = ""
EndFunc ;==>BanSelected
[/autoit] [autoit][/autoit] [autoit]Func _AdminChat()
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($Input1, $GUI_FOCUS)
GUISetState(@SW_SHOW, $hMainGUI)
TrayItemSetState(@TRAY_ID, 68)
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
Case StringLower($sDataAdmin) = "shutdown"
LogFile("Programm wird von Admin per Chatbefehle beendet!", "Programm")
LogFile("", "Programm")
Exit
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
Case StringLower(StringLeft($sDataAdmin, 4)) = "ban "
$sName = StringRight($sDataAdmin, StringLen($sDataAdmin) - 4)
$TempSearchResult = _ArraySearch($aUsers, $sName)
If $TempSearchResult <> -1 Then
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
TCPSend($aUsers[$TempSearchResult][0], "//Kick(AdminBan)")
TCPCloseSocket($aUsers[$TempSearchResult][0])
$aUsers[$TempSearchResult][0] = ""
$aUsers[$TempSearchResult][1] = ""
$aUsers[$TempSearchResult][3] = ""
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
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
GUICtrlSetData($Input1, "")
GUICtrlSetState($Input1, $GUI_FOCUS)
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
Func HideChatGUI()
GUISetState(@SW_HIDE, $hMainGUI)
EndFunc ;==>HideChatGUI
Func OnAutoItStart()
LogFile("", "Programm")
LogFile(" --- SERVER STARTUP --- ", "Programm")
LogFile("", "Programm")
LogFile("", "Chat")
LogFile(" --- SERVER STARTUP --- ", "Chat")
LogFile("", "Chat")
EndFunc ;==>OnAutoItStart
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
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
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
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
Func TrayTipExt($sText)
TrayTip($sTitle, $sText, 3)
$tTrayTipTimer = _Timer_Init()
EndFunc ;==>TrayTipExt
Func RefreshStuff()
If _Timer_Diff($tTrayTipTimer) > 3000 Then TrayTip($sTitle, "", 1)
$iLastMins = $iMins
$iLastHour = $iHours
_TicksToTime(_Timer_Diff($tGes), $iHours, $iMins, $iSecs)
[/autoit] [autoit][/autoit] [autoit]If $iLastMins <> $iMins Or $iLastHour <> $iHours Then
$Time = StringFormat("%02i:%02i", $iHours, $iMins)
TraySetToolTip("Server IP: " & $sIP & "" & @LF _
& "Computername: " & $sPCNetworkName & "" & @LF _
& "Server läuft: " & $Time)
EndIf
EndFunc ;==>RefreshStuff
Func WriteMemo($sData, $sNameEdit)
GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & @HOUR & ":" & @MIN & " ~ " & $sNameEdit & " > " & $sData & @CRLF)
EndFunc ;==>WriteMemo
Gruß
M3d1c5