s!mpL3 LAN Messenger 2.9.8.8

   (2 reviews)

2 Screenshots

About This File

I started working on this program in the summer then I stopped cause I faced some problems I couldn't overcome back then. Now that I've practiced more and have become a better scripter/programmer I'm releasing the program to the public to get some opinions. I know it's not a new concept but it's the first program I started besides some small stuff I did just for practice! I won't post the source code yet because it's still under construction, although I'm sure I've posted early stages of the code with bugs in the past in some topic...

What I wanted was a simple, small, serverless program that would work without installation cause I wanted it for where I work, so I ended up with this!

 

I have attached some images of various versions, also visit the forum thread.

 

The package includes s!mpL3 LAN Messenger, the License Agreement and the change log.

 

Current version 2.9.8.8! [30/09/2015]

 

Check the Change Log below!

 

 

http://www.autoitscript.com/forum/index.php?showtopic=88782

 

 

 

Read the license before using this software.

 


What's New in Version 2.9.8.8

Released

1. Removed some test code that could cause message boxes to pop up for Windows versions prior to Windows 10.





User Feedback

You may only provide a review once you have downloaded the file.


AoRaToS

  • 5
  

Share this review


Link to review
Marcelos

  • 5
  

Share this review


Link to review
  • Similar Content

    • You
      By You
      Use: 
       
      Server Script:
      #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiEdit.au3> #include <GuiStatusBar.au3> #include <MsgBoxConstants.au3> #include <ScrollBarsConstants.au3> #include <WindowsConstants.au3> #include "TCP.au3" OnAutoItExitRegister("_OnExit") Func _OnExit() TCPShutdown() Exit EndFunc ;==>_OnExit #Region Global $hGUI = GUICreate("TCP AutoIT Server", 620, 400, -1, -1, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST, $WS_EX_WINDOWEDGE)) Global $sMode = GUICtrlCreateRadio("Server Mode", 16, 8, 97, 17) GUICtrlSetState(-1, $GUI_CHECKED) Global $sGlobalIP = GUICtrlCreateInput("", 170, 8, 120, 21, $ES_READONLY) Global $sServerIP = GUICtrlCreateInput(@IPAddress1, 300, 8, 120, 21, $ES_READONLY) Global $sServerPORT = GUICtrlCreateInput("8888", 425, 8, 39, 21) GUICtrlCreateLabel("IP Server:", 120, 10, 51, 17) Global $bStartServer = GUICtrlCreateButton("Start Server", 512, 6, 89, 33) Global $gMessenger = GUICtrlCreateGroup("Text to Send", 8, 64, 601, 129) Global $tMessenger = GUICtrlCreateEdit("", 15, 85, 489, 97, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN, $WS_VSCROLL)) GUICtrlSetData(-1, "[START]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[END]") Global $bSendMes = GUICtrlCreateButton("SEND", 511, 83, 89, 105) GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateLabel("File To Send:", 16, 200, 80, 17) Global $sPathFileSend = GUICtrlCreateInput(@TempDir & "\XXX.jpg", 104, 200, 361, 21) Global $bSelectFile = GUICtrlCreateButton(".!.", 472, 200, 35, 25) GUICtrlCreateLabel("Path To Save:", 16, 230, 80, 17) Global $sPathFileSave = GUICtrlCreateInput(@DesktopDir, 104, 230, 361, 21) Global $bSelectDir = GUICtrlCreateButton("...", 472, 230, 35, 25) Global $bSendFile = GUICtrlCreateButton("Send File", 512, 195, 89, 60) ;~ Global $tStatus = GUICtrlCreateLabel("", 16, 45, 580, 17) Global $tStatus = GUICtrlCreateLabel("List Client:", 36, 45, 60, 17) Global $listClient = GUICtrlCreateCombo("", 100, 45, 500, 17) Global $gReceived = GUICtrlCreateGroup("Received", 8, 266, 601, 129) Global $cDataReceived = GUICtrlCreateEdit("", 16, 282, 585, 105, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN, $WS_VSCROLL)) GUICtrlSetData(-1, "") GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_SHOW) #EndRegion Global $hClient, $xSocket, $xServerIP, $xServerPORT, $xPathFileSend, $xPathFileSave, $xGlobalIP = GetIP() GUICtrlSetData($sGlobalIP, $xGlobalIP) _WriteLog("Server IP WAN: " & $xGlobalIP) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $bStartServer _WriteLog("SERVER: Starting up server...") $xServerIP = GUICtrlRead($sServerIP) $xServerPORT = GUICtrlRead($sServerPORT) _WriteLog("Server IP: " & $xServerIP) _WriteLog("Server Port: " & $xServerPORT) $hServer = _TCP_Server_Create($xServerPORT, "0.0.0.0") _TCP_RegisterEvent($hServer, $TCP_NEWCLIENT, "NewClient") _TCP_RegisterEvent($hServer, $TCP_DISCONNECT, "Disconnect") _TCP_RegisterEvent($hServer, $TCP_RECEIVE, "Recieved") _WriteLog( "SERVER: Started") GUICtrlSetData($bStartServer, "Running") GUICtrlSetState($bStartServer, $GUI_DISABLE) Case $bSendFile ConsoleWrite("Send File Pressed!" & @CRLF) Case $bSendMes Local $sClient = GUICtrlRead($listClient) $xMessenger = GUICtrlRead($tMessenger) _TCP_Send($sClient, $xMessenger) ConsoleWrite("Send Messenger Pressed!" & @CRLF) Case $bSelectFile $xPathFileSend = FileOpenDialog("Select file to send:", @DesktopDir, "All (*.*)", 3, "", $hGUI) If Not @error Then GUICtrlSetData($sPathFileSend, $xPathFileSend) Case $bSelectDir $xPathFileSave = FileSelectFolder("Select local to save file received:", @DesktopDir, 0, @ScriptDir, $hGUI) If Not @error Then GUICtrlSetData($sPathFileSave, $xPathFileSave) EndSwitch Sleep(1) WEnd Func NewClient($hSocket, $iError) GUICtrlSetData($listClient, $hSocket, $hSocket) _WriteLog("SERVER: New client connected/ Socket:" & $hSocket & " /Sending this: Welcome!") _TCP_Send($hSocket, "Welcome!") EndFunc ;==>NewClient Func Received($hSocket, $sReceived, $iError) _WriteLog("CLIENT: We received from Socket: " & $hSocket & " data: " & $sReceived) EndFunc ;==>Received Func Disconnect($hSocket, $iError) _WriteLog("SERVER: Client disconnected. Socket:" & $hSocket) EndFunc ;==>Disconnect Func _WriteLog($sLogMsg) Local $OldLog = GUICtrlRead($cDataReceived) GUICtrlSetData($cDataReceived, $OldLog & @CRLF & $sLogMsg) ;~ GUICtrlSetData($tStatus, $sLogMsg) ConsoleWrite("! " & $sLogMsg & @CRLF) $iEnd = StringLen(GUICtrlRead($tMessenger)) _GUICtrlEdit_SetSel($tMessenger, $iEnd, $iEnd) _GUICtrlEdit_Scroll($tMessenger, $SB_SCROLLCARET) $iEnd = StringLen(GUICtrlRead($cDataReceived)) _GUICtrlEdit_SetSel($cDataReceived, $iEnd, $iEnd) _GUICtrlEdit_Scroll($cDataReceived, $SB_SCROLLCARET) EndFunc ;==>_WriteLog Func GetIP($i = "ip") Local $return, $IP = StringSplit(BinaryToString(InetRead("http://api.wipmania.com/")), "<br>", 1) If $i = "from" Then If Not $IP[1] = "" Then $return = $IP[2] Else Return "Error: Api not responding." EndIf Else If Not $IP[1] = "" Then $return = $IP[1] Else Return "Error: Api not responding." EndIf EndIf Return $return EndFunc ;==>GetIP Client Script:
      #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiEdit.au3> #include <GuiStatusBar.au3> #include <MsgBoxConstants.au3> #include <ScrollBarsConstants.au3> #include <WindowsConstants.au3> #include "TCP.au3" OnAutoItExitRegister("_OnExit") Func _OnExit() TCPShutdown() Exit EndFunc ;==>_OnExit #Region Global $hGUI = GUICreate("TCP AutoIT Client", 620, 400, -1, -1, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST, $WS_EX_WINDOWEDGE)) Global $sMode = GUICtrlCreateRadio("Client Mode", 16, 8, 97, 17) GUICtrlSetState(-1, $GUI_CHECKED) Global $sConnectStatus = GUICtrlCreateLabel("", 408, 8, 89, 17) Global $sServerIP = GUICtrlCreateInput(@IPAddress1, 224, 8, 120, 21) Global $sServerPORT = GUICtrlCreateInput("8888", 345, 8, 39, 21) GUICtrlCreateLabel("IP Server:", 160, 10, 51, 17) Global $bStartConnect = GUICtrlCreateButton("Start Connect", 512, 6, 89, 33) Global $gMessenger = GUICtrlCreateGroup("Text to Send", 8, 64, 601, 129) Global $tMessenger = GUICtrlCreateEdit("", 15, 85, 489, 97, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN, $WS_VSCROLL)) GUICtrlSetData(-1, "[START]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[END]") Global $bSendMes = GUICtrlCreateButton("SEND", 511, 83, 89, 105) GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateLabel("File To Send:", 16, 200, 80, 17) Global $sPathFileSend = GUICtrlCreateInput(@TempDir & "\XXX.jpg", 104, 200, 361, 21) Global $bSelectFile = GUICtrlCreateButton(".!.", 472, 200, 35, 25) GUICtrlCreateLabel("Path To Save:", 16, 230, 80, 17) Global $sPathFileSave = GUICtrlCreateInput(@DesktopDir, 104, 230, 361, 21) Global $bSelectDir = GUICtrlCreateButton("...", 472, 230, 35, 25) Global $bSendFile = GUICtrlCreateButton("Send File", 512, 195, 89, 60) ;~ Global $tStatus = GUICtrlCreateLabel("", 16, 45, 580, 17) Global $gReceived = GUICtrlCreateGroup("Received", 8, 266, 601, 129) Global $cDataReceived = GUICtrlCreateEdit("", 16, 282, 585, 105, BitOR($ES_AUTOVSCROLL, $ES_WANTRETURN, $WS_VSCROLL)) GUICtrlSetData(-1, "") GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_SHOW) #EndRegion Global $hClient, $xSocket, $xServerIP, $xServerPORT, $xPathFileSend, $xPathFileSave While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $bStartConnect $xServerIP = GUICtrlRead($sServerIP) $xServerPORT = GUICtrlRead($sServerPORT) _WriteLog("Server Port: " & $xServerIP) _WriteLog("Server Port: " & $xServerPORT) $hClient = _TCP_Client_Create($xServerIP, $xServerPORT) ; Create the client. Which will connect to the local ip address on port xxxx _TCP_RegisterEvent($hClient, $TCP_RECEIVE, "Received") ; Function "Received" will get called when something is received _TCP_RegisterEvent($hClient, $TCP_CONNECT, "Connected") ; And func "Connected" will get called when the client is connected. _TCP_RegisterEvent($hClient, $TCP_DISCONNECT, "Disconnected") ; And "Disconnected" will get called when the server disconnects us, or when the connection is lost. _WriteLog("CLIENT: Connecting...") Case $bSendFile ConsoleWrite("Send File Pressed!" & @CRLF) ;~ Exit Case $bSendMes $xMessenger = GUICtrlRead($tMessenger) _TCP_Send($xSocket, $xMessenger) ConsoleWrite("Send Messenger Pressed!" & @CRLF) Case $bSelectFile $xPathFileSend = FileOpenDialog("Select file to send:", @DesktopDir, "All (*.*)", 3, "", $hGUI) If Not @error Then GUICtrlSetData($sPathFileSend, $xPathFileSend) Case $bSelectDir $xPathFileSave = FileSelectFolder("Select local to save file received:", @DesktopDir, 0, @ScriptDir, $hGUI) If Not @error Then GUICtrlSetData($sPathFileSave, $xPathFileSave) EndSwitch Sleep(1) WEnd Func Connected($hSocket, $iError) If Not $iError Then _WriteLog("CLIENT: Connected!") GUICtrlSetData($bStartConnect, "Conneced") GUICtrlSetState($bStartConnect, $GUI_DISABLE) _WriteLog( "CLIENT: Conneced") ;~ _TCP_Send($hSocket, "Conneced :)") ;~ $xMessenger = GUICtrlRead($tMessenger) ;~ _TCP_Send($hSocket, $xMessenger) ;~ _WriteLog("CLIENT: Try reply socket: " & $hSocket & " data: " & $xMessenger) Else _WriteLog("CLIENT: Could not connect. Are you sure the server is running?") EndIf EndFunc ;==>Connected Func Received($hSocket, $sReceived, $iError) _WriteLog("CLIENT: We received from socket: " & $hSocket & " data: " & $sReceived) Sleep(1000) EndFunc ;==>Received Func Disconnect($hSocket, $iError) _WriteLog("SERVER: Client disconnected. Socket:" & $hSocket) EndFunc ;==>Disconnect Func _WriteLog($sLogMsg) Local $OldLog = GUICtrlRead($cDataReceived) GUICtrlSetData($cDataReceived, $OldLog & @CRLF & $sLogMsg) ;~ GUICtrlSetData($tStatus, $sLogMsg) ConsoleWrite("! " & $sLogMsg & @CRLF) $iEnd = StringLen(GUICtrlRead($tMessenger)) _GUICtrlEdit_SetSel($tMessenger, $iEnd, $iEnd) _GUICtrlEdit_Scroll($tMessenger, $SB_SCROLLCARET) $iEnd = StringLen(GUICtrlRead($cDataReceived)) _GUICtrlEdit_SetSel($cDataReceived, $iEnd, $iEnd) _GUICtrlEdit_Scroll($cDataReceived, $SB_SCROLLCARET) EndFunc ;==>_WriteLog Func GetIP($i = "ip") Local $return, $IP = StringSplit(BinaryToString(InetRead("http://api.wipmania.com/")), "<br>", 1) If $i = "from" Then If Not $IP[1] = "" Then $return = $IP[2] Else Return "Error: Api not responding." EndIf Else If Not $IP[1] = "" Then $return = $IP[1] Else Return "Error: Api not responding." EndIf EndIf Return $return EndFunc ;==>GetIP TCP.au3
      #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.0.0 Author: Kip Script Function: TCP UDF v3 #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #cs Functions: _TCP_Server_Create($iPort, $sIP="0.0.0.0") _TCP_Server_Broadcast($sData) _TCP_Server_ClientList() _TCP_Server_ClientIP($hSocket) _TCP_Server_DisconnectClient($hSocket) _TCP_Server_Stop() _TCP_Client_Create($sIP , $iPort) _TCP_Client_Stop($hSocket) _TCP_Send($hSocket, $sText) _TCP_RegisterEvent($hSocket, $iEvent, $sFunction) Register event values: $TCP_SEND ; Function ($hSocket, $iError) $TCP_RECEIVE ; Function ($hSocket, $sReceived, $iError) $TCP_CONNECT ; Function ($hSocket, $iError) => Client only $TCP_DISCONNECT ; Function ($hSocket, $iError) $TCP_NEWCLIENT ; Function ($hSocket, $iError) => Server only #ce Global Const $FD_READ = 1 Global Const $FD_WRITE = 2 Global Const $FD_OOB = 4 Global Const $FD_ACCEPT = 8 Global Const $FD_CONNECT = 16 Global Const $FD_CLOSE = 32 Global $hWs2_32 = -1 Global Const $TCP_SEND = 1 Global Const $TCP_RECEIVE = 2 Global Const $TCP_CONNECT = 4 Global Const $TCP_DISCONNECT = 8 Global Const $TCP_NEWCLIENT = 16 TCPStartup() Global Const $__TCP_WINDOW = GUICreate("Async Sockets UDF") Global $__TCP_SOCKETS[1][7] ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Server_Create ; Description ...: Initializes the server. ; Syntax.........: _TCP_Server_Create($iPort, $sIP="0.0.0.0") ; Parameters ....: $iPort - The port number the server should listen to. ; $sIP - IP address. (Default = "0.0.0.0") ; Return values .: The socket handle. ; Author ........: Kip ; Modified.......: ; Remarks .......: Only 1 server can be created per script. ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Server_Create($iPort, $sIP="0.0.0.0") Local $hListenSocket = ___ASocket() ___ASockSelect( $hListenSocket, $__TCP_WINDOW, 0x0400, $FD_ACCEPT) GUIRegisterMsg( 0x0400, "___TCP_OnAccept" ) ___ASockListen( $hListenSocket, $sIP, $iPort ) $__TCP_SOCKETS[0][0] = $hListenSocket $__TCP_SOCKETS[0][1] = 0x0400 Return $hListenSocket EndFunc Func ___TCP_OnAccept($hWnd, $iMsgID, $WParam, $LParam) Local $hSocket = $WParam Local $iError = ___HiWord( $LParam ) Local $iEvent = ___LoWord( $LParam ) Local $hClient, $uBound Abs($hWnd) ; Stupid AU3Check... If $iMsgID = $__TCP_SOCKETS[0][1] Then If $iEvent = $FD_ACCEPT Then If Not $iError Then ReDim $__TCP_SOCKETS[UBound($__TCP_SOCKETS)+1][7] $uBound = UBound($__TCP_SOCKETS) $hClient = TCPAccept($hSocket) ___ASockSelect($hClient, $__TCP_WINDOW, 0x0400 + $uBound - 1, BitOR($FD_READ, $FD_WRITE, $FD_CLOSE)) GUIRegisterMsg(0x0400 + $uBound - 1, "___TCP_Server_OnSocketEvent" ) $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][0] = $hClient $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][1] = 0x0400 + $uBound - 1 Call($__TCP_SOCKETS[0][6], $hClient, $iError) Else Call($__TCP_SOCKETS[0][6], 0, $iError) EndIf ElseIf $iEvent = $FD_CONNECT Then Call($__TCP_SOCKETS[0][4], $hSocket, $iError) EndIf EndIf EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Client_Stop ; Description ...: Stops the client. ; Syntax.........: _TCP_Client_Stop($hSocket) ; Parameters ....: $hSocket - Client socket. ; Return values .: Success - True ; Failure - False ; Author ........: Kip ; Modified.......: ; Remarks .......: The client socket is the return value of _TCP_Client_Create(). ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Client_Stop($hSocket) Local $iElement, $i $iElement = 0 For $i = 1 to UBound($__TCP_SOCKETS)-1 If $__TCP_SOCKETS[$i][0] = $hSocket Then $iElement = $i ExitLoop EndIf Next If $iElement Then ___ASockShutdown($__TCP_SOCKETS[$iElement][0]) TCPCloseSocket($__TCP_SOCKETS[$iElement][0]) ___ArrayDelete($__TCP_SOCKETS, $iElement) Return True EndIf Return False EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Server_Stop ; Description ...: Stops the server, and closes all client connections. ; Syntax.........: _TCP_Server_Stop() ; Parameters ....: ; Return values .: True ; Author ........: Kip ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Server_Stop() Local $i ___ASockShutdown($__TCP_SOCKETS[0][0]) TCPCloseSocket($__TCP_SOCKETS[0][0]) $__TCP_SOCKETS[0][0] = "" $__TCP_SOCKETS[0][1] = "" $__TCP_SOCKETS[0][2] = "" $__TCP_SOCKETS[0][3] = "" $__TCP_SOCKETS[0][4] = "" $__TCP_SOCKETS[0][5] = "" $__TCP_SOCKETS[0][6] = "" For $i = UBound($__TCP_SOCKETS)-1 to 1 Step -1 ___ArrayDelete($__TCP_SOCKETS, $i) Next Return True EndFunc Func ___TCP_Server_OnSocketEvent( $hWnd, $iMsgID, $WParam, $LParam ) Local $hSocket = $WParam Local $iError = ___HiWord( $LParam ) Local $iEvent = ___LoWord( $LParam ) Local $sDataBuff, $iElement, $i Abs($hWnd) $hSocket = 0 $iElement = 0 For $i = 1 to UBound($__TCP_SOCKETS)-1 If $__TCP_SOCKETS[$i][1] = $iMsgID Then $hSocket = $__TCP_SOCKETS[$i][0] $iElement = $i ExitLoop EndIf Next If $hSocket Then Switch $iEvent Case $FD_READ $sDataBuff = TCPRecv($hSocket, 1024) Call($__TCP_SOCKETS[0][2], $hSocket, $sDataBuff, $iError) Case $FD_WRITE Call($__TCP_SOCKETS[0][3], $hSocket, $iError) Case $FD_CLOSE ___ASockShutdown($hSocket) TCPCloseSocket($hSocket) Call($__TCP_SOCKETS[0][5], $hSocket, $iError) ___ArrayDelete($__TCP_SOCKETS, $iElement) EndSwitch EndIf EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Server_DisconnectClient ; Description ...: Disconnects a client of the server. ; Syntax.........: _TCP_Server_DisconnectClient($hSocket) ; Parameters ....: $hSocket - Client socket. ; Return values .: Success - True ; Failure - False ; Author ........: Kip ; Modified.......: ; Remarks .......: The client socket is the $hSocket parameter of a _TCP_RegisterEvent callback function. ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Server_DisconnectClient($hSocket) Local $iElement, $i $iElement = 0 For $i = 1 to UBound($__TCP_SOCKETS)-1 If $__TCP_SOCKETS[$i][0] = $hSocket Then $iElement = $i ExitLoop EndIf Next If $iElement Then ___ASockShutdown($hSocket) TCPCloseSocket($hSocket) ___ArrayDelete($__TCP_SOCKETS, $iElement) Return True EndIf Return False EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Server_ClientList ; Description ...: Returns the sockets of all connected clients. ; Syntax.........: _TCP_Server_ClientList() ; Parameters ....: ; Return values .: An 1 dimensional array of all connected clients. ; Author ........: Kip ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Server_ClientList() Local $aReturn[1], $i For $i = 1 to UBound($__TCP_SOCKETS)-1 If $__TCP_SOCKETS[$i][0] Then ReDim $aReturn[UBound($aReturn)+1] $aReturn[UBound($aReturn)-1] = $__TCP_SOCKETS[$i][0] EndIf Next $aReturn[0] = UBound($aReturn)-1 Return $aReturn EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Server_Broadcast ; Description ...: Sends data to all connected clients. ; Syntax.........: _TCP_Server_Broadcast($sData) ; Parameters ....: $sData - The data to send. ; Return values .: True ; Author ........: Kip ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Server_Broadcast($sData) Local $i For $i = 1 to UBound($__TCP_SOCKETS)-1 If $__TCP_SOCKETS[$i][0] Then TCPSend($__TCP_SOCKETS[$i][0], $sData) Next Return True EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Client_Create ; Description ...: Creates a new client. ; Syntax.........: _TCP_Client_Create($sIP , $iPort) ; Parameters ....: $sIP - The IP address to connect to. ; $iPort - Port on which the created socket will be connected. ; Return values .: Client socket handle. ; Author ........: Kip ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Client_Create($sIP , $iPort) ReDim $__TCP_SOCKETS[UBound($__TCP_SOCKETS)+1][7] local $hSocket = ___ASocket() $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][0] = $hSocket $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][1] = 0x0400 + (UBound($__TCP_SOCKETS)-1) ___ASockSelect( $hSocket, $__TCP_WINDOW, 0x0400 + (UBound($__TCP_SOCKETS)-1), BitOR( $FD_READ, $FD_WRITE, $FD_CONNECT, $FD_CLOSE ) ) GUIRegisterMsg( 0x0400 + (UBound($__TCP_SOCKETS)-1), "___TCP_Client_OnSocketEvent" ) ___ASockConnect( $hSocket, $sIP, $iPort ) Return $hSocket EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_RegisterEvent ; Description ...: Registers an event. ; Syntax.........: _TCP_RegisterEvent($hSocket, $iEvent, $sFunction) ; Parameters ....: $hSocket - Socket of the server or a client. ; $iEvent - Event number. It can be any these values: ; * $TCP_SEND ; * $TCP_RECEIVE ; * $TCP_CONNECT => Client only ; * $TCP_DISCONNECT ; * $TCP_NEWCLIENT => Server only ; Return values .: Success - True ; Failure - False ; Author ........: Kip ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_RegisterEvent($hSocket, $iEvent, $sFunction) Local $iSelected = 0 Local $i If $__TCP_SOCKETS[0][0] Then $iSelected = 0 Else For $i = 0 to UBound($__TCP_SOCKETS)-1 If $__TCP_SOCKETS[$i][0] = $hSocket Then $iSelected = $i ExitLoop EndIf Next If Not $iSelected Then Return 0 EndIf Switch $iEvent Case $TCP_SEND $__TCP_SOCKETS[$iSelected][3] = $sFunction Case $TCP_RECEIVE $__TCP_SOCKETS[$iSelected][2] = $sFunction Case $TCP_CONNECT $__TCP_SOCKETS[$iSelected][4] = $sFunction Case $TCP_DISCONNECT $__TCP_SOCKETS[$iSelected][5] = $sFunction Case $TCP_NEWCLIENT $__TCP_SOCKETS[$iSelected][6] = $sFunction Case Else Return False EndSwitch Return True EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Server_ClientIP ; Description ...: Converts a client socket handle to IP address. ; Syntax.........: _TCP_Server_ClientIP($hSocket) ; Parameters ....: $hSocket - Client socket handle. ; Return values .: A string with the IP address. ; Author ........: Unknown ; Modified.......: Kip ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Server_ClientIP($hSocket) Local $pSocketAddress, $aReturn $pSocketAddress = DllStructCreate("short;ushort;uint;char[8]") $aReturn = DllCall("Ws2_32.dll", "int", "getpeername", "int", $hSocket, "ptr", DllStructGetPtr($pSocketAddress), "int*", DllStructGetSize($pSocketAddress)) If @error Or $aReturn[0] <> 0 Then Return 0 $aReturn = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($pSocketAddress, 3)) If @error Then Return 0 $pSocketAddress = 0 Return $aReturn[0] EndFunc ; #FUNCTION# ;=============================================================================== ; ; Name...........: _TCP_Send ; Description ...: Sends data to a server or client. ; Syntax.........: _TCP_Send($hSocket, $sText) ; Parameters ....: $hSocket - Client or server socket handle. ; $sText - Data to send. ; Return values .: ; Author ........: Kip ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; ; ; ;========================================================================================== Func _TCP_Send($hSocket, $sText) Return TCPSend($hSocket, $sText) EndFunc Func ___TCP_Client_OnSocketEvent( $hWnd, $iMsgID, $WParam, $LParam ) Local $iError = ___HiWord( $LParam ) Local $iEvent = ___LoWord( $LParam ) Local $hSocket, $iElement, $i, $sDataBuff Abs($hWnd) Abs($WParam) $hSocket = 0 $iElement = 0 For $i = 1 to UBound($__TCP_SOCKETS)-1 If $__TCP_SOCKETS[$i][1] = $iMsgID Then $hSocket = $__TCP_SOCKETS[$i][0] $iElement = $i ExitLoop EndIf Next If $hSocket Then Switch $iEvent Case $FD_READ; Data has arrived! $sDataBuff = TCPRecv( $hSocket, 1024) Call($__TCP_SOCKETS[$i][2], $hSocket, $sDataBuff, $iError) $sDataBuff = "" Case $FD_WRITE Call($__TCP_SOCKETS[$i][3], $hSocket, $iError) Case $FD_CONNECT Call($__TCP_SOCKETS[$i][4], $hSocket, $iError) Case $FD_CLOSE ___ASockShutdown( $hSocket ) TCPCloseSocket( $hSocket ) Call($__TCP_SOCKETS[$i][5], $hSocket, $iError) ___ArrayDelete($__TCP_SOCKETS, $iElement) EndSwitch EndIf EndFunc ;================================================================================================================== ; ; Zatorg's Asynchronous Sockets UDF Starts from here. ; ;================================================================================================================== Func ___ASocket($iAddressFamily = 2, $iType = 1, $iProtocol = 6) If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" ) Local $hSocket = DllCall($hWs2_32, "uint", "socket", "int", $iAddressFamily, "int", $iType, "int", $iProtocol) If @error Then SetError(1, @error) Return -1 EndIf If $hSocket[ 0 ] = -1 Then SetError(2, ___WSAGetLastError()) Return -1 EndIf Return $hSocket[ 0 ] EndFunc ;==>_ASocket Func ___ASockShutdown($hSocket) If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" ) Local $iRet = DllCall($hWs2_32, "int", "shutdown", "uint", $hSocket, "int", 2) If @error Then SetError(1, @error) Return False EndIf If $iRet[ 0 ] <> 0 Then SetError(2, ___WSAGetLastError()) Return False EndIf Return True EndFunc ;==>_ASockShutdown Func ___ASockClose($hSocket) If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" ) Local $iRet = DllCall($hWs2_32, "int", "closesocket", "uint", $hSocket) If @error Then SetError(1, @error) Return False EndIf If $iRet[ 0 ] <> 0 Then SetError(2, ___WSAGetLastError()) Return False EndIf Return True EndFunc ;==>_ASockClose Func ___ASockSelect($hSocket, $hWnd, $uiMsg, $iEvent) If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" ) Local $iRet = DllCall( _ $hWs2_32, _ "int", "WSAAsyncSelect", _ "uint", $hSocket, _ "hwnd", $hWnd, _ "uint", $uiMsg, _ "int", $iEvent _ ) If @error Then SetError(1, @error) Return False EndIf If $iRet[ 0 ] <> 0 Then SetError(2, ___WSAGetLastError()) Return False EndIf Return True EndFunc ;==>_ASockSelect ; Note: you can see that $iMaxPending is set to 5 by default. ; IT DOES NOT MEAN THAT DEFAULT = 5 PENDING CONNECTIONS ; 5 == SOMAXCONN, so don't worry be happy Func ___ASockListen($hSocket, $sIP, $uiPort, $iMaxPending = 5); 5 == SOMAXCONN => No need to change it. Local $iRet Local $stAddress If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" ) $stAddress = ___SockAddr($sIP, $uiPort) If @error Then SetError(@error, @extended) Return False EndIf $iRet = DllCall($hWs2_32, "int", "bind", "uint", $hSocket, "ptr", DllStructGetPtr($stAddress), "int", DllStructGetSize($stAddress)) If @error Then SetError(3, @error) Return False EndIf If $iRet[ 0 ] <> 0 Then $stAddress = 0; Deallocate SetError(4, ___WSAGetLastError()) Return False EndIf $iRet = DllCall($hWs2_32, "int", "listen", "uint", $hSocket, "int", $iMaxPending) If @error Then SetError(5, @error) Return False EndIf If $iRet[ 0 ] <> 0 Then $stAddress = 0; Deallocate SetError(6, ___WSAGetLastError()) Return False EndIf Return True EndFunc ;==>_ASockListen Func ___ASockConnect($hSocket, $sIP, $uiPort) Local $iRet Local $stAddress If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" ) $stAddress = ___SockAddr($sIP, $uiPort) If @error Then SetError(@error, @extended) Return False EndIf $iRet = DllCall($hWs2_32, "int", "connect", "uint", $hSocket, "ptr", DllStructGetPtr($stAddress), "int", DllStructGetSize($stAddress)) If @error Then SetError(3, @error) Return False EndIf $iRet = ___WSAGetLastError() If $iRet = 10035 Then; WSAEWOULDBLOCK Return True; Asynchronous connect attempt has been started. EndIf SetExtended(1); Connected immediately Return True EndFunc ;==>_ASockConnect ; A wrapper function to ease all the pain in creating and filling the sockaddr struct Func ___SockAddr($sIP, $iPort, $iAddressFamily = 2) Local $iRet Local $stAddress If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" ) $stAddress = DllStructCreate("short; ushort; uint; char[8]") If @error Then SetError(1, @error) Return False EndIf DllStructSetData($stAddress, 1, $iAddressFamily) $iRet = DllCall($hWs2_32, "ushort", "htons", "ushort", $iPort) DllStructSetData($stAddress, 2, $iRet[ 0 ]) $iRet = DllCall($hWs2_32, "uint", "inet_addr", "str", $sIP) If $iRet[ 0 ] = 0xffffffff Then; INADDR_NONE $stAddress = 0; Deallocate SetError(2, ___WSAGetLastError()) Return False EndIf DllStructSetData($stAddress, 3, $iRet[ 0 ]) Return $stAddress EndFunc ;==>__SockAddr Func ___WSAGetLastError() If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" ) Local $iRet = DllCall($hWs2_32, "int", "WSAGetLastError") If @error Then ;ConsoleWrite("+> _WSAGetLastError(): WSAGetLastError() failed. Script line number: " & @ScriptLineNumber & @CRLF) SetExtended(1) Return 0 EndIf Return $iRet[ 0 ] EndFunc ;==>_WSAGetLastError ; Got these here: ; http://www.autoitscript.com/forum/index.php?showtopic=5620&hl=MAKELONG Func ___MakeLong($LoWord, $HiWord) Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF)); Thanks Larry EndFunc ;==>_MakeLong Func ___HiWord($Long) Return BitShift($Long, 16); Thanks Valik EndFunc ;==>_HiWord Func ___LoWord($Long) Return BitAND($Long, 0xFFFF); Thanks Valik EndFunc ;==>_LoWord ; ========================================= Array functions ; #FUNCTION# ==================================================================================================================== ; Name...........: _ArrayDelete ; Description ...: Deletes the specified element from the given array. ; Syntax.........: _ArrayDelete(ByRef $avArray, $iElement) ; Parameters ....: $avArray - Array to modify ; $iElement - Element to delete ; Return values .: Success - New size of the array ; Failure - 0, sets @error to: ; |1 - $avArray is not an array ; |3 - $avArray has too many dimensions (only up to 2D supported) ; |(2 - Deprecated error code) ; Author ........: Cephas <cephas at clergy dot net> ; Modified.......: Jos van der Zande <jdeb at autoitscript dot com> - array passed ByRef, Ultima - 2D arrays supported, reworked function (no longer needs temporary array; faster when deleting from end) ; Remarks .......: If the array has one element left (or one row for 2D arrays), it will be set to "" after _ArrayDelete() is used on it. ; Related .......: _ArrayAdd, _ArrayInsert, _ArrayPop, _ArrayPush ; Link ..........; ; Example .......; Yes ; =============================================================================================================================== Func ___ArrayDelete(ByRef $avArray, $iElement) If Not IsArray($avArray) Then Return SetError(1, 0, 0) Local $iUBound = UBound($avArray, 1) - 1 If Not $iUBound Then $avArray = "" Return 0 EndIf ; Bounds checking If $iElement < 0 Then $iElement = 0 If $iElement > $iUBound Then $iElement = $iUBound ; Move items after $iElement up by 1 Switch UBound($avArray, 0) Case 1 For $i = $iElement To $iUBound - 1 $avArray[$i] = $avArray[$i + 1] Next ReDim $avArray[$iUBound] Case 2 Local $iSubMax = UBound($avArray, 2) - 1 For $i = $iElement To $iUBound - 1 For $j = 0 To $iSubMax $avArray[$i][$j] = $avArray[$i + 1][$j] Next Next ReDim $avArray[$iUBound][$iSubMax + 1] Case Else Return SetError(3, 0, 0) EndSwitch Return $iUBound EndFunc ;==>_ArrayDelete  
      Problem:
      - Can not send and receive between Client and Server!
      - Data loss, data reception is not complete.
    • ripdad
      By ripdad
      Reproducer...
      TCPStartup() ; TCPConnect('212.227.91.231', '80') Local $error = @error MsgBox(0, 'AutoIt Version: ' & @AutoItVersion, 'AutoIt Error: ' & $error & @CRLF & 'WSAError: ' & _WSAGetLastErrorEx() & @TAB) TCPShutDown() ; Func _WSAGetLastErrorEx() Local $a = DllCall('ws2_32.dll', 'int', 'WSAGetLastError') If @error Or Not IsArray($a) Then Return SetError(1, 0, 'FuncError -1') $a = DllCall('kernel32.dll', 'int', 'FormatMessage', 'int', 0x00001000, 'ptr', 0, 'int', $a[0], 'int', 0, 'str', 0, 'int', 2048, 'ptr', 0) If @error Or Not IsArray($a) Then Return SetError(1, 0, 'FuncError -2') Return $a[3] & ' - ' & StringStripWS($a[5], 7) EndFunc Tested: autoit-v3.3.12.0, autoit-v3.3.14.0 and autoit-v3.3.15.0 beta on Win7.
      Seems to have started with autoit-v3.3.14.0.

       
    • rcmaehl
      By rcmaehl
      A UDF to connect to IRC using TCP Functions, as well as perform actions once connected.
      WANTED: Technical Writer able to create / maintain a helpfile (.chm) using the Autoit helpfile layout for an negotiated rate.

      Notes:
      Originally created by Chip.
      UDF Headers updated compared to old script.
      Error and Parameter Handling updated compared to old script.
      If you need to bypass the RFC compliance of this UDF, use _IRCRaw.
      The majority of the old functions have been modified. It will break most, if not all, scripts using the old UDF.
      These commands should work on every server following either RFC 1459 (legacy) or RFC 2812 (preferred).
       
      Potential Uses:
      IRC Chat Clients
      Chatroom Integration for software
      IRC Bots for Channel / Server Administration
      IRC Bots for Games such as Hangman, Mafia, and WereWolf
      Remote Administration without having to setup your own AutoIt server


      Functions:
      _IRCChannelInvite
      _IRCChannelJoin
      _IRCChannelKick
      _IRCChannelPart
      _IRCChannelTopic
      _IRCConnect
      _IRCDisconnect
      _IRCGetMsg
      _IRCMultiMode
      _IRCMultiSendMsg
      _IRCRaw
      _IRCSelfOper
      _IRCSelfSetNick
      _IRCSelfSetStatus
      _IRCServerPing
      _IRCServerPong
      _IRCServerTime
      _IRCServerVersion
       
      Extra Functions:
      _IRCReplyTo (IRCExtras.au3)
      _IRCStripSpecial (IRCExtras.au3)
       
      Downloads:
       
      Additional Links:
      Chips' Old UDF Topic:

       
      DISCLAIMER:
      While these downloads are more stable than the ones above, I do not have time to thoroughly test all functions and variable entries. If something doesn't work as expected or gives you an error please check @error and @extended variables then create a reply to this topic.

      Changelog:
      09/06/2016: IRC.au3 Fixed : Updated Headers to UDF-spec (- instead of =) _IRCGetMsg Fixed : Incorrect Return Value On Error _IRCStripSpecial Added : Better documentation of Flags _IRCMultiSendMsg Added : Better documentation of Flags _IRCMultiSendMsg Fixed : Max Message Size based on https://forums.unrealircd.org/viewtopic.php?t=6811 Updated all files to consider themselves a standalone install by default All Functions that didn't Return anything now return Number of bytes sent Slight Performance Improvements by using Parameter Gating instead of Single Input Single Output 07/21/2016: Example.au3 Fixed : Includes Example.au3 Renamed: IRC_Example.au3 IRC.au3 Changed: Minor Performance Improvements 04/18/2016: IRCConstants.au3 Updated: A Ton of New Constants added IRCMultiSendMsg Added : Color Example Increased TCP Timeout in all Examples 04/13/2016: CUI.au3 Updated: Errors now output to Error Stream in Console (C/G)UI.au3 Fixed : Userlists (FOR REAL THIS TIME) by being sure to get the current channel Removed: Duplicate Constants File Include Removed: Local Declaration inside of While loop for Performance Updated: TCPTimeout Increased Updated: $sTemp renamed $sStrip for Readibility Example.au3 Updated: TCPTimeout Increased GUI_Client.au3 Renamed: GUI.au3 _IRCStripSpecial Added : Parameter Checking Updated: Documentation _IRCMultiSendMsg Added : Additional flags for Message Type (POSSIBLY SCRIPT BREAKING if using $_bTrim!) Updated: Example to show new flags Updated: Increase Max Message Size from 368 To 436 04/09/2016: IRC.au3 Updated: All Documentation Added : Now has a Constaznts file _IRCConnnect Fixed : Now PROPERLY returns any errors _IRCGetMsg Removed: $_iChars parameter since it gets one packet at a time and parsing is easier _IRCReplyTo Fixed : Now properly returns username _IRCStripSpecial Added : Now uses Constants File All files are now in a single ZIP Includes 2 basic IRC "clients", a CUI, and a GUI 07/15/2015: Example.au3 Added : Improved Debugging   Updated: All Space Indents to Tab Idents   IRC.au3 Removed: Exception skipping @error = -1 in IRCGetMsg() as 3.3.14.0 fixed it 07/15/2015: Example.au3 Added : Ping Timeout Fixed : Userlist clipping of last user IRC.au3 Fixed : IRCGetMsg() Hang 07/08/2015: Example.au3 Fixed : User Lists   Fixed : Nickname now switches to backup nickname if first choice is already in use IRC.au3 Added : UDF Index Added : #include-once Updated: All Functions updated to Single Entry, Single Exit Updated: Now passes Au3Check on -q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 01/15/2015: Example.au3 Fixed : Ampersand channels causing a crash 12/20/2014: Example.au3 Fixed : Nicks not updating on all channel lists when a user changed their nick Fixed : Nicks not deleting on all channel lists when a user quits the network 12/19/2014: Example.au3 Added : User lists Added : Channel lists Added : Bot keeps track of own nick Added : Secondary nick in case first nick choice is in use. Added : Extremely Minor performance improvements _IRCConnect Added : Improved parameter checking _IRCGetMsg Updated: Now only retrieves one packet by default (MAY be script breaking) 10/14/2014: Example.au3 Added : Shutdown TCP on exit Fixed : $Recipient now gets the actual Recipient instead of the 3rd message Added : Now exits when told to quit. IRC.au3 Added : Improved Error Reporting (Includes @extended on error) _IRCDisconnect Added : Close Socket on Disconnect _IRCStripSpecial Added : Improved Color Stripping 09/28/2014: _IRCConnect Fixed : Checking if Mode was blank. _IRCGetMsg Fixed : Spamming of 0 and incorrectly thinking there was an error. 09/28/2014: IRC.au3 Fixed : All functions now return when errors are encountered instead of continuing _IRCConnect Added : Now returns an error if optional password failed to send _IRCGetMsg Added : Now returns an error if it failed to receive a custom amount of data _IRCServerVersion Fixed : Capitalized "Version" 09/26/2014: Example.au3 Fixed : Pings not ending with @CRLF IRCExtras.au3 Added : _IRCStripSpecial(), Cleans special characters sometimes seen in IRC 09/24/2014: Example.au3 Added : Checking for PrivMsg Fixed : Infinite loop if you removed _IRCDisconnect Updated: Bot now disconnects when receiving "!quit" instead of automatically Discontinuted BETA UDF project. 04/20/2014: IRCExtras.au3 Added : Additional IRC Functions _IRChangeNick Renamed: _IRCSelfSetNick (SCRIPT BREAKING! Fix: Replace _IRCChangeNick with _IRCSelfSetNick) _IRCGetMsg Fixed : Now no longer Splits Packets if Default option is used _IRCChannelInvite Added : Invites a User to a Channel _IRCChannelKick Added : Kick a User from a channel _IRCJoinChannel Renamed: _IRCChannelJoin (SCRIPT BREAKING! Fix: Replace _IRCJoinChannel with _IRCChannelJoin) _IRCMode Renamed: _IRCMultiMode (SCRIPT BREAKING! Fix: Replace _IRCMode with _IRCMultiMode) _IRCOper Renamed: _IRCSelfOper (SCRIPT BREAKING! Fix: Replace _IRCOper with _IRCSelfOper) _IRCPartChannel Renamed: _IRCChannelPart (SCRIPT BREAKING! Fix: Replace _IRCPartChannel with _IRCChannelPart) _IRCPing Renamed: _IRCServerPing (SCRIPT BREAKING! Fix: Replace _IRCPing with _IRCServerPing) _IRCPong Renamed: _IRCServerPong (SCRIPT BREAKING! Fix: Replace _IRCPong with _IRCServerPong) _IRCSelfSetStatus Added : Sets you AFK and un-AFK _IRCSendMessage Renamed: Renamed _IRCMultiSendMsg. (SCRIPT BREAKING Fix: Replace IRCSendMessage with IRCMultiSendMsg) _IRCSendMessageRaw Renamed: Renamed _IRCRaw (SCRIPT BREAKING! Fix: Replace _IRCSendMessageRaw with _IRCRaw) _IRCServerTime Added : Get time from a Server _IRCServerVersion Added : Get Software Version from a Server _IRCTopic Renamed: _IRCChannelTopic (SCRIPT BREAKING! Fix: Replace _IRCTopic with _IRCChannelTopic) Improved Parameter detection in all Functions Renamed Functions to show who/what they effect, MASSIVE Script Breaking. Sorry! :/ 04/06/2014: _IRCGetMsg Added : Use to get IRC Messages. _IRCSetTopic Changed: Now named _IRCTopic (SCRIPT BREAKING! Fix: Replace _IRCSetTopic with _IRCTopic) Changed: Can now be used to query topic and does so by default. Use "" to blank the topic All functions now thoroughly check their parameters Updated all functions to use @extended to some errors Fixed @error returning 0 by starting all errors at 1 instead of 0 03/20/2014: _IRCChangeMode Changed: Now named _IRCMode (SCRIPT BREAKING! Fix: Replace _IRCChangeMode with _IRCMode) Changed: $_sMode is now OPTIONAL. Allowing the command to be used to Query current mode as well _IRCConnect Fixed : Missing Colon Before $_sRealName. It should now allow Real Names with spaces _IRCDisconnect Fixed : Issue with Blank Messages. Should now properly blank to Default _IRCPing Changed: $_Server is now REQUIRED. (SCRIPT BREAKING! Fix: Specify a server as Parameter 2) _IRCSendMessage Added : $_bTrim, Trims message if too long instead of breaking up the message, Default is true _IRCSetTopic Added : Command for setting a Channel Topic Updated Most Functions to include better error checking Updated Most Channel Related Functions to check for valid channels 03/16/2014: _IRCChangeMode Added : Optional parameters for channel modes Changed: Parameter ordering Target is now before Mode (SCRIPT BREAKING! Fix: Swap Parameters 2 and 3) _IRCConnect Changed: No longer exits the script on error, instead returns TCPConnect Error Code _IRCJoinChannel Added : Now Supports Channel Passwords _IRCOper Added : Command for IRC Server Operator Login Updated All Functions to have UDF standard error codes 02/24/2014: _IRCSendMessage Changed: Split Into _IRCSendMessage and _IRCSendMessageRaw (SCRIPT BREAKING! No Simple Fix Available) 02/23/2014: Made variables comply to UDF Standards http://www.autoitscript.com/autoit3/udfs/UDF_Standards.htm Removed MsgBoxes left over from old UDF Updated / Uploaded IRC.au3 Known and Reported Bugs:
      Message output only displays ANSI characters in CUI. (Can't Fix) Freenode requires registration for part messages thus the part message in example doesn't show up (Can't fix) Messages (e.g. PRIVMSG) are not forwarded?, when it contains umlauts/german mutations and when the message only contains a dot '.' (Unconfirmed) Warnings:
      Do NOT send a lot of messages at once. MOST networks will disconnect you. SOME networks will permanently ban you. A MINORITY will harshly retailiate. Do NOT use the Sleep() function in your scripts. It prevents you from receiving any new data, can disconnect your from the network, and have other undesired consequences. Use the TimerInit() and TimerDiff() functions and possibly a message queue. To Do:
      Possibly add in SSL functionality Create More Functions for IRC commands An entire IRC daemon written in AutoIt Possibly Include Kips TCP UDF for ASync Port Listening in Example Create Additional UDFs for extras such as CTCP, DCC, and Error Lookup Experiment with having functions check for the reply and see if reliable. Upcoming Changes:
      To Be Decided
    • Rimoun
      By Rimoun
      Hello Everyone
      this is the first time to post a problem with autoit, I have been using it for more than 3 years but im still feel new
      I have a VPS running online game ,
      -snip-
    • algiuxas
      By algiuxas
      Hello everybody,
      I'm making an program witch reads packets from server/client, first of all it reads size of the packet(it may be 1-5 bytes in size), and then reads what's left.

      Problem: TCPRecv($socket,1,1) tooks really long to receive 1 byte, most of the time 100ms!
      You can see packets here and how much time it took to read size of them(1-5 bytes, all of them are 1 byte in size): 0xAA63 (99.8802703210873ms) 0x53 (99.8829718030123ms) 0x2B (99.7435753356861ms) 0x4E (100.176352740059ms) I want to interrupt sometimes server or client, send packets, but I cannot send packets if server/client didn't get last packet. Sometimes packets are huge(16MB or even more), sometimes they are 2-6 bytes in size. I just don't want to receive everything and just send it. I want to see every packet, and collect data from these packets.
      EDIT: I receive couple packets at the same time with TCPRecv to make it faster. I use TCPRecv($socket,10000,1). It made program a bit faster... But still, when receiving again these packets, it still tooks 100ms. It's still slow.

      How to make TCPRecv($socket,1,1) faster? I don't need any error checking or etc., just to make it as fast as possible. (I only receive everything in hexadecimal)

      I really need help with this... It's so slow and annoying!