#cs ----------------------------------------------------------------------------

	AutoIt Version: 3.3.6.0

	Author:         myName

	Script Function: Template AutoIt script.

#ce ----------------------------------------------------------------------------
;--Includes --------------------------------------------------------------------
#include-once
;--Global Defines --------------------------------------------------------------
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include "Tcp.au3"
;--Start Script ----------------------------------------------------------------
#Region ### START Koda GUI section ###
$ClientGui = GUICreate("Client", 360, 275, 192, 124)
$SerIpLnEdit = GUICtrlCreateInput("", 72, 16, 273, 21)
$SerPtrLnEdit = GUICtrlCreateInput("", 72, 48, 273, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))
$Label1 = GUICtrlCreateLabel("Server Ip: ", 8, 16, 53, 17, $SS_CENTERIMAGE)
$Label2 = GUICtrlCreateLabel("Server Port", 8, 56, 57, 17, $SS_CENTERIMAGE)
$ConnectButton = GUICtrlCreateButton("Connect", 72, 240, 75, 25)
$DataEdit = GUICtrlCreateEdit("", 72, 112, 273, 121, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
$DisconnectButton = GUICtrlCreateButton("Disconnect", 168, 240, 75, 25)
$CloseButton = GUICtrlCreateButton("Exit", 272, 240, 75, 25)
$TxButton = GUICtrlCreateButton("Tx", 8, 208, 59, 25)
$TxLnEdit = GUICtrlCreateInput("", 72, 80, 273, 21)
$Label3 = GUICtrlCreateLabel("Tx Data.", 8, 80, 45, 17, $SS_NOPREFIX)


Global $closeReq


;==Skript=Starts=Here========
    init()
;============================
	main()
;============================
	shdown()
;==Skript=Ends=Here==========


;-- Main Function Definitions --------------------------------------------------

;--------------------------------------------------------
;	Name.......:	Init
;	Parameter..:	None
;	Return.....:	None
;
;	Discription:	Init function for the skript
;
;--------------------------------------------------------
Func init()

	Tcp_Init()
	$closeReq = False
	GUISetState(@SW_SHOW,$ClientGui)

EndFunc

;--------------------------------------------------------
;	Name.......:	Main
;	Parameter..:	None
;	Return.....:	None
;
;	Discription:	Main Function for the skript
;
;--------------------------------------------------------
Func main ()

	While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			CloseProgramm()
		Case $ConnectButton
			Connect()
		Case $DisconnectButton
			Disconnect()
		Case $CloseButton
			CloseProgramm()
		Case $TxButton
			TxData()
	EndSwitch
	RxData()
	Tcp_Main()
	If GetCloseRequest() Then ExitLoop
WEnd

EndFunc


;--------------------------------------------------------
;	Name.......:	Shdown
;	Parameter..:	None
;	Return.....:	None
;
;	Discription:	Shutdown function for the skript
;
;--------------------------------------------------------
Func shdown()
	Tcp_Shutdown()
EndFunc

;-- Other Function Definitions -------------------------------------------------
Func Connect()
	Local $ip, $port
	$ip   = _GUICtrlEdit_GetText($SerIpLnEdit )
	$port = _GUICtrlEdit_GetText($SerPtrLnEdit)
	If $ip <> "" And $port <> "" Then
		Local $ret   = Tcp_ConnectToServer($ip,$port)
		Local $error = @error
		If $ret = 1 Then  _GUICtrlEdit_AppendText($DataEdit,"Connected to Server" & @CRLF)
		If $ret = -1 Then _GUICtrlEdit_AppendText($DataEdit,"Error: " & Tcp_SwitchErrorFlagToString($error) & @CRLF)
	Else
		_GUICtrlEdit_AppendText($DataEdit,"No Ip/Port..." & @CRLF)
	EndIf
EndFunc


Func Disconnect()
	If Tcp_IsConnected() = 1 Then
		Local $ret = Tcp_DisconnectFromServer()
		Local $error = @error
		If $ret = 1 Then _GUICtrlEdit_AppendText($DataEdit,"Disconnected" & @CRLF)
		If $ret = -1 Then _GUICtrlEdit_AppendText($DataEdit,"Error: " & Tcp_SwitchErrorFlagToString($error) & @CRLF)
	Else
		_GUICtrlEdit_AppendText($DataEdit,"Not connected..." & @CRLF)
	EndIf
EndFunc


Func TxData()
	If Tcp_IsConnected() = 1 Then
		Local $data = _GUICtrlEdit_GetText($TxLnEdit)
		Local $mainSock = Tcp_GetMainSocket()
		If $data <> "" Then	Tcp_Send($mainSock,$data)
		_GUICtrlEdit_SetText($TxLnEdit,"")
		_GUICtrlEdit_AppendText($DataEdit,"Ich:" & @CRLF & "  >>>"& $data & @CRLF)
	Else
		_GUICtrlEdit_AppendText($DataEdit,"Can not send data, not connected" & @CRLF)
	EndIF
EndFunc

Func RxData()
	If Tcp_IsConnected() = 1 Then
		Local $socket = Tcp_GetMainSocket()
		Local $data = Tcp_Receive($socket)
		Local $error = @error
		If $data <> "" And $error = 0 Then
			Local $avData = StringSplit($data,"|")
			If IsArray($avData) And UBound($avData) >= 3 Then
				Local $ip = $avData[1]
				Local $splitData
				For $i = 2 To UBound($avData) - 1
					$splitData &= $avData[$i]
				Next
				_GUICtrlEdit_AppendText($DataEdit,$ip & ":" & @CRLF & "  >>>" & $splitData &@CRLF)
			EndIf
		EndIf
	EndIf
EndFunc

Func CloseProgramm()
	$closeReq = True
EndFunc


Func GetCloseRequest()
	Return $closeReq
EndFunc