Simple irc client troubles
Posted: Wed Aug 11, 2004 4:58 pm
I can't understand why, although I can connect and recieve the welcome message, any other attempts to recieve data are met with a harsh <ping timeout>
I have it working using a 3rd part TCP/UDP DLL however, I'd rather use the internal functions if possible.
If anyone has any idea to what is going wrong please let me know.
I have it working using a 3rd part TCP/UDP DLL however, I'd rather use the internal functions if possible.
If anyone has any idea to what is going wrong please let me know.
Code: Select all
Global Quit, Connection, Callback$, Message$, *Buffer, *TBuffer, DBGM
Declare SendString( lpString.s, lpSuccess.s )
Declare ClearBuffer( *Void.l, dwSize.l )
Declare ConnectToNetwork()
Declare GetNetworkMessage()
NewList TString.s()
#MAXBUFFERSIZE=1024
*Buffer = AllocateMemory(#MAXBUFFERSIZE)
*TBuffer = AllocateMemory(1) ; Token Allocation
NICK$ = "NICK SirC"
USER$ = "USER Raven 0 * :Robert"
JOIN$ = "JOIN #dbp"
DBGM = #TRUE ; Debug Mode
If OpenConsole()
ConsoleTitle( "SimpleIRC v0.01.0 build 0004" )
If InitNetwork()
ConnectToNetwork()
SendString( NICK$, "Nick Changed" )
SendString( USER$, "User Data Updated" )
SendString( JOIN$, "Joined Channel" )
EndIf
Repeat
;Message$ = Input() : PrintN("") ; this is sloppy, and i think hangs the system
GetNetworkMessage()
Select UCase(Message$)
Case "QUIT" : Quit=1
Case "CONNECT" : ConnectToNetwork()
Case "GETMSG" : GetNetworkMessage()
Default
PrintN("")
SendString( Message$, "Operation Successful" )
EndSelect
Until Quit=1
FreeMemory(*Buffer)
FreeMemory(*TBuffer)
CloseNetworkConnection(Connection)
CloseConsole()
EndIf
Procedure.l SendString( lpString.s, lpSuccess.s )
If lpString
ReAlloc.l = MemoryStringLength( lpString )
*TBuffer = ClearBuffer( *TBuffer, ReAlloc )
PokeS( *TBuffer, lpString )
Result.l = SendNetworkData( Connection, *TBuffer, ReAlloc )
If Result And lpSuccess
Print( lpSuccess )
If DBGM=#TRUE
PrintN( " :: Sent "+Str(Result)+" bytes"+" :: "+PeekS(*TBuffer) )
Else
PrintN("")
EndIf
Else
ProcedureReturn #FALSE
EndIf
Else
ProcedureReturn #FALSE
EndIf
ProcedureReturn #TRUE
EndProcedure
Procedure.l ClearBuffer( *ptr.l, dwSize )
; this might be kinda lazy but seemed the simplist solution
FreeMemory( *ptr )
*ptr = AllocateMemory( dwSize )
ProcedureReturn *ptr
EndProcedure
Procedure ConnectToNetwork()
Connection = OpenNetworkConnection( "lightning.chattingaway.com", 6667 )
If Connection
PrintN( "Connected To Network" )
GetNetworkMessage()
EndIf
EndProcedure
Procedure GetNetworkMessage()
Result.l = ReceiveNetworkData( Connection, *Buffer, #MAXBUFFERSIZE )
Callback$ = PeekS( *Buffer )
If Left( Callback$, 5 ) = "PING "
SendString( "PONG "+Right(Callback$, Len(Callback$)-5 ), "Pinged" )
Else
Print(Callback$)
*Buffer = ClearBuffer( *Buffer, #MAXBUFFERSIZE )
If DBGM=#TRUE
PrintN( " :: Received "+Str(Result)+" bytes" )
Else
PrintN("")
EndIf
EndIf
EndProcedure