adhearsion / blather

XMPP/Jabber Library and DSL for Ruby written on EventMachine and Nokogiri.
adhearsion.com/blather
Other
556 stars 89 forks source link

Make handlers Deferrable-aware #181

Open singpolyma opened 2 years ago

singpolyma commented 2 years ago

If a handler returns an EM::Deferrable, wait for the EM result to be ready before considering the handler complete, raising and error result as an exception in the current context just like a non-async handler would have done. This allows async filters/handlers to run in order.

To be able to sync, handle_data is wrapped in a Fiber. To aid in testing or other cases that want to wait until the whole process is done, handle_data returns an EM::Deferrable that will signal the success or failure of the whole process (for both the sync and async cases). This can be safely ignored by most callers.

bklang commented 1 year ago

Looks like this has a merge conflict now. Would you take a look and resolve as necessary?

I'll be honest that I haven't reviewed this too closely, but it looks backward compatible and makes sense given your other work in this space. 👍