Just some responses to your questions. For the most part, what you said is what we have talked about :) I'll read it through again and try to find some parts to pick at ;)
On 4/25/07, Erik Johansson <[EMAIL PROTECTED]> wrote:
The question now is, what do you think about this proposal? I'm especially interested in comments on the event pipeline. Is this a good way to do things? What happens if a plugin crashes? Or simply drops an event? Should there be a timeout?
As you described the pipeline, I think it is good. As for your questions... If an event gets dropped/stalled, the error recovery will be hard to decide dynamically. For example, if the message is encrypted and gets stuck/lost in the decrypter, the user can't see the message. This is pretty much the worst case scenario, so we should treat all problems within the pipeline as the worst case. So, what do we do? We'd have to save the original message so Licq can be re-run to decrypt the message. So, until the last plugin succesfully handles the event, we should keep a copy around just in case. As for a timeout, I don't think we should do that. If there is a problem with a plugin, the user can stop running it (restart Licq?). The error handling will keep the state, so the next time through the event will be processed properly. It may not sound like a good idea to treat all cases as the worst-case. But if we do treat it like that, we will have a (theoretically) good recovery plan that in the end, will keep the user from losing the data. Of course, it is easy to say here, but that is ideally what I want.
Should it be possible to "broadcast" an event to all plugins at the same time?
At first I thought it would be good to have, but I'm gonna have to say no to this. Mainly because the point of the pipeline is to allow plugins to alter events and their properties as seen fit by the plugin developers. If we make an exception, it may not be as flexible a system as we are designing it to be.
What about pointers in event properties? Should we allow this or should they be value only?
Definitely allow pointers. If we have large objects, we don't want to be having expensive copying operations throughout the pipeline.
When a plugin sends an event, does it send it to the daemon and let it decide what to do with it, inform the daemon that "this event should be sent to protocol plugin Y" or does it send it directly to plugin Y?
It should go through the daemon. Since we want to allow plugins to be connected at any point, the daemon will be taking care of that job for us.
What about all the stuff I forgot to mention? :)
Will have to think about this... Jon -- ________________________________________________________ Jon Keating ICQ: 16325723 [EMAIL PROTECTED] MSN: [EMAIL PROTECTED] http://www.licq.org GPG: 2290A71F http://www.thejon.org HOME: Minamiashigara, Japan
