Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #region ;**** Directives created by AutoIt3Wrapper_GUI ****
- #AutoIt3Wrapper_UseUpx=n
- #AutoIt3Wrapper_UseX64=n
- #AutoIt3Wrapper_Change2CUI=y
- #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
- #cs
- INI Structure:
- AccountCounter -> Accounts = Anzahl
- IDAccount -> ID = "Accountname"
- AccountID -> "Accountname" = ID
- IDPassword -> ID = Password
- Packets:
- Login -> Login:Benutzername:Passwort
- Register -> Register:Benutzername:Passwort
- #ce
- TCPStartup()
- DirCreate(@ScriptDir & "\Database\")
- $DatabaseDir = @ScriptDir & "\Database\Datenbank.ini"
- If Not FileExists($DatabaseDir) Then IniWrite($DatabaseDir, "AccountCounter", "Accounts", 0)
- $Mainsocket = TCPListen("127.0.0.1", 2121, 100) ;IP Adresse ändern für !!!!
- ConsoleWrite("Starting SynSoft Loginserver..." & @CRLF)
- ConsoleWrite("Database Test..." & @CRLF)
- ConsoleWrite(IniRead($DatabaseDir, "AccountCounter", "Accounts", 0) & " registered Accounts found..." & @CRLF)
- ConsoleWrite(@CRLF&@CRLF&@CRLF)
- While 1
- $NewSocket = TCPAccept($Mainsocket)
- If $NewSocket >= 0 Then
- Do
- $Recv = TCPRecv($NewSocket, 2048) ;Bei gleichzeitigen anfragen von clients sollte ein array verwendet werden
- Until $Recv <> ""
- $RecvSplitted = StringSplit($Recv,":")
- If $RecvSplitted[1] = "Login" Then
- If _TestAccount($RecvSplitted[2], $RecvSplitted[3]) = 1 Then
- TCPSend($NewSocket, "True")
- ConsoleWrite("["& @HOUR&":"& @MIN&":"& @SEC&"] Successfull Login with Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) & @CRLF)
- ElseIf _TestAccount($RecvSplitted[2], $RecvSplitted[3]) <> 1 Then
- TCPSend($NewSocket, "False")
- ConsoleWrite("[" &@HOUR&":"& @MIN&":"& @SEC&"] Failed Login attempt with Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) & @CRLF)
- EndIf
- ElseIf $RecvSplitted[1] = "Register" Then
- If _TestAccountTimes($RecvSplitted[2]) <> -2 Then
- If $RecvSplitted[3] <> "" Then
- _AddAccount($RecvSplitted[2],$RecvSplitted[3])
- ConsoleWrite("[" &@HOUR&":"& @MIN&":"& @SEC&"] Succesfull Registration of Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) & @CRLF)
- TCPSend($NewSocket,"True")
- ElseIf $RecvSplitted[3] = "" Then
- ConsoleWrite("[" &@HOUR&":"& @MIN&":"& @SEC&"] Failed Registration of Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) & @CRLF)
- TCPSend($NewSocket,"False")
- EndIf
- ElseIf _TestAccountTimes($RecvSplitted[2]) = -2 Then
- ConsoleWrite("[" &@HOUR&":"& @MIN&":"& @SEC&"] Failed Registration of Account " & $RecvSplitted[2] & " from "& _SocketToIP($NewSocket) & @CRLF)
- TCPSend($NewSocket,"False")
- EndIf
- EndIf
- EndIf
- WEnd
- Func _AddAccount($AccountName, $AccountPasswort)
- Local $AccAnzahl = IniRead($DatabaseDir, "AccountCounter", "Accounts", "ERROR") ;Anzahl von Accounts laden
- If $AccAnzahl = "ERROR" Then
- MsgBox(0, "Error", "Datenbankfehler - Accountanzahl nicht ladbar" ;Überprüfen ob -1 Funktioniert hat
- Return 0
- EndIf
- IniWrite($DatabaseDir, "AccountCounter", "Accounts", $AccAnzahl + 1)
- IniWrite($DatabaseDir, "IDAccount", $AccAnzahl + 1, $AccountName)
- IniWrite($DatabaseDir, "AccountID", $AccountName, $AccAnzahl + 1)
- IniWrite($DatabaseDir, "IDPassword", $AccAnzahl + 1, $AccountPasswort)
- If $AccAnzahl + 1 = IniRead($DatabaseDir, "AccountID", $AccountName, 0) Then Return 1
- EndFunc ;==>_AddAccount
- Func _TestAccount($AccountName, $AccountPasswort)
- Local $AccAnzahl = IniRead($DatabaseDir, "AccountCounter", "Accounts", "ERROR") ;Anzahl von Accounts laden
- For $i = $AccAnzahl To 0 Step -1
- Local $AccLoop = IniRead($DatabaseDir, "IDAccount", $i, "Error")
- If $AccLoop = $AccountName Then
- ExitLoop
- EndIf
- Next
- If IniRead($DatabaseDir, "IDPassword", $i, "Error") = $AccountPasswort Then
- Return 1
- ElseIf IniRead($DatabaseDir, "IDPassword", $i, "Error") <> $AccountPasswort Then
- Return 0
- EndIf
- EndFunc ;==>_TestAccount
- 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 _TestAccountTimes($AccountName)
- Local $AccAnzahl = IniRead($DatabaseDir, "AccountCounter", "Accounts", "ERROR") ;Anzahl von Accounts laden
- For $i = $AccAnzahl To 0 Step -1
- Local $AccLoop = IniRead($DatabaseDir, "IDAccount", $i, "Error")
- If $AccLoop = $AccountName Then
- Return -2
- ExitLoop
- EndIf
- Next
- EndFunc ;==>_TestAccountTimes
Add Comment
Please, Sign In to add comment