#include-once
#Include <FTPEx.au3>
#include <File.au3>

; #INDEX# =======================================================================================================================
; Title .........: Chat
; AutoIt Version : 3.3.6.1
; Language ......: German, English
; Description ...: Functions to create an own Chat which runs on a FTP-Server.
;                  An internet-connection and a FTP-Server are needed.
; Beschreibung...: Funktionen, um einen eigenen Chat zu erstellen, der über einen FTP-Server läuft.
;                  Es wird eine Internetverbindung und ein FTP-Server benötigt.
; Author(s) .....: xXMurmelkotzeXx
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
; _ChatOpen
; _ChatConnect
; _ChatClose
; _SendMsg
; _ReadMsg
; _ChatReset
; ===============================================================================================================================

; #FUNCTION# ====================================================================================================================
; Name...........: _ChatOpen
; Description ...: Opens the connection to the FTP-Server and creates the lokally chat-directory
; Beschreibung...: Öffnet die Verbindung zum FTP-Server und erstellt den lokalen Chat-Ordner
; Syntax.........: _ChatOpen()
; Parameters ....:
; Parameter......:
; Return values .: Success - Handle to internet session to be used in _ChatConnect().
;                  Failure - A NULL string and sets @ERROR = 1
; Wiederge. Werte: Erfolg - Handle zu der Internet Session, die in _ChatConnect() verwendet wird.
;                  Fehler - Ein NULL String und stzt @ERROR = 1
; Author ........: xXMurmlekotzeXx
; Modified.......:
; Modifiziert....:
; Remarks .......: 
; Bemerkungen....:
; Example .......: #include <Chat.au3>
;                  #include <GUIConstants.au3>
;                  #include <WindowsConstants.au3>
;                  #include <EditConstants.au3>
;                  #Include <GuiEdit.au3>
;                  #include <ScrollBarConstants.au3>
;                  
;                  Global $Main
;                  Global $Messagebox
;                  Global $InputMsg
;                  Global $ChatConnect
;                  
;                  $ChatOpen = _ChatOpen()
;                  $ChatConnect = _ChatConnect($ChatOpen, "www16.funpic.com", "Louis1995", "19Password95")
;                  
;                  $Main = GUICreate("Chat by xXMurmelkotzeXx", 625, 443, 193, 125)
;                  $Messagebox = GUICtrlCreateEdit("", 8, 8, 609, 393, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
;                  GUICtrlSetData(-1, "")
;                  $InputMsg = GUICtrlCreateInput("", 8, 416, 609, 21)
;                  GUISetState(@SW_SHOW)
;                  
;                  HotKeySet("{ENTER}","_Send")
;                  HotKeySet("{F2}","_Clear")
;                  HotKeySet("{ESC}","_Close")
;                  
;                  Func _Send()
;                      _SendMsg(GUICtrlRead($InputMsg), $ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($InputMsg,"")
;                      _Read()
;                  EndFunc
;                  
;                  Func _Read()
;                      $ReadMsg = _ReadMsg($ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($Messagebox,$ReadMsg)
;                  EndFunc
;                  
;                  Func _Clear()
;                      _ChatClear($ChatConnect, "\Chat\Chat.txt")
;                  EndFunc
;                  
;                  While 1
;                      Sleep(500)
;                      _Read()
;                  WEnd
;                  
;                  Func _Close()
;                      _ChatClose($ChatOpen)
;                      Exit
;                  EndFunc
; ===============================================================================================================================

Func _ChatOpen()
	DirCreate(@TempDir &"\Chat")
	$FTPOpen = _FTP_Open("Chat Channel")
	If @error Then
		Return 0
		@error = 1
	Else
		Return $FTPOpen
	EndIf
EndFunc

; #FUNCTION# ====================================================================================================================
; Name...........: _ChatConnect
; Description ...: Starts the connection to the FTP-Server and sets the current directory
; Beschreibung...: Startet die Verbindung zum FTP-Server und erstellt den Chat-Ordner
; Syntax.........: _ChatConnect($ChatOpen, $s_ServerName, $s_Username, $s_Password[, $s_Current = ""])
; Parameters ....: $ChatOpen - As returned by _ChatOpen()
;                  $s_ServerName - The servername of the FTP-Server to connect to.
;                  $s_Username - The username of the FTP-Server to connect to.
;                  $s_Password - The Password of the FTP-Server to connect to, which behaves to the username.
; Parameter......: $ChatOpen - Wie bei _ChatOpen() zurückgegeben.
;                  $s_ServerName - Der Servername von dem FTP-Server, mit dem die Verbindung hergestellt werden soll.
;                  $s_Username - Der Benutzername von dem FTP-Server, mit dem die Verbindung hergestellt werden soll.
;                  $s_Password - Das Passwort, welches zu dem Benutzername gehört, von dem FTP-Server, mit dem die Verbindung hergestellt werden soll.
; Return values .: Success - Returns an identifier.
;                  Failure - A NULL string and sets @ERROR = 1
; Wiederge. Werte: Erfolg - Gibt die Identifizierung wieder.
;                  Fehler - Ein NULL String und setzt @ERROR = 1
; Author ........: xXMurmlekotzeXx
; Modified.......:
; Modifiziert....:
; Remarks .......: 
; Bemerkungen....:
; Example .......: #include <Chat.au3>
;                  #include <GUIConstants.au3>
;                  #include <WindowsConstants.au3>
;                  #include <EditConstants.au3>
;                  #Include <GuiEdit.au3>
;                  #include <ScrollBarConstants.au3>
;                  
;                  Global $Main
;                  Global $Messagebox
;                  Global $InputMsg
;                  Global $ChatConnect
;                  
;                  $ChatOpen = _ChatOpen()
;                  $ChatConnect = _ChatConnect($ChatOpen, "www16.funpic.com", "Louis1995", "19Password95")
;                  
;                  $Main = GUICreate("Chat by xXMurmelkotzeXx", 625, 443, 193, 125)
;                  $Messagebox = GUICtrlCreateEdit("", 8, 8, 609, 393, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
;                  GUICtrlSetData(-1, "")
;                  $InputMsg = GUICtrlCreateInput("", 8, 416, 609, 21)
;                  GUISetState(@SW_SHOW)
;                  
;                  HotKeySet("{ENTER}","_Send")
;                  HotKeySet("{F2}","_Clear")
;                  HotKeySet("{ESC}","_Close")
;                  
;                  Func _Send()
;                      _SendMsg(GUICtrlRead($InputMsg), $ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($InputMsg,"")
;                      _Read()
;                  EndFunc
;                  
;                  Func _Read()
;                      $ReadMsg = _ReadMsg($ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($Messagebox,$ReadMsg)
;                  EndFunc
;                  
;                  Func _Clear()
;                      _ChatClear($ChatConnect, "\Chat\Chat.txt")
;                  EndFunc
;                  
;                  While 1
;                      Sleep(500)
;                      _Read()
;                  WEnd
;                  
;                  Func _Close()
;                      _ChatClose($ChatOpen)
;                      Exit
;                  EndFunc
; ===============================================================================================================================

Func _ChatConnect($ChatOpen, $s_ServerName, $s_Username, $s_Password, $s_Current = "")
	$FTPConnect = _FTP_Connect($ChatOpen, $s_ServerName, $s_Username, $s_Password)
	If @error Then
		Return 0
		$LastError = 0
	Else
		$LastError = 1
	EndIf
	If $s_Current <> "" Then _FTP_DirSetCurrent($FTPConnect, $s_Current)
	If @error And $LastError <> 1 Then
		Return 2
		$LastError = 2
	Else
		$LastError = 1
	EndIf
	If $LastError = 1 Then
		Return $FTPConnect
	EndIf
EndFunc

; #FUNCTION# ====================================================================================================================
; Name...........: _ChatClose
; Description ...: Closes the connection to the FTP-Server
; Beschreibung...: Schließt die Verbindung zum FTP-Server
; Syntax.........: _ChatClose($ChatOpen)
; Parameters ....: $ChatOpen - As returned by _ChatOpen()
; Parameter......: $ChatOpen - Wie bei _ChatOpen() zurückgegeben.
; Return values .: Success - Returns 1
;                  Failure - A NULL string and sets @ERROR = 1
; Wiederge. Werte: Erfolg - Gibt 1 wieder
;                  Fehler - Ein NULL String und setzt @ERROR = 1
; Author ........: xXMurmlekotzeXx
; Modified.......:
; Modifiziert....:
; Remarks .......: 
; Bemerkungen....:
; Example .......: #include <Chat.au3>
;                  #include <GUIConstants.au3>
;                  #include <WindowsConstants.au3>
;                  #include <EditConstants.au3>
;                  #Include <GuiEdit.au3>
;                  #include <ScrollBarConstants.au3>
;                  
;                  Global $Main
;                  Global $Messagebox
;                  Global $InputMsg
;                  Global $ChatConnect
;                  
;                  $ChatOpen = _ChatOpen()
;                  $ChatConnect = _ChatConnect($ChatOpen, "www16.funpic.com", "Louis1995", "19Password95")
;                  
;                  $Main = GUICreate("Chat by xXMurmelkotzeXx", 625, 443, 193, 125)
;                  $Messagebox = GUICtrlCreateEdit("", 8, 8, 609, 393, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
;                  GUICtrlSetData(-1, "")
;                  $InputMsg = GUICtrlCreateInput("", 8, 416, 609, 21)
;                  GUISetState(@SW_SHOW)
;                  
;                  HotKeySet("{ENTER}","_Send")
;                  HotKeySet("{F2}","_Clear")
;                  HotKeySet("{ESC}","_Close")
;                  
;                  Func _Send()
;                      _SendMsg(GUICtrlRead($InputMsg), $ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($InputMsg,"")
;                      _Read()
;                  EndFunc
;                  
;                  Func _Read()
;                      $ReadMsg = _ReadMsg($ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($Messagebox,$ReadMsg)
;                  EndFunc
;                  
;                  Func _Clear()
;                      _ChatClear($ChatConnect, "\Chat\Chat.txt")
;                  EndFunc
;                  
;                  While 1
;                      Sleep(500)
;                      _Read()
;                  WEnd
;                  
;                  Func _Close()
;                      _ChatClose($ChatOpen)
;                      Exit
;                  EndFunc
; ===============================================================================================================================

Func _ChatClose($ChatOpen)
	_FTP_Close($ChatOpen)
	If @error Then
		Return 0
		@error = 1
	Else
		Return 1
	EndIf
EndFunc

; #FUNCTION# ====================================================================================================================
; Name...........: _SendMsg
; Description ...: Sends a chatmessage to a textfile on a FTP-Server
; Beschreibung...: Sendet eine Chatnachricht zu einer Textdatei auf einem FTP-Server
; Syntax.........: _SendMsg($s_Text, $ChatConnect, $s_RemoteTxtFile[, $FunctionToCall = ""])
; Parameters ....: $s_Text - The textmessage to send
;                  $ChatConnect - As returned by _ChatConnect()
;                  $s_RemoteTxtFile - The path of the text file to save the chatmessage to (must be the same like in _ReadMsg())
;                  $FunctionToCall - The function to call after sending the message
; Parameter......: $s_Text - Die zu sendende Nachricht
;                  $ChatConnect - Wie in _ChatConnect() wiedergegeben
;                  $s_RemoteTxtFile - Die Pfad der Textdatei, in der die Chat-Nachricht gespeichert werden soll
;                  $FunctionToCall - Die Funktion, die nach dem Senden der Nachricht ausgeführt werden soll
; Return values .: Success - Returns 1
;                  Failure - A NULL string and sets @ERROR = 1
; Wiederge. Werte: Erfolg - Gibt 1 wieder
;                  Fehler - Ein NULL String und setzt @ERROR = 1
; Author ........: xXMurmlekotzeXx
; Modified.......:
; Modifiziert....:
; Remarks .......: 
; Bemerkungen....:
; Example .......: #include <Chat.au3>
;                  #include <GUIConstants.au3>
;                  #include <WindowsConstants.au3>
;                  #include <EditConstants.au3>
;                  #Include <GuiEdit.au3>
;                  #include <ScrollBarConstants.au3>
;                  
;                  Global $Main
;                  Global $Messagebox
;                  Global $InputMsg
;                  Global $ChatConnect
;                  
;                  $ChatOpen = _ChatOpen()
;                  $ChatConnect = _ChatConnect($ChatOpen, "www16.funpic.com", "Louis1995", "19Password95")
;                  
;                  $Main = GUICreate("Chat by xXMurmelkotzeXx", 625, 443, 193, 125)
;                  $Messagebox = GUICtrlCreateEdit("", 8, 8, 609, 393, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
;                  GUICtrlSetData(-1, "")
;                  $InputMsg = GUICtrlCreateInput("", 8, 416, 609, 21)
;                  GUISetState(@SW_SHOW)
;                  
;                  HotKeySet("{ENTER}","_Send")
;                  HotKeySet("{F2}","_Clear")
;                  HotKeySet("{ESC}","_Close")
;                  
;                  Func _Send()
;                      _SendMsg(GUICtrlRead($InputMsg), $ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($InputMsg,"")
;                      _Read()
;                  EndFunc
;                  
;                  Func _Read()
;                      $ReadMsg = _ReadMsg($ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($Messagebox,$ReadMsg)
;                  EndFunc
;                  
;                  Func _Clear()
;                      _ChatClear($ChatConnect, "\Chat\Chat.txt")
;                  EndFunc
;                  
;                  While 1
;                      Sleep(500)
;                      _Read()
;                  WEnd
;                  
;                  Func _Close()
;                      _ChatClose($ChatOpen)
;                      Exit
;                  EndFunc
; ===============================================================================================================================

Func _SendMsg($s_Text, $ChatConnect, $s_RemoteTxtFile)
	_FTP_FileGet($ChatConnect, $s_RemoteTxtFile, @TempDir &"\Chat\Chat.txt")
	If @error Then
		Return 0
	Else
		$LastError = 1
	EndIf
	$Send = FileOpen(@TempDir &"\Chat\Chat.txt",1)
	FileWrite($Send, $s_Text &@CRLF)
	FileClose($Send)
	_FTP_FilePut($ChatConnect, @TempDir &"\Chat\Chat.txt", $s_RemoteTxtFile)
	If $LastError = 1 Then Return 1
EndFunc
	
; #FUNCTION# ====================================================================================================================
; Name...........: _ReadMsg
; Description ...: Reads the textfile on the FTP-Server (must be the same file like in _SendMsg())
; Beschreibung...: Liest die Textdatei auf dem FTP-Server (muss dieselbe sein wie in _SendMsg())
; Syntax.........: _SendMsg($ChatConnect, $s_RemoteTxtFile)
; Parameters ....: $ChatConnect - As returned by _ChatConnect()
;                  $s_RemoteTxtFile - The path of the text file to read the chatmessage(s) (must be the same like in _SendMsg())
; Parameter......: $ChatConnect - Wie in _ChatConnect() wiedergegeben
;                  $s_RemoteTxtFile - Die Pfad der Textdatei, in der die Chat-Nachricht(en) gelesen werden soll(en)
; Return values .: Success - Returns the aktually chatmessage(s)
;                  Failure - A NULL string and sets @ERROR = 1
; Wiederge. Werte: Erfolg - Gibt die aktuelle Chat-Nachrichten wieder
;                  Fehler - Ein NULL String und setzt @ERROR = 1
; Author ........: xXMurmlekotzeXx
; Modified.......:
; Modifiziert....:
; Remarks .......: 
; Bemerkungen....:
; Example .......: #include <Chat.au3>
;                  #include <GUIConstants.au3>
;                  #include <WindowsConstants.au3>
;                  #include <EditConstants.au3>
;                  #Include <GuiEdit.au3>
;                  #include <ScrollBarConstants.au3>
;                  
;                  Global $Main
;                  Global $Messagebox
;                  Global $InputMsg
;                  Global $ChatConnect
;                  
;                  $ChatOpen = _ChatOpen()
;                  $ChatConnect = _ChatConnect($ChatOpen, "www16.funpic.com", "Louis1995", "19Password95")
;                  
;                  $Main = GUICreate("Chat by xXMurmelkotzeXx", 625, 443, 193, 125)
;                  $Messagebox = GUICtrlCreateEdit("", 8, 8, 609, 393, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
;                  GUICtrlSetData(-1, "")
;                  $InputMsg = GUICtrlCreateInput("", 8, 416, 609, 21)
;                  GUISetState(@SW_SHOW)
;                  
;                  HotKeySet("{ENTER}","_Send")
;                  HotKeySet("{F2}","_Clear")
;                  HotKeySet("{ESC}","_Close")
;                  
;                  Func _Send()
;                      _SendMsg(GUICtrlRead($InputMsg), $ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($InputMsg,"")
;                      _Read()
;                  EndFunc
;                  
;                  Func _Read()
;                      $ReadMsg = _ReadMsg($ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($Messagebox,$ReadMsg)
;                  EndFunc
;                  
;                  Func _Clear()
;                      _ChatClear($ChatConnect, "\Chat\Chat.txt")
;                  EndFunc
;                  
;                  While 1
;                      Sleep(500)
;                      _Read()
;                  WEnd
;                  
;                  Func _Close()
;                      _ChatClose($ChatOpen)
;                      Exit
;                  EndFunc
; ===============================================================================================================================
	
Func _ReadMsg($ChatConnect, $s_RemoteTxtFile)
	_FTP_FileGet($ChatConnect, $s_RemoteTxtFile, @TempDir &"\Chat\Chat.txt")
	If @error Then
		Return 0
	Else
		$LastError = 1
	EndIf
	$Read = FileOpen(@TempDir &"\Chat\Chat.txt")
	$ReadMsg = FileRead($Read)
	FileClose($Read)
	If $LastError = 1 Then Return $ReadMsg
EndFunc

; #FUNCTION# ====================================================================================================================
; Name...........: _ChatClear
; Description ...: Resets the output-panel by deleting all entries
; Beschreibung...: Resettet das Ausgabefenster durch löschen aller Einträge
; Syntax.........: _ChatClear($ChatConnect, $s_RemoteTxtFile)
; Parameters ....: $ChatConnect - As returned by _ChatConnect()
;                  $s_RemoteTxtFile - The path of the text file to delete the chat entries (must be the same like in _SendMsg())
; Parameter......: $ChatConnect - Wie in _ChatConnect() wiedergegeben
;                  $s_RemoteTxtFile - Die Pfad der Textdatei, in der alle Einträge gelöscht werden
; Return values .: Success - Returns 1
;                  Failure - A NULL string and sets @ERROR = 1
; Wiederge. Werte: Erfolg - Gibt 1 wieder
;                  Fehler - Ein NULL String und setzt @ERROR = 1
; Author ........: xXMurmlekotzeXx
; Modified.......:
; Modifiziert....:
; Remarks .......: 
; Bemerkungen....:
; Example .......: #include <Chat.au3>
;                  #include <GUIConstants.au3>
;                  #include <WindowsConstants.au3>
;                  #include <EditConstants.au3>
;                  #Include <GuiEdit.au3>
;                  #include <ScrollBarConstants.au3>
;                  
;                  Global $Main
;                  Global $Messagebox
;                  Global $InputMsg
;                  Global $ChatConnect
;                  
;                  $ChatOpen = _ChatOpen()
;                  $ChatConnect = _ChatConnect($ChatOpen, "www16.funpic.com", "Louis1995", "19Password95")
;                  
;                  $Main = GUICreate("Chat by xXMurmelkotzeXx", 625, 443, 193, 125)
;                  $Messagebox = GUICtrlCreateEdit("", 8, 8, 609, 393, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
;                  GUICtrlSetData(-1, "")
;                  $InputMsg = GUICtrlCreateInput("", 8, 416, 609, 21)
;                  GUISetState(@SW_SHOW)
;                  
;                  HotKeySet("{ENTER}","_Send")
;                  HotKeySet("{F2}","_Clear")
;                  HotKeySet("{ESC}","_Close")
;                  
;                  Func _Send()
;                      _SendMsg(GUICtrlRead($InputMsg), $ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($InputMsg,"")
;                      _Read()
;                  EndFunc
;                  
;                  Func _Read()
;                      $ReadMsg = _ReadMsg($ChatConnect, "\Chat\Chat.txt")
;                      GUICtrlSetData($Messagebox,$ReadMsg)
;                  EndFunc
;                  
;                  Func _Clear()
;                      _ChatClear($ChatConnect, "\Chat\Chat.txt")
;                  EndFunc
;                  
;                  While 1
;                      Sleep(500)
;                      _Read()
;                  WEnd
;                  
;                  Func _Close()
;                      _ChatClose($ChatOpen)
;                      Exit
;                  EndFunc
; ===============================================================================================================================

Func _ChatClear($ChatConnect, $s_RemoteTxtFile)
	_FTP_FileGet($ChatConnect, $s_RemoteTxtFile, @TempDir &"\Chat\Chat.txt")
	If @error Then
		Return 0
	Else
		$LastError = 1
	EndIf
	$Clear = FileOpen(@TempDir &"\Chat\Chat.txt",2)
	FileClose($Clear)
	_FTP_FilePut($ChatConnect, @TempDir &"\Chat\Chat.txt", $s_RemoteTxtFile)
	If $LastError = 1 Then Return 1
EndFunc