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

Reply via email to