#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.6.1 Author: Matwachich Script Function: Client de tchat réseau local TCP. #ce ---------------------------------------------------------------------------- #include #include #include #include #include #include Opt("GUIOnEventMode", 1) #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Chat", 314, 380) GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close") $m_client = GUICtrlCreateMenu("Client") $m_connect = GUICtrlCreateMenuItem("(Re)connect", $m_client) GUICtrlSetOnEvent(-1, "_connect") $m_disconnect = GUICtrlCreateMenuItem("Disconnect", $m_client) GUICtrlSetOnEvent(-1, "_M_disconnect") $m_config = GUICtrlCreateMenuItem("Configuration", $m_client) GUICtrlSetOnEvent(-1, "_M_config") GUICtrlCreateMenuItem("", $m_client) $m_exit = GUICtrlCreateMenuItem("Exit", $m_client) GUICtrlSetOnEvent(-1, "_exit") $m_edit = GUICtrlCreateMenu("Edit") $m_clients_list = GUICtrlCreateMenuItem("Clients list", $m_edit) GUICtrlSetOnEvent($m_clients_list, "_queryClientslist") $m_free = GUICtrlCreateMenuItem("Free console", $m_edit) GUICtrlSetOnEvent($m_free, "_free") $chat = GUICtrlCreateEdit("", 8, 8, 297, 249, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$WS_VSCROLL));, BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE)) GUICtrlSetData(-1, "") GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") $send = GUICtrlCreateEdit("", 8, 264, 297, 57, $ES_AUTOVSCROLL) $b_nick = GUICtrlCreateButton("Set nick", 232, 328, 75, 25, BitOR($BS_FLAT,$WS_GROUP)) GUICtrlSetOnEvent(-1, "b_nickClick") $b_send = GUICtrlCreateButton("Envoyer", 8, 328, 89, 25, BitOR($BS_FLAT,$WS_GROUP)) GUICtrlSetOnEvent(-1, "b_sendClick") GUISetState(@SW_SHOW) Dim $Form1_AccelTable[1][2] = [["{ENTER}", $b_send]] GUISetAccelerators($Form1_AccelTable) #EndRegion ### END Koda GUI section ### Global $Form2, $l_ip, $l_port, $l_nick, $Label1, $Label2, $Label3, $b_ok, $b_cancel Global $hSocket, $ip, $port, $iniName = "client.ini" _connect() ; connexion While 1 Sleep(100) WEnd Func _exit() ConsoleWrite('(F) _exit' & @CRLF) _M_disconnect() Sleep(500) GUIDelete($Form1) Exit EndFunc Func _queryClientslist() ; envoi au serveur une requette pour la liste des clients connectés _TCP_Send($hSocket, "/clients list") EndFunc Func _M_config() ; ouvre la fenetre de configuration: ip, port, et pseudo (nick) par defauts ConsoleWrite('(F) _M_config' & @CRLF) #Region ### START Koda GUI section ### Form= $Form2 = GUICreate("Configuration", 179, 136, -1, -1, -1, -1, $Form1) GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close") $l_ip = GUICtrlCreateInput("", 48, 16, 121, 21) $l_port = GUICtrlCreateInput("", 48, 40, 121, 21) $l_nick = GUICtrlCreateInput("", 48, 72, 121, 21) $Label1 = GUICtrlCreateLabel("Ip", 8, 16, 13, 17) $Label2 = GUICtrlCreateLabel("Port", 8, 40, 23, 17) $Label3 = GUICtrlCreateLabel("Nick", 8, 72, 26, 17) $b_ok = GUICtrlCreateButton("Ok", 8, 104, 75, 25, $WS_GROUP) GUICtrlSetOnEvent(-1, "b_okClick") $b_cancel = GUICtrlCreateButton("Cancel", 96, 104, 75, 25, $WS_GROUP) GUICtrlSetOnEvent(-1, "Form2Close") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### GUICtrlSetData($l_ip, IniRead($iniName, "config", "ip", "127.0.0.1")) GUICtrlSetData($l_port, IniRead($iniName, "config", "port", "8080")) GUICtrlSetData($l_nick, IniRead($iniName, "config", "nick", "")) EndFunc Func Form2Close() ; fonction de fermeture de la fenetre de configuration ConsoleWrite('(F) Form2Close' & @CRLF) GUIDelete($Form2) EndFunc Func b_okClick() ; confirmation de la configuration et ecriture des nouvelles données ConsoleWrite('(F) b_okClick' & @CRLF) IniWrite($iniName, "config", "ip", GUICtrlRead($l_ip)) IniWrite($iniName, "config", "port", GUICtrlRead($l_port)) IniWrite($iniName, "config", "nick", GUICtrlRead($l_nick)) Form2Close() ; fermeture de la fenetre de configuration EndFunc Func _receive($hSocket, $sReceived, $iError) ; fonction de reception ConsoleWrite('(F) _receive' & @CRLF) Local $tmp = IniRead($iniName, "config", "nick", "") If $sReceived = "SERVER: Please identify yourself!" And $tmp <> "" Then ; si il existe une valeur par defaut pour le pseudo, le client vous identifie alors automatiquement aupres du serveur! _TCP_Send($hSocket, "setNick:" & $tmp) _write("Indentification...") Else _write($sReceived) ; sinon, le client se contente d'ecrire ce que lui envoit le serveur EndIf EndFunc Func _disconnected($hSocket, $iError) ; fonction qui detecte la deconnection (ne fait qu'écrire que vous etes deconnectéà ConsoleWrite('(F) _disconnected' & @CRLF) _write("DISCONNECTED FROM SERVER") EndFunc Func _M_disconnect() ; fonction de deconnexion volontaire ConsoleWrite('(F) _M_disconnect' & @CRLF) _TCP_Client_Stop($hSocket) ; extinction du client _write("DISCONNECTING!") EndFunc Func b_nickClick() ; envoi de l'identification au serveur (bouton 'set nick') ConsoleWrite('(F) b_nickClick' & @CRLF) Local $sSend = "setNick:" & GUICtrlRead($send) _TCP_Send($hSocket, $sSend) GUICtrlSetData($send, "") EndFunc Func b_sendClick() ; envoi d'un message standard au serveur ConsoleWrite('(F) b_sendClick' & @CRLF) _TCP_Send($hSocket, GUICtrlRead($send)) GUICtrlSetData($send, "") EndFunc Func Form1Close() ; fermeture ConsoleWrite('(F) Form1Close' & @CRLF) _TCP_Client_Stop($hSocket) ; extinction du client GUIDelete($Form1) Exit EndFunc Func _write($data) ; fonction qui ecris sur la console de chat ConsoleWrite('(F) _write' & @CRLF) Local $old = GUICtrlRead($chat) GUICtrlSetData($chat, "> " & $data & @CRLF & $old) EndFunc Func _connect() ; fonction de connection ConsoleWrite('(F) _connect' & @CRLF) Local $ret = 0 _TCP_Client_Stop($hSocket) ; stop d'abord le client (au cas ou) _getConfig($ip, $port) ; récupere la configuration _write("Connecting... " & $ip & ":" & $port) $hSocket = _TCP_Client_Create("127.0.0.1", 8080) ; création du client (tentative de connection) $ret = _TCP_RegisterEvent($hSocket, $TCP_RECEIVE, "_receive") ConsoleWrite(" register receive: " & $ret & @CRLF) $ret = _TCP_RegisterEvent($hSocket, $TCP_DISCONNECT, "_disconnected") ConsoleWrite(" register diconnect: " & $ret & @CRLF) EndFunc Func _getConfig(ByRef $ip_, ByRef $port_) ; retourne la configuration (ip et port) $ip_ = IniRead($iniName, "config", "ip", "127.0.0.1") $port_ = Number(IniRead($iniName, "config", "port", "8080")) EndFunc Func _free() ; vide la console de tchat GUICtrlSetData($chat, "") EndFunc