|
From: Erwin K. <erw...@ao...> - 2001-08-14 20:47:38
|
hi, i came across a weird problem. i wrote a mini-client that has a contact-list with uin's but no details for the contacts. so the first thing the client does as soon as you go online (apart from sending the contact list to the server and retrieving the online status of the contacts in the list) is it tries to retrieve the info and the extended info of every contact in the list, using icq_SendInfoReq() and icq_SendExtInfoReq(). of course if there are many contacts, i have to send out quite a few requests at once. i noticed that only the first 5 requests are actually processed (3 "basic" and 2 extended info requests), though i do receive the notification of the requests, the actual data is never sent. now, i have a mechanism that tries to re-request the info after 20 seconds in case the process "failed". and here comes the strange thing... only after i send the next keep-alive message (once every 2 minutes) the next 5 requests (3 basic and 2 extended) are being processed. and now comes the weirdest thing of all: during this period, while the info-requests are "stuck", i can't send messages! or in fact i DO get the notification, seeming that the message was sent, but in fact it never arrived at the recipient... in fact EVERY task (like changing my online status to "away" or something) fails... it's just ignored by the server... it seems that due to the load of info-requests i sent, the server seems to ignore me (though sending notifications) until the next keep-alive. so i fiddled with my method of requesting info-requests. clearly if i remove the whole mechanism of requesting "details", i never experience any problems with sending messages. btw, the client i send to is ICQ2000b. ok, so what i tried first was to send out the requests one by one, waiting for the previous one to complete... but no such luck, it has to do with the keep-alive message. so i added the keep-alive message after one request succeeded successfully. that seemed to help a little... i could now send messages right from the beginning, but still after sending 5 requests i needed to wait a little longer. so the next thing i tried was, send a request, wait for its completion, wait 10 seconds, then send the keep alive and after that request the next one... that again seemed to improve things. but i am not sure what the correct method is. has anyone come across this? could this have something to do with occasional reports of people saying that the messages they sent never arrived at the recipient? maybe they requested details right before that, and now due to "not sticking to the rules" the server refused to send messages? but actually the messages could have been sent "direct" and the server does not even know about them...? hmmm i am confused. just thought i post this here, maybe this is a hint for you icqlib developers, or maybe someone even knows what's going on and how to fix this? cheers anyway erwin kloibhofer austria |