Jump to content
Sign in to follow this  
thedominance

TCP connection not receive all data?

Recommended Posts

thedominance

Hey all, I'm new to these forums and need some help!

My IRCbot project has a few flaws already.

- multi-line IRC data seems to get packed in one variable (I need one line in the variable, could use a split and needs more work)

- Looks like data is missing

Here is the main function.

Func MainLoop()
    ; Start The TCP Services
    ;==============================================
    TCPStartup()

    ; Connect to a server
    ;==============================================
    $IRCSock = TCPConnect(TCPNameToIP($cfg_server), $cfg_port)

    ; If the Socket creation fails, exit.
    If $IRCSock = -1 Then Exit

    ; Send User and Nick info, so the IRC server knows who you are
    IRCSend("USER " & $cfg_ident & " 8 * :" & $cfg_realname)
    IRCSend("NICK " & $cfg_nick)

    While 1
        ; Try to receive 2048 bytes of data
        ;----------------------------------------------------------------
        $recv = TCPRecv($IRCSock, 2048)

        ; If the receive failed with @error then the socket has disconnected
        ;----------------------------------------------------------------
        If @error Then ExitLoop

        ; Check if there is some data, then show it. And if it is any usefull, use it!
        ;----------------------------------------------------------------
        If $recv <> "" Then
            ConsoleWrite("[IN]: " & $recv)

            If StringLeft($recv, 6) = "PING :" Then
                IRCSend("PONG :" & StringRight($recv, 6))
            EndIf
        EndIf
    WEnd

    TCPShutdown()
EndFunc   ;==>MainLoop

But when I run it, it doesn't seem to get it first Ping? Pong! event.

[OUT]: USER hhh 8 * :ohlawd
[OUT]: NICK pooppenis
[IN]: :some.irc.server NOTICE AUTH :*** Looking up your hostname...
:some.irc.server NOTICE AUTH :*** Found your hostname (cached)
[IN]: ERROR :Closing Link: [111.111.111.111] (Ping timeout)
+>AutoIT3.exe ended.rc:0

While this should happen:

-> USER hhh 9 * :ohlawd
 -> NICK pooppenis
 <- :some.irc.server NOTICE AUTH :*** Looking up your hostname...
 <- :some.irc.server NOTICE AUTH :*** Found your hostname (cached)
 <- PING :2E9F0472
 -> PONG :2E9F0472
 <- :some.irc.server 001 pooppenis :Welcome to the SomeNet IRC Network pooppenis!hhh@cool.hostname.com

So, why does '$recv = TCPRecv($IRCSock, 2048)' sometimes put those 2 lines in the same variable?

And why doesn't it receive the incoming PING :ASFSDDF?

// Thanks, The Dominance

Also, if this code inspired you or you just want to use/steal it, go ahead. :)

Edited by thedominance

Share this post


Link to post
Share on other sites
thedominance

OK, the Ping Pong is fixed because

- An IRC message should have a CRLF behind it

- I should have used 'StringTrimLeft' to remove the 'PING :'

If StringLeft($recv, 6) = "PING :" Then IRCSend("PONG :" & StringTrimLeft($recv, 6))
Edited by thedominance

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.