#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIEdit.au3>
#include <Misc.au3>
#include <String.au3>

OnAutoItExitRegister("_Exit")
Opt("GUIOnEventMode", 1)

$hForm_Main = GUICreate("Server", 187, 339, 367, 146)
$hEdit_Chronik = GUICtrlCreateEdit("", 8, 8, 169, 289, $ES_READONLY)
 GUICtrlSetData(-1, @MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC&@CRLF&"Chat gestartet..."&@CRLF&@CRLF)
$hInput_Eingabe = GUICtrlCreateInput("", 8, 312, 169, 21)
 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
 GUISetState(@SW_SHOW)
 
TCPStartup()
 
$hListenSocket = TCPListen(@IPAddress1, 4321)
$sEncryptPW = "ac9,b18" ; Passwort zum Ver- und Entschlüsseln der Narichten
$sUsername = "Server" ; Benutzername im Chat

While Sleep(20) ; Hauptschleife, überprüft ob Narichten ankommen oder Eingabe gedrückt wird.
   If _IsPressed("0D") Then
	  While(_IsPressed("0D"))
		 Sleep(5)
	  WEnd
	  If GUICtrlRead($hInput_Eingabe) <> "" Then _SendMSG()
   EndIf
   $hAcceptSocket = TCPAccept($hListenSocket)
   If $hAcceptSocket <> -1 Then _GetMSG($hAcceptSocket)
WEnd ;==> Ende der Hauptschleife

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Funktionen~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Func _SendMSG()
   $sMSGClear = $sUsername&": "
   $sMSGClear &= GUICtrlRead($hInput_Eingabe)
   $sMSG = _StringEncrypt(1, $sMSGClear, $sEncryptPW)
   
   $hConSocket = TCPConnect(@IPAddress1, 4322)
   If $hConSocket = -1 Then 
	  MsgBox(16, "Error", "Server Fehler #01, es konnte keine Verbindung hergestellt werden!")
	  Return
   EndIf
   
   $iBytesSended = TCPSend($hConSocket, $sMSG)
   If $iBytesSended = 0 Then 
	  MsgBox(16, "Error", "Server Fehler #02, Naricht konnte nicht gesendet werden!")
	  Return
   EndIf
	  
   $sChronik = GUICtrlRead($hEdit_Chronik)
   $sChronik &= @MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC&@CRLF
   $sChronik &= $sMSGClear& @CRLF&@CRLF
   GUICtrlSetData($hEdit_Chronik, $sChronik)
   GUICtrlSetData($hInput_Eingabe, "")
   _GUICtrlEdit_LineScroll($hEdit_Chronik, 1, 0xfffffff)
   
   TCPCloseSocket($hConSocket)
EndFunc;==>_SendMSG

Func _GetMSG($hAcceptSocket)
   $sRecvCrypt = TCPRecv($hAcceptSocket, 1024)
   $sRecv = _StringEncrypt(0, $sRecvCrypt, $sEncryptPW)
   
   $sChronik = GUICtrlRead($hEdit_Chronik)
   $sChronik &= @MDAY&"."&@MON&"."&@YEAR&" - "&@HOUR&":"&@MIN&":"&@SEC&@CRLF
   $sChronik &= $sRecv&@CRLF&@CRLF
   GUICtrlSetData($hEdit_Chronik, $sChronik)
   _GUICtrlEdit_LineScroll($hEdit_Chronik, 1, 0xfffffff)
   SoundPlay(@ScriptDir&"\res\MSG.mp3")
   
   TCPCloseSocket($hAcceptSocket)
EndFunc;==>_GetMSG

Func _Exit()
   TCPCloseSocket($hListenSocket)
   TCPShutdown()
   Exit
EndFunc;==>_Exit