#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 ###
$ServerGui = GUICreate("Server", 316, 296, 399, 245)
$ServerStartButton = GUICtrlCreateButton("Start Server", 8, 264, 75, 25)
$StopServerButton = GUICtrlCreateButton("Stop Server", 88, 264, 75, 25)
$CloseButton = GUICtrlCreateButton("Close", 232, 264, 75, 25)
$DataEdit = GUICtrlCreateEdit("", 8, 72, 297, 185, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
$Label4 = GUICtrlCreateLabel("Connected Clients And Data:", 8, 48, 141, 17)
$PortLnEdit = GUICtrlCreateInput("", 104, 8, 209, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))
$Label1 = GUICtrlCreateLabel("Port:", 8, 8, 26, 17, $SS_CENTERIMAGE)


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,$ServerGui)

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 $ServerStartButton
				StartServer()
			Case $StopServerButton
				StopServer()
			Case $CloseButton
				CloseProgramm()
		EndSwitch
		Local $avAdd = Tcp_Main()
		If $avAdd[0][0] <> - 1 Then _GUICtrlEdit_AppendText($DataEdit,"New Client: Socket - " &  $avAdd[0][0] & @CRLF)
		If $avAdd[0][1] <> - 1 Then _GUICtrlEdit_AppendText($DataEdit,"Client Disconnected: Socket - " &  $avAdd[0][1] & @CRLF)

		DataHandler()
		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 StartServer()
	$port = _GUICtrlEdit_GetText($PortLnEdit)
	If $port <> "" Then
		Local $ret = Tcp_StartServer($port)
		Local $error = @error
		If $ret = 1 Then  _GUICtrlEdit_AppendText($DataEdit,"Server started.." & @CRLF)
		If $ret = -1 Then _GUICtrlEdit_AppendText($DataEdit,"Error: " & Tcp_SwitchErrorFlagToString($error) & @CRLF)
	Else
		_GUICtrlEdit_AppendText($DataEdit,"No Port..." & @CRLF)
	EndIf
EndFunc



Func StopServer()
	If Tcp_IsListen() = 1 Then
		Local $ret = Tcp_CloseServer()
		Local $error = @error
		If $ret = 1 Then  _GUICtrlEdit_AppendText($DataEdit,"Server stopped.." & @CRLF)
		If $ret = -1 Then _GUICtrlEdit_AppendText($DataEdit,"Error: " & Tcp_SwitchErrorFlagToString($error) & @CRLF)
	Else
		_GUICtrlEdit_AppendText($DataEdit,"Server is not running..." & @CRLF)
	EndIf
EndFunc


Func CloseProgramm()
	$closeReq = True
EndFunc


Func GetCloseRequest()
	Return $closeReq
EndFunc

Func DataHandler()
	If Tcp_IsListen() = 1 Then
		For $i = 1 To Tcp_GetNumberOfConnectedSockets()
			Local $socket = Tcp_GetSocketByIndex($i)
			Local $data = Tcp_Receive($socket)
			Local $error = @error
			If $data <> "" And @error = 0 Then
				For $j = 1 To Tcp_GetNumberOfConnectedSockets()
					Local $socket2 = Tcp_GetSocketByIndex($j)
					Local $ip = Tcp_SocketToIP($socket2)
					If $socket <> $socket2 Then Tcp_Send($socket2,$ip & "|" &$data)
				Next
				_GUICtrlEdit_AppendText($DataEdit,Tcp_SocketToIP($socket2) & ":" & @CRLF & "  >>>" & $data & @CRLF)
			EndIf
		Next
	EndIf
EndFunc