Ich hab kein Plan wie oft das Thema hier schon existiert aber egal
Ist mein erster Post in dem Forum, glaube xD
. geschrieben habe ich einen Chat ( Server und CLient ) mit dem man , ja, wie der Name schon sagt, chatten kann
Dabei sieht man allerdings sowohl im Serverbereich als auch im Chatbereich in einer Gui wie viel und welche User online sind und man kann dann privat mit ihnen chatten... aber auch öffentlich, global, allgemein.. etc. kp.
Der Quelltext ist relativ gering, gut dafür sind die Funktionen auch übersichtlich, um nicht das Wort "spartanisch" verwenden zu müssen.. xD
"Screen´s"
Spoiler anzeigen
(Oben links = Server )
(Oben rechts, Unten Links, Unten Rechts = Client (für den User vorgesehenen Chat))
[Blockierte Grafik: http://file1.npage.de/003952/94/bilder/all.png]
Server only:
[Blockierte Grafik: http://file1.npage.de/003952/94/bilder/server.png]
Client only:
[Blockierte Grafik: http://file1.npage.de/003952/94/bilder/client.png]
Quellcode Server:
Spoiler anzeigen
;SERVER
[/autoit] [autoit][/autoit] [autoit]#include
#include
#include
#Include
#Include
#include
#include
$win = GUICreate("SERVER BY SUPERCOPRA",600,500)
GUISetBkColor(0x606060)
Global $EDIT = GUICtrlCreateEdit("",0,0,450,400,$es_readonly)
GUICtrlSetColor(-1,0x00ff00)
GUICtrlSetBkColor(-1,0x000000)
GUICtrlSetFont(-1,9,1000)
;Global $lv = _GUICtrlListView_Create($win,"User Online",450,0,150,400)
Global $LV = GUICtrlCreateListView("USER",450,0,150,400)
_GUICtrlListView_SetColumnWidth($lv,0,140)
;_GUICtrlListView_SetBkColor($LV, 0x000000)
;_GUICtrlListView_SetTextBkColor($LV, 0x000000)
;_GUICtrlListView_SetTextColor($LV, 0x00ffff)
GUICtrlSetColor($lv,0xffff00)
GUICtrlSetBkColor($lv,0x000000)
GUICtrlSetFont($lv,9,1000)
Global $b_start = GUICtrlCreateButton("Starte Server",450,400,150,25)
GUICtrlSetFont(-1,9,1000)
GUICtrlSetCursor(-1,0)
Global $graph = GUICtrlCreateGraphic(450,425,150,50)
GUICtrlSetBkColor(-1,0xff0000)
Global $b_close = GUICtrlCreateButton("Schließe Server",450,475,150,25)
GUICtrlSetFont(-1,9,1000)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetCursor(-1,0)
Global $input = GUICtrlCreateInput("",0,400,400,25)
Global $b_send = GUICtrlCreateButton("Senden",400,400,50,25)
GUICtrlSetCursor(-1,0)
Global $label_loop = GUICtrlCreateLabel("000000 RPS",1,485)
GUICtrlSetColor(-1,0x00ff00)
GUICtrlSetFont(-1,9,1000)
GUICtrlCreateGroup("User-Control",5,430,440,50)
Global $label_user = GUICtrlCreateLabel("User:",15,450,200)
GUICtrlSetFont(-1,9,1000)
Global $b_user_kick = GUICtrlCreateButton("Kicken",230,445,100,25)
GUICtrlSetCursor(-1,0)
GUICtrlSetState($b_user_kick,$gui_disable)
Global $b_user_send = GUICtrlCreateButton("Senden",340,445,100,25)
GUICtrlSetCursor(-1,0)
GUICtrlSetState($b_user_send,$gui_disable)
Global $b_user_array = GUICtrlCreateButton("show User-Array (ACHTUNG: Verbindung in WArteschleife)",140,482,305,15)
GUICtrlSetCursor(-1,0)
Global $loop1 = TimerInit()
Global $loop2 = TimerInit()
Global $loop3 = TimerInit()
Global $STAT = -1
Global $IP = @IPAddress1
Global $Port = 12345 ;TEST port
Global $verbindung
Global $MAX = 100
Global $USER[$MAX+1][10]
;0 Socket
;1 Ip-Adresse
;2 IDentifikation
;3 Name
;4 Status (4=bereit)
;8 TEmp-Speicher
;9 temp-timer
Global $USER_N[$MAX+1]
Global $KEY = "Venzol123!?"
Global $VALUE = "Siegbert Schnoesel"
Global $LEVEL = 5
Global $SECURE = _StringEncrypt(1,$value,$key,$level)
Global $select[3]
GUISetState(@sw_show)
While 1
$a = GUIGetMsg()
Switch $a
case -3
Exit
case $b_start
_Server_start()
case $b_close
_Server_close()
Case $b_send
_send_server_msg()
Case $b_user_send
_send_user()
Case $b_user_kick
_kick_user()
Case $b_user_array
_ArrayDisplay($user)
EndSwitch
if $stat = 1 Then
;Receives pro Sekunde PRO ALLE SOckets !
if TimerDiff($loop1) > 1000 Then
$loop1 = TimerInit()
$wert = Int(1000 / $loop3)
if $wert < 10 Then
GUICtrlSetColor($label_loop,0xff0000)
Else
GUICtrlSetColor($label_loop,0x00ff00)
EndIf
GUICtrlSetData($label_loop,$wert & " RPS") ;Rec pro sekunde
EndIf
$loop3 = TimerDiff($loop2)
$loop2 = TimerInit()
;User Control
$select[0] = _GUICtrlListView_GetSelectionMark($lv)
if Not ($select[1] = $select[0]) Then
$select[1] = $select[0]
if $select[0] = -1 Then
GUICtrlSetData($label_user,"User: ")
GUICtrlSetState($b_user_send,$gui_disable)
GUICtrlSetState($b_user_kick,$gui_disable)
$select[2] = ""
Else
$name_select = _GUICtrlListView_GetItemText($lv,$select[0])
GUICtrlSetData($label_user,"User: " & $name_select)
GUICtrlSetState($b_user_send,$gui_enable)
GUICtrlSetState($b_user_kick,$gui_enable)
$select[2] = $name_select
EndIf
EndIf
;MAAAAIIIINNNNNNNN FUNC
_work()
EndIf
WEnd
func _work()
;NEUER EINGANG
$temp = TCPAccept($verbindung)
if not ($temp = -1) Then
_new_user($temp)
EndIf
for $i = 0 To $MAX
;IDENTIFIZIEREN
if $user[$i][4] = 1 Then
$temp = TCPRecv($user[$i][0],4096)
if TimerDiff($user[$i][2]) > 3000 Then
_info($user[$i][1] & " - Zeitüberschreitung!")
_user_del($i)
Elseif $temp = "" Then
ContinueLoop
ElseIf $temp = $SECURE Then
_info($user[$i][1] & " - hat sich identifiziert")
TCPSend($user[$i][0],"/Secure/1")
$user[$i][4] = 2
$user[$i][2] = TimerInit()
EndIf
;NAMENSGEBUNG
ElseIf $user[$i][4] = 2 Then
$temp = TCPRecv($user[$i][0],50)
if $temp = "" Then
if TimerDiff($user[$i][2]) > 3000 Then
_info($user[$i][1] & " - Zeitüberschreitung!")
_user_del($i)
EndIf
Else
$test = $temp
$k = 0
While 1
$fehler = 0
For $m = 0 to $MAX
;ConsoleWrite($i & ": " & $user[$m][3] & "=" & $test & @CRLF)
if $user[$m][3] = $test Then
$fehler = 1
ExitLoop
EndIf
Next
if $fehler = 1 Then
$k += 1
$test = $temp & "[" & $k & "]"
Else
ExitLoop
EndIf
WEnd
_info($user[$i][1] & " - bekommt Namen: " & $test)
;_GUICtrlListView_AddItem($lv,$test)
TCPSend($user[$i][0],"/name/" & $test & "}")
$user[$i][4] = 3
$user[$i][3] = $test
_user_new($i)
$temp = GUICtrlCreateListViewItem($user[$i][3],$lv)
$USER_N[$i] = $temp
EndIf
;PRÜFEN BIS ALLES BEARBEITET WURDE
ElseIf $user[$i][4] = 3 Then
$temp = TCPRecv($user[$i][0],50)
if $temp = "" Then
ElseIf $temp = "/bereit/" Then
_info($user[$i][3] & " ist bereit zum Chatten")
$user[$i][4] = 4 ; BEREIT
EndIf
;ROUTINE ARBEIT
ElseIf $user[$i][4] = 4 Then
$temp = TCPRecv($user[$i][0],4096)
if @error Then
_info($user[$i][3] & " hat den Chat verlassen!")
TCPCloseSocket($user[$i][0])
$test = GUICtrlDelete($user_N[$i])
;MUSS NOCH NE LIS VIE AKTUALISIERUNG HIN
_user_del($i)
EndIf
if not ($temp = "") Then
_befehle($temp,$i)
EndIf
EndIf
Next
EndFunc
Func _send_user()
$text = GUICtrlRead($input)
if $text = "" Then
Else
_info("PRIVAT-MSG to " & $select[2] & ": " & '"' & $text & '"')
GUICtrlSetData($input,"")
for $k = 0 to $max
if $user[$k][3] = $select[2] Then
TCPSend($user[$k][0],"/text/" & @CRLF & " " & $text & "}")
Return 1
EndIf
Next
EndIf
EndFunc
Func _kick_user()
for $l = 0 to $max
if $select[2] = $user[$l][3] Then
TCPCloseSocket($user[$l][0])
_user_del($l)
GUICtrlDelete($user_N[$l])
$user_N[$l] = ""
_GUICtrlListView_SetSelectionMark($lv,-1)
Return 1
EndIf
Next
EndFunc
func _user_del($count) ;GLOBAL
$temp = $user[$count][3]
for $i = 0 to 9
$user[$count][$i] = ""
Next
for $n = 0 to $MAX
if $user[$n][3] = "" Then
Else
TCPSend($user[$n][0],"/user_del/" & $temp & "}")
EndIf
Next
EndFunc
Func _user_new($count) ;Global
$temp = $user[$count][3]
for $n = 0 to $MAX
if $user[$n][3] = "" Then
Else
TCPSend($user[$n][0],"/user_new/" & $temp & "}")
EndIf
Next
EndFunc
Func _new_user($temp) ;LOCAL
for $i = 0 to $MAX
if $USER[$i][0] = "" Then
$user[$i][0] = $temp
$user[$i][1] = SocketToIP($user[$i][0])
$user[$i][2] = TimerInit()
$user[$i][4] = 1
_info($user[$i][1] & " versucht zu connecten!")
Return
EndIf
Next
EndFunc
Func _server_start()
GUICtrlSetState($b_start,$gui_disable)
_info("IP: " & $IP &" (" & _GetIP() & ") - Port: " & $Port)
TCPStartup()
$verbindung = TCPListen($Ip,$port)
if $verbindung = -1 Then
_info("Fehler beim hochfahren!")
GUICtrlSetState($b_start,$gui_enable)
GUICtrlSetState($b_close,$gui_disable)
Else
GUICtrlSetBkColor($graph,0x00ff00)
_info("Server gestartet")
$stat = 1
GUICtrlSetState($b_close,$gui_enable)
EndIf
EndFunc
Func _Server_close()
GUICtrlSetState($b_close,$gui_disable)
TCPCloseSocket($verbindung)
for $i = 0 to $MAX
if $user[$i][0] = "" Then
Else
TCPCloseSocket($user[$i][0])
if $user[$i][3] = "" Then
Else
GUICtrlDelete($user_n[$i])
EndIf
EndIf
$user[$i][0] = ""
$user[$i][1] = ""
$user[$i][2] = ""
$user[$i][3] = ""
$user[$i][4] = ""
$user[$i][5] = ""
$user[$i][6] = ""
$user[$i][7] = ""
$user[$i][8] = ""
$user[$i][9] = ""
$user_n[$i] = ""
Next
GUICtrlSetData($label_user,"User: ")
GUICtrlSetState($b_user_send,$gui_disable)
GUICtrlSetState($b_user_kick,$gui_disable)
GUICtrlSetData($label_loop,"000000 RPS")
TCPShutdown()
GUICtrlSetBkColor($graph,0xff0000)
_info("Server herruntergefahren")
$stat = 0
GUICtrlSetState($b_start,$gui_enable)
EndFunc
Func _info($text)
$time = "[" & @hour & ":" & @MIN & ":" & @SEC & "] "
_GUICtrlEdit_AppendText($edit,@crlf & $time & " " & $text)
_scroll_end()
EndFunc
Func _user_info($text)
$time = "[" & @hour & ":" & @MIN & ":" & @SEC & "] "
_GUICtrlEdit_AppendText($edit,@crlf & $time & " " & $text)
_scroll_end()
EndFunc
;FUNC AUS DER HILFEDATEI
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
[/autoit] [autoit][/autoit] [autoit]$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
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc
Func _befehle($source,$wer=-1) ;(wer = von wem die anfrage kommt)
$DATA = StringSplit($source,"}")
for $n = 1 to $DATA[0]
$code = "/text/"
if StringLeft($DATA[$n],stringlen($code)) = $code Then
_user_info("[Global - " & $user[$wer][3] & "] " & StringTrimLeft($DATA[$n],stringlen($code)))
;_info()
for $i = 0 to $MAX
if $user[$i][3] = "" Then
Else
; SENDET TEXT AN ALLES USER !
TCPSend($user[$i][0],"/text/" & @CRLF & "[Global von '" & $user[$wer][3] & "'] " & StringTrimLeft($DATA[$n],stringlen($code)) & "}")
EndIf
Next
EndIf
$code = "/text_privat/"
if StringLeft($DATA[$n],stringlen($code)) = $code Then
;_info()
for $i = 0 to $MAX
if $user[$i][3] = "" Then
Else
; SENDET TEXT AN PRIVAT USER !
$temp = StringSplit(StringTrimLeft($DATA[$n],stringlen($code)),"/")
if $temp[0] = 2 Then
for $k = 0 to $MAX
if $user[$k][3] = $temp[1] Then
$target = $K
ExitLoop
EndIf
Next
TCPSend($user[$wer][0],"/text/" & @CRLF & "[Privat zu '" & $user[$target][3] & "'] " & $temp[2] & "}")
TCPSend($user[$target][0],"/text/" & @CRLF & "[Privat von '" & $user[$wer][3] & "'] " & $temp[2] & "}")
_user_info("[Privat - " & $user[$wer][3] & " zu " & $user[$target][3] & "] " & $temp[2])
;TCPSend($user[$i][0],"/text/" & @CRLF & "[Privat zu '" & $user[$target][3] & "'] " & StringTrimLeft($DATA[$n],stringlen($code)) & "}")
;TCPSend($user[$target][0],"/text/" & @CRLF & "[Privat von '" & $user[$wer][3] & "'] " & StringTrimLeft($DATA[$n],stringlen($code)) & "}")
ExitLoop
Else
ExitLoop
EndIf
EndIf
Next
EndIf
[/autoit] [autoit][/autoit] [autoit];USER AKTUALISIERUNG - ALLE USER
$code = "/GET_USER_ALL/"
if $DATA[$n] = $code Then
dim $anhang
for $i = 0 to $MAX
if $user[$i][3] = "" Then
Else
$anhang &= $user[$i][3] & @CRLF
EndIf
Next
TCPSend($user[$wer][0],"/GET_USER_ALL/" & $anhang & "}")
EndIf
Next
EndFunc
Func _send_server_msg()
$text = GUICtrlRead($input)
if $text = "" Then
Else
_info("MSG: " & '"' & $text & '"')
GUICtrlSetData($input,"")
for $k = 0 to $max
if $user[$k][3] = "" Then
Else
TCPSend($user[$k][0],"/text/" & @CRLF & " " & $text & "}")
EndIf
Next
EndIf
EndFunc
func _scroll_end()
_GUICtrlEdit_LineScroll($edit,0,_GUICtrlEdit_GetLineCount($edit))
EndFunc
QUellcode Client ( Chat programm für den Benutzer )
Spoiler anzeigen
;CLIENT
[/autoit] [autoit][/autoit] [autoit]#include
#include
#include
#Include
#Include
#include
#include
#include
#include
$win = GUICreate("Login",500,400)
GUISetBkColor(0x000000)
$l_name = GUICtrlCreateLabel("Bitte geben Sie ihren Namen ein!",5,5,490,15)
GUICtrlSetColor(-1,0xffffff)
GUICtrlSetFont(-1,8,1000)
$input_name = GUICtrlCreateInput("",5,20,490,30,$ss_center)
GUICtrlSetFont(-1,14,1000)
GUICtrlSetColor(-1,0x00ff00)
GUICtrlSetBkColor(-1,0x606060)
$b_login = GUICtrlCreateButton("Login",5,55,150,30)
GUICtrlSetFont(-1,12,1000)
GUICtrlSetCursor(-1,0)
$lv = GUICtrlCreateListView("User online",0,0,150,375)
_GUICtrlListView_SetColumnWidth($lv,0,140)
GUICtrlSetBkColor($lv,0x000000)
GUICtrlSetColor($lv,0xa0ff00)
GUICtrlSetFont($lv,9,1000)
$l_time = GUICtrlCreateLabel("00:00:00",150,5,350,15,$ss_center)
GUICtrlSetColor(-1,0xffffff)
GUICtrlSetFont(-1,10,1000)
$edit = GUICtrlCreateEdit("© by Supercopra",150,20,350,330,$es_readonly)
GUICtrlSetBkColor($edit,0x000000)
GUICtrlSetColor($edit,0x00ff00)
GUICtrlSetFont($edit,8,1000)
$input = GUICtrlCreateInput("",150,350,350,25)
GUICtrlSetBkColor(-1,0x202020)
GUICtrlSetFont($input,9,1000)
GUICtrlSetColor(-1,0x00ff00)
$b_send = GUICtrlCreateButton("Senden (Enter)",150,375,350,25) ;----> istn running ?!?! O.o :(;$BS_DEFPUSHBUTTON)
GUICtrlSetCursor(-1,0)
GUICtrlSetState($b_send,$GUI_DEFBUTTON)
$b_chat_art = GUICtrlCreateButton("zum Privatchat",0,375,150,25)
GUICtrlSetBkColor($b_chat_art,0x00AAAA)
GUICtrlSetCursor(-1,0)
_set(2,$gui_hide)
Global $IP = @IPAddress1
Global $Port = 12345 ;test Port
Global $KEY = "Venzol123!?"
Global $VALUE = "Siegbert Schnoesel"
Global $LEVEL = 5
Global $SECURE = _StringEncrypt(1,$value,$key,$level)
Global $UNAME
Global $stat = -1
Global $UHR
Global $verbindung
Global $MAX = 100
Global $user[$MAX+1][2]
;Global $open[$max+1][3] ;1 = OPEN PRIVATS NAME , 2 = OPEN PRIVATS ID, 3 = Windows-Fenster
Global $alow_ref = -1
Global $spamschutz = -1
Global $spamschutz_time = 1500
Global $chat_art = 1 ; 1 = global , 2 = Privat
Global $selection = -1
GUISetState(@sw_show)
While 1
_SCHELIFE()
WEnd
func _SCHELIFE()
$a = GUIGetMsg()
Switch $a
case -3
Exit
case $b_login
_login()
EndSwitch
if $stat = 1 Then
$temp = _GUICtrlListView_GetSelectionMark($lv)
if $selection = $temp Then
Else
$na = _GUICtrlListView_GetItemText($lv,$temp)
$selection = $temp
if $selection = -1 Then
if $chat_art = 2 Then
WinSetTitle($win,"","Privatchat (niemand ausgewählt)")
EndIf
Else
if $chat_art = 2 Then
if Not ($na = $Uname) Then
WinSetTitle($win,"","Privatchat mit "& '"' & $na & '"')
EndIf
EndIf
EndIf
EndIf
Switch $a
Case $b_send
_send()
Case $b_chat_art
if $chat_art = 1 Then
$chat_art = 2
GUICtrlSetBkColor($b_chat_art,0xAAAA00)
GUICtrlSetData($b_chat_art,"zum Globalchat")
WinSetTitle($win,"","Privatchat mit (niemand ausgewählt)")
$selection = -2
GUICtrlSetState($b_send,$GUI_DEFBUTTON)
Else
$chat_art = 1
$selection = -2
GUICtrlSetBkColor($b_chat_art,0x00AAAA)
GUICtrlSetData($b_chat_art,"zum Privatchat")
WinSetTitle($win,"","GlobalChat")
GUICtrlSetState($b_send,$GUI_DEFBUTTON)
EndIf
EndSwitch
;SENDEN
if _IsPressed("0d") and not (WinActive($win) = 0) Then _send()
;EMPFANGEN ETC.
_woark()
;SPAMSCHUTZ entfernen
if not ($spamschutz = -1) And TimerDiff($spamschutz) > $spamschutz_time Then
$spamschutz = -1
GUICtrlSetState($input,$gui_enable)
GUICtrlSetData($input,"")
ControlFocus($win,"",$input)
EndIf
EndIf
EndFunc
func _woark()
;TIME
if $UHR = @HOUR & ":" & @min & ":" & @SEC Then
Else
$UHR = @HOUR & ":" & @min & ":" & @SEC
GUICtrlSetData($l_time,$UHR & " Uhr - " & StringLeft($Uname,25))
EndIf
;EMPFANGEN
$temp = TCPRecv($verbindung,4096)
if @error Then
_set(2,$gui_hide)
_set(1,$gui_show)
_set(-1,$gui_enable)
$stat = -1
For $i = 0 to $MAX
if $user[$i][1] = "" Then
Else
GUICtrlDelete($user[$i][0])
$user[$i][0] = ""
$user[$i][1] = ""
EndIf
Next
GUICtrlSetData($edit,"© by Supercopra")
GUICtrlSetData($l_name,"Bitte geben Sie ihren Namen ein!")
$alow_ref = -1
MsgBox(48,"Verbindungsabbruch","Verbindung zum Server verloren!")
EndIf
if $temp = "" Then
Else
_befehl($temp)
EndIf
EndFunc
Func _set($was,$wie = $gui_show)
if $was = 1 Then ;LOGIN
$chat_art = 1
GUICtrlSetState($l_name,$wie)
GUICtrlSetState($input_name,$wie)
GUICtrlSetState($b_login,$wie)
if $wie = $gui_show Then WinSetTitle($win,"","Login")
ElseIf $was = 2 Then ;CHAT
GUICtrlSetState($lv,$wie)
GUICtrlSetState($l_time,$wie)
GUICtrlSetState($edit,$wie)
GUICtrlSetState($input,$wie)
GUICtrlSetState($b_send,$wie)
GUICtrlSetState($b_chat_art,$wie)
if $wie = $gui_show Then
$chat_art = 1
$selection = -2
GUICtrlSetBkColor($b_chat_art,0x00AAAA)
GUICtrlSetData($b_chat_art,"zum Privatchat")
WinSetTitle($win,"","GlobalChat")
GUICtrlSetState($b_send,$GUI_DEFBUTTON)
EndIf
ElseIf $was = -1 Then ;LOGIN ?!?
GUICtrlSetState($input_name,$wie)
GUICtrlSetState($b_login,$wie)
EndIf
EndFunc
func _login()
_set(-1,$gui_disable)
$name = GUICtrlRead($input_name)
$test2 = StringSplit($name,"}")
if StringLen($name) < 3 Then
MsgBox(48,"Achtung","Der Name muss mindestens 3 Zeichen lang sein!")
_set(-1,$gui_enable)
Return
ElseIf StringLeft($name,1) = "/" Then
MsgBox(48,"Achtung","Ungültiger Name: '/' ist nicht erlaubt!")
_set(-1,$gui_enable)
Return
ElseIf $test2[0] >= 2 Then
MsgBox(48,"Achtung","Ungültiger Name: '}' ist nicht erlaubt!")
_set(-1,$gui_enable)
Return
EndIf
TCPStartup()
GUICtrlSetData($l_name,"Verbinde mit dem Server...")
$verbindung = TCPConnect($IP,$port)
if $verbindung = -1 Then
MsgBox(48,"Fehlgeschlagen","Das Herrstellen einer Verbindung zum Server schlug fehl!" _
& @crlf & "Er ist vermutlich offline!")
GUICtrlSetData($l_name,"Bitte geben Sie ihren Namen ein!")
_set(-1,$gui_enable)
Return
EndIf
;IDENTIFIZIEREN
TCPSend($verbindung,$SECURE)
;BESTÄTIGUNG DER IDENTIFIKATION ABWARTEN
$timer = TimerInit()
While 1
Sleep(1)
if TimerDiff($timer) > 3000 Then
MsgBox(48,"Fehler","Server reagiert nicht mehr!")
GUICtrlSetData($l_name,"Bitte geben Sie ihren Namen ein!")
_set(-1,$gui_enable)
Return
Else
$emp = TCPRecv($verbindung,50)
if Not ($emp = "") Then
if $emp = "/Secure/1" Then
ExitLoop
EndIf
EndIf
EndIf
WEnd
;SENDE NAMEN
TCPSend($verbindung,$name)
;BESTÄTIGUNG DEs NAMENS ABWARTEN
$timer = TimerInit()
While 1
Sleep(1)
if TimerDiff($timer) > 3000 Then
MsgBox(48,"Fehler","Server reagiert nicht mehr!")
GUICtrlSetData($l_name,"Bitte geben Sie ihren Namen ein!")
_set(-1,$gui_enable)
Return
Else
$emp = TCPRecv($verbindung,50)
$temp = StringSplit($emp,"}")
For $o = 1 to $temp[0]
if StringLeft($temp[$o],6) = "/name/" Then
$emp = StringTrimLeft($temp[$o],6)
ExitLoop
EndIf
Next
if Not ($emp = "") Then
$UNAME = $emp
WinSetTitle($win,"","GlobalChat")
ExitLoop
EndIf
EndIf
WEnd
;SENDE BEREITSCHAFFT
TCPSend($verbindung,"/bereit/")
_set(1,$gui_hide)
_set(2,$gui_show)
$stat = 1
Sleep(500)
TCPSend($verbindung,"/GET_USER_ALL/")
return 1
EndFunc
Func _befehl($source)
;WENN TCP RECV, 2x TCP SEND annimmt -.-
$DATA = StringSplit($source,"}")
For $n = 1 to $DATA[0]
;GESCHRIEBENES empfangen !
$code = "/text/"
if StringLeft($DATA[$n],stringlen($code)) = $code Then
_GUICtrlEdit_AppendText($edit,StringTrimLeft($DATA[$n],stringlen($code)))
_GUICtrlEdit_LineScroll($edit,0,_GUICtrlEdit_GetLineCount($edit))
EndIf
;SPEZIELLE CODES AB HIER:
$code = "/GET_USER_ALL/"
if StringLeft($DATA[$n],stringlen($code)) = $code Then
$user2 = StringTrimLeft($DATA[$n],stringlen($code))
$sp = StringSplit($user2,@crlf)
;_GUICtrlListView_DeleteAllItems($lv)
for $i = 1 to $sp[0]
if $sp[$i] = "" or ($sp[$i] = $uname) Then
Else
for $j = 0 to $MAX
if $user[$j][1] = "" Then
$user[$j][0] = GUICtrlCreateListViewItem($sp[$i],$lv)
$user[$j][1] = $sp[$i]
ExitLoop
EndIf
Next
;_GUICtrlListView_AddItem($lv,$sp[$i])
EndIf
Next
$alow_ref = 1
ContinueLoop
EndIf
;USER_OFFLINE (del):
$code = "/User_del/"
if StringLeft($DATA[$n],stringlen($code)) = $code Then
$user2 = StringTrimLeft($DATA[$n],stringlen($code))
;_GUICtrlListView_DeleteAllItems($lv)
for $j = 0 to $max
if $user[$j][1] = $user2 Then
GUICtrlDelete($user[$j][0])
$user[$j][0] = ""
$user[$j][1] = ""
ExitLoop
EndIf
Next
_GUICtrlListView_SetSelectionMark($lv,-1)
ContinueLoop
EndIf
;USER_Online (new):
if $alow_ref = 1 Then
$code = "/User_new/"
if StringLeft($DATA[$n],stringlen($code)) = $code Then
$user2 = StringTrimLeft($DATA[$n],stringlen($code))
;_GUICtrlListView_DeleteAllItems($lv)
$fehler = -1
for $j = 0 to $max
if $user[$j][1] = $user2 or $user2 = $uname Then
$fehler = 1
ExitLoop
EndIf
Next
if $fehler -1 Then
for $j = 0 to $max
if $user[$j][1] = "" Then
$user[$j][0] = GUICtrlCreateListViewItem($user2,$lv)
$user[$j][1] = $user2
ExitLoop
EndIf
Next
EndIf
ContinueLoop
EndIf
EndIf
Next
EndFunc
Func _send()
if $spamschutz = -1 Then
$text = GUICtrlRead($input)
$sec = StringSplit($text,"}")
if $sec[0] >= 2 Then
MsgBox(48,"Ungültiger Text","Achtung!" & @crlf & @crlf & "Ungültige Zeichen sind im Text, den sie versenden wollen, enthalten." & @crlf & _
"Das Zeichen: " & '"' & "}" & '"' & " ist für den fließenden Programmverlauf vorbehalten!")
Return
EndIf
if $text = "" Then
Else
GUICtrlSetData($input,"Spamschutz: " & $spamschutz_time/1000 & " Sekunden!")
GUICtrlSetState($input,$gui_disable)
$spamschutz = TimerInit()
if $chat_art = 1 Then
$inhalt = "/text/" & $text & "}"
TCPSend($verbindung,$inhalt)
Else
$temp = _GUICtrlListView_GetSelectionMark($lv)
if $temp = -1 Then
MsgBox(48,"Hinweis","Wenn Sie einem User privat schreiben wollen," & @crlf _
& "müssen Sie einen (in der linken Liste) anklicken!")
Return -1
Else
$temp2 = _GUICtrlListView_GetItemText($lv,$temp)
if $temp2 = $uname Then
MsgBox(48,"-.-","Sie haben sich selbst angewählt," & _
@crlf & "Sie würden sich selbst schreiben. :P")
Else
$inhalt = "/text_privat/" & $temp2 & "/" & $text & "}"
TCPSend($verbindung,$inhalt)
EndIf
EndIf
EndIf
EndIf
EndIf
EndFunc
Server muss nicht vor dem CLienten gestartet werden ABER, wenn er nicht an ist kann man natürlich nicht "connecten" xD
Warum ich den Post hier mache:
1. Verbesserungsvorschläge, Kritik, FLames xD, etx evntl Lob...
2. Ist die Schleife ( in _work() ) effizent ? oder kann man das beschleunigen? bzw ist es schlimm wenn der Durchlauf der Schleife mal ne Sekunde dauert ? wenn zb 100 User angemeldet sind ?
3. Langeweile... xD ist klar...
die "compiled" Programme:
Server:
Server.exe
Client:
CLient.exe
mfG...