I believe you are looking for something like this:

This breaks every single read and write into it's own non-blocking code. What effect that has on our client (or the server) if things end up getting sent out of order, is, well, the peril of non-blocking code. You might consider only making the large retrieve calls non-blocking, blocking the brief writes, etc.

But this is the idea, using "with message" syntax.

on handler theID, theData
repeat with x = 1 to (the second word of theData)
write ( "TOP" && x && "0" & crlf ) to socket server & ":110" with message "fetchHeader"
end repeat
end handler


on fetchHeader server
read from socket server & ":110" until crlf & "." & crlf with message "checkHeader"
end fetchHeader


on checkHeader server, theHeader
if theHeader contains "Reply-To: [EMAIL PROTECTED]" then
write ( "UIDL" && theData & crlf ) to socket server & ":110" with message "processHeader"
end if
end checkMessage


on processHeader server,theHeader
read from socket server & ":110" until crlf with message "getHash"
end processHeader


on getHash server,theMessage
put word 2 to -1 of theMessage into theHash
if theHash is not among the items of the hashList of this stack then
write ( "RETR" && theItem & crlf ) to socket server & ":110" with message "processMessage"
end if
end getHash


on processMessage server,fullMessage
read from socket server & ":110" until crlf & "." & crlf with message "retrieved"
end processMessage


on retrieved server, theMessage
    answer "GOT IT::"&theMessage
end retrieved

on handler theID theData
repeat with x = 1 to (the second word of theData) --number of messages
write ( "TOP" && x && "0" & crlf ) to socket server & ":110" --TOP 0 =get only headers
read from socket server & ":110" until crlf & "." & crlf --should be non-blocking but isn't
if theMessage contains "Reply-To: [EMAIL PROTECTED]" then
put x & "," after theList --gather all runrev messages
end if
end repeat
repeat for each item theItem in theList --all messages from runrev
write ( "UIDL" && theItem & crlf ) to socket server & ":110" --get hash of message
read from socket server & ":110" until crlf
put word 2 to -1 of it into theHash
if thehash is not among the items of the hashList of this stack then --not previously downloaded
write ( "RETR" && theItem & crlf ) to socket server & ":110" --get the whole message
read from socket server & ":110" until crlf & "." & crlf with message "retrieved" -- does this work?
end if
end repeat
end handler

_______________________________________________ use-revolution mailing list [EMAIL PROTECTED] http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to