piccaso Posted November 7, 2006 Share Posted November 7, 2006 (edited) I wrote a little chat server in autoit for intranet use.and telnet is its client because everybody has it allready.edit: Telnet problems (should be) gonecome on in and help me stress test it Type into the runbox:TelnetType into the Telnet windowset localecho o lazarus7.ath.cx 1500The actual question is:Can i use color in this environment?with escape sequences?thanks...edit: source below is a bit out of date Edited November 15, 2006 by piccaso CoProc Multi Process Helper libraryTrashBin.nfshost.com store your AutoIt related files here!AutoIt User Map Link to comment Share on other sites More sharing options...
piccaso Posted November 7, 2006 Author Share Posted November 7, 2006 da source expandcollapse popupGlobal $sAdress = "" Global $iPort = 1500 Global $iMaxConnect = 256 Global $sMotd = "Hello! Welcome to the Telnet Chat Relay." & @CRLF & _ "Available Commands:" & @CRLF & _ "/nick <NickName> ; Set Nick" & @CRLF & _ "/users ; Display Online Peers" & @CRLF & _ "/msg <NickName> <Message> ; Send Private message" & @CRLF & _ "" & @CRLF & _ "Please Set your Nick!" & @CRLF & _ "Use This on your own Risk!" & @CRLF & _ "Happy chatting" & @CRLF & _ "" & @CRLF Global $fDebug = True Global $iDebugClients = 3 ;------------- #include <array.au3> Global $iMainSocket Global $aClientSockets[$iMaxConnect + 1] Global $aClientNicks[$iMaxConnect + 1] Global $aClientData[$iMaxConnect + 1] TCPStartup() $iMainSocket = TCPListen($sAdress,$iPort,$iMaxConnect) If $fDebug Then HotKeySet("{ESC}","_Bye") If $iDebugClients > 1 Then For $i = 1 To $iDebugClients Run(@ComSpec & " /c " & 'telnet localhost ' & $iPort) Next EndIf EndIf If $iMainSocket < 0 Then Exit -1 While 1 $iNewClient = TCPAccept($iMainSocket) If $iNewClient > 0 Then For $i = 0 To UBound($aClientSockets) -1 If Not $aClientSockets[$i] Then $aClientSockets[$i] = $iNewClient $aClientNicks[$i] = "Client" & $i TCPSend($iNewClient,$sMotd) _SendAll("New Peer: " & $i & ", " & SocketToIP($iNewClient) & @CRLF) $iNewClient = -1 ExitLoop EndIf Next If $iNewClient <> -1 Then TCPSend($iNewClient,"Too many Clients...") TCPCloseSocket($iNewClient) EndIf EndIf For $i = 0 To UBound($aClientSockets) -1 If $aClientSockets[$i] > 0 Then $sBuff = TCPRecv($aClientSockets[$i],256) If @error Then _SendAll("Connection Closed: " & $i & ", @error = " & @error & ", " & SocketToIP($aClientSockets[$i]) & ", " & $aClientNicks[$i] & @CRLF) TCPCloseSocket($aClientSockets[$i]) $aClientSockets[$i] = 0 $aClientData[$i] = "" $aClientNicks[$i] = "" ElseIf $sBuff Then ; If $fDebug Then ConsoleWrite($i & ":0x" & Hex(BinaryString($sBuff)) & " ") $aClientData[$i] &= $sBuff EndIf If StringInStr($aClientData[$i],@LF) Then If StringInStr($aClientData[$i],"/nick") = 1 Then $sBuff = StringStripWS(StringMid($aClientData[$i],6),1+2) _SendAll("Peer " & $i & ", " & SocketToIP($aClientSockets[$i]) & " Changed Nick from " & $aClientNicks[$i] & " to " & $sBuff & @CRLF) $aClientNicks[$i] = $sBuff ElseIf StringInStr($aClientData[$i],"/users") = 1 Then _showPeers($aClientSockets[$i]) ElseIf StringInStr($aClientData[$i],"/msg") = 1 Then $aBuff = StringSplit($aClientData[$i]," ") If $aBuff[0] > 2 Then $sBuff = StringMid($aClientData[$i], StringInStr($aClientData[$i],$aBuff[3])) $iTmp = _ArraySearch($aClientNicks,$aBuff[2],0,0,1) If $iTmp > -1 Then TCPSend($aClientSockets[$iTmp],"- " & $aClientNicks[$i] & " ->" & $sBuff) EndIf EndIf ElseIf Not StringStripWS($aClientData[$i],1+2) Then ; Empty Line Else $aClientData[$i] = StringReplace($aClientData[$i],BinaryString("0x1B5B41"),"") ; Up $aClientData[$i] = StringReplace($aClientData[$i],BinaryString("0x1B5B42"),"") ; Down _SendAll($aClientNicks[$i] & ">" & $aClientData[$i]) EndIf $aClientData[$i] = "" EndIf EndIf Next WEnd Func _showPeers($iSock) Local $i For $i = 0 To UBound($aClientSockets) -1 If $aClientSockets[$i] > 0 Then TCPSend($iSock,$i & ", " & SocketToIP($aClientSockets[$i])& ", " & $aClientNicks[$i] & @CRLF) If @error Then ExitLoop EndIf Next EndFunc Func _SendAll($sMsg) Local $i For $i = 0 To UBound($aClientSockets) -1 if $aClientSockets[$i] > 0 Then TCPSend($aClientSockets[$i],$sMsg) EndIf Next EndFunc Func SocketToIP($iSock) Local $sockaddr = DllStructCreate("short;ushort;uint;char[8]") Local $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $iSock, _ "ptr", DllStructGetPtr($sockaddr), "int_ptr", 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 Return $aRet EndFunc ;==>SocketToIP Func _Bye() Exit EndFunc CoProc Multi Process Helper libraryTrashBin.nfshost.com store your AutoIt related files here!AutoIt User Map Link to comment Share on other sites More sharing options...
jvanegmond Posted November 7, 2006 Share Posted November 7, 2006 (edited) /msg sends to every user online, probably. At least I could read what you guys were saying. Whenever I was typing and someone else responded to me, my text was gone.. It was abit frustrating. After trying some more, I thought it wasn't bad. I have no idea about the colors though. Edited November 7, 2006 by Manadar github.com/jvanegmond Link to comment Share on other sites More sharing options...
piccaso Posted November 15, 2006 Author Share Posted November 15, 2006 who wants to Volunteer? server is up now (see first post) CoProc Multi Process Helper libraryTrashBin.nfshost.com store your AutoIt related files here!AutoIt User Map Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now