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
#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>
$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")
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()
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
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("i:i", $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
Client Quellcode:
Spoiler anzeigen
#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>
If TCPStartup() <> 1 Then
MsgBox(48, "Error", "TCP-Service konnte nicht gestartet werden!" & @LF & _
"Programm wird beendet!")
Exit
EndIf
Opt("TrayOnEventMode", 1)
Opt("GuiOnEventMode", 1)
Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1)
Opt("TrayIconDebug", 0)
Opt("TCPTimeout", 500)
TraySetToolTip("Eigene IP-Adresse: " & @IPAddress1)
[/autoit] [autoit][/autoit] [autoit]Global Const $sTitleLogin = "Chat-Login"
Global Const $sIniPath = @ScriptDir & "\Client.ini"
Global $sProgID
If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Multichat", "Key") = "" Then
_GenerateKey()
Else
$sProgID = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Multichat", "Key")
EndIf
Global $sTitleChat = "Multichat"
Global $tTrayTipTimer
$sTemp1 = IniRead($sIniPath, "LastSettings", "StyleEdit", "")
$sTemp2 = IniRead($sIniPath, "LastSettings", "StyleAll", "")
If $sTemp1 <> "" Then $NewStyleEditOnly = StringSplit($sTemp1, "|", 2)
If $sTemp2 <> "" Then $NewStyleAll = StringSplit($sTemp2, "|", 2)
Global $NewStyleEditOnly
Global $NewStyleAll
Global $sLastIP = IniRead($sIniPath, "LastSettings", "LastIP", "")
Global $sLastName = IniRead($sIniPath, "LastSettings", "LastName", "")
#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 ###
#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 ###
#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 ###
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hLoginGUI)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hMainGUI)
GUISetOnEvent($GUI_EVENT_CLOSE, "HideStyleGUI", $hChangeStyle)
Global $hListView1 = GUICtrlGetHandle($ListView1)
Global $ServerSocket
Global $ServerIP
Global $Nickname
Global $bRestart = False
_GUICtrlListView_AddColumn($hListView1, "Andere Clients", 125)
[/autoit] [autoit][/autoit] [autoit]SaveStyle()
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hLoginGUI)
WinActivate($sTitleLogin)
While 1
Sleep(10)
WEnd
Func Connect()
[/autoit] [autoit][/autoit] [autoit]Local $intTryConnect = 0
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($Input3, $GUI_FOCUS)
GUICtrlSetState($Button2, $GUI_DEFBUTTON)
GUICtrlSetData($Progress1, 0)
[/autoit] [autoit][/autoit] [autoit]$ServerIP = GUICtrlRead($Input1)
$Nickname = GUICtrlRead($Input2)
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
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
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
Do
$ServerSocket = TCPConnect($ServerIP, 2150)
GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 10)
$intTryConnect += 1
Sleep(500)
Until $intTryConnect > 5 Or $ServerSocket <> -1
If $intTryConnect > 5 Then
GUICtrlSetData($Progress1, 0)
MsgBox(48, "Error", "Server nach 5 Verbindungsversuchen nicht erreichbar!")
Return -1
EndIf
TrayTip($sTitleChat, "Warte bis der Server die Verbindung zulässt...", 20)
$TimerWaitAccept = _Timer_Init()
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
Do
Sleep(100)
$TempRecv = TCPRecv($ServerSocket, 1024)
If @error Then
TrayTipExt("Verbindungsversuch wurde abgelehnt..")
GUICtrlSetData($Progress1, 0)
Return -1
EndIf
If _Timer_Diff($TimerWaitAccept) > 15000 Then
MsgBox(48, "Error", "Verbindungstimeout (15 Sekunden) wurde erreicht!" & @LF & _
"Verbindungsversuch wurde abgebrochen!")
GUICtrlSetData($Progress1, 0)
Return -2
EndIf
If GUIGetMsg() = $Button11 Then
GUICtrlSetData(0, $Progress1)
Opt("GuiOnEventMode", 1)
MsgBox(48, "Abbruch", "Verbindungsversuch wurde abgebrochen!")
Return -3
EndIf
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")
SendSpecial($ServerSocket, "Key", $sProgID)
Sleep(500)
SendSpecial($ServerSocket, "Name", $Nickname)
GUISetState(@SW_HIDE, $hLoginGUI)
GUISetState(@SW_SHOW, $hMainGUI)
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)
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
Case StringLeft($TempData, 6) = "//Kick"
$TempData = StringTrimLeft($TempData, 7)
$TempData = StringTrimRight($TempData, 1)
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
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
Case "Banned"
GUISetState(@SW_HIDE, $hMainGUI)
MsgBox(48, "Verbindung verloren!", "Sie sind auf diesem Server gebannt!")
Return -1
Case "AdminBan"
GUISetState(@SW_HIDE, $hMainGUI)
MsgBox(48, "Verbindung verloren!", "Sie wurden soeben auf diesem Server gebannt!")
Return -2
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,
$TempData = StringTrimRight($TempData, 1)
$aTempUsers = StringSplit($TempData, ";")
WriteMemo("'" & $aTempUsers[1] & "' ist dem Chat beigetreten!", "Server")
_GUICtrlListView_DeleteAllItems($hListView1)
For $i = 1 To $aTempUsers[0]
If $aTempUsers[$i] = "" Then ContinueLoop
_GUICtrlListView_AddItem($hListView1, $aTempUsers[$i])
Next
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))
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))
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))
Case IsArray($aRecv) And @error <> 1
WriteMemo($aRecv[2], $aRecv[0])
EndSelect
EndIf
ConsoleWrite("Durchlaufdauer von 'Check Incoming' beträgt: " & @LF & _Timer_Diff($TestTimer) & @LF & @LF)
EndFunc ;==>CheckIncoming
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
Func _Send()
Local $intTrySend = 0
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
Do
$TCPData = TCPSend($ServerSocket, $Nickname & "|" & @IPAddress1 & "|" & GUICtrlRead($Input3))
$intTrySend += 1
Until $intTrySend > 5 Or $TCPData > 0
If $intTrySend > 5 Then
WriteMemo("Konnte Daten nicht an den Server schicken!", "Error")
Else
GUICtrlSetData($Input3, "")
EndIf
EndFunc ;==>_Send
[/autoit] [autoit][/autoit] [autoit]Func SendSpecial($Socket, $sType, $sData)
TCPSend($Socket, "//" & $sType & "(" & $sData & ")")
EndFunc ;==>SendSpecial
Func WriteMemo($sData, $sNameEdit)
GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & @HOUR & ":" & @MIN & " ~ " & $sNameEdit & " > " & $sData & @CRLF)
EndFunc ;==>WriteMemo
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
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
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
Func HideStyleGUI()
Switch _WinAPI_IsWindowVisible($hChangeStyle)
Case True
GUISetState(@SW_HIDE, $hChangeStyle)
Case False
GUISetState(@SW_SHOW, $hChangeStyle)
EndSwitch
EndFunc ;==>HideStyleGUI
Func ShowHideMultichat()
Switch _WinAPI_IsWindowVisible($hMainGUI)
Case True
GUISetState(@SW_HIDE, $hMainGUI)
Case False
GUISetState(@SW_SHOW, $hMainGUI)
EndSwitch
EndFunc ;==>ShowHideMultichat
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
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
Func _Exit()
Select
Case @GUI_CtrlId = $Button5
$bRestart = True
EndSelect
Exit
EndFunc ;==>_Exit
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
Func SetTransparenz()
WinSetTrans($sTitleChat, "", GUICtrlRead(@GUI_CtrlId))
EndFunc ;==>SetTransparenz
Func _GenerateKey()
Local $TempKey = ""
For $iTemp = 1 To 20
$TempKey &= Random(0, 10, 1)
Next
$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
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