On Tue, 2010-08-24 at 12:33 +0100, Simon McVittie wrote: > Yes ish, but we can't use that naming, because we already have a > TpChannelFactory in CMs. Also, I think it should probably be a GInterface, > not a base class.
That did cross my mind. > How about TpClientChannelFactory as the GInterface, and > TpDefaultChannelFactory > as the reference implementation? > > > TpBaseChannelFactory has one method you need to implement, > > create_channel, which gives you a path, and the properties, and expects > > you to call whatever preparation you need, eventually calling back to > > tp_base_channel_factory_channel_ready(). > > If it's expected to be async, I think it'd be better to have > create_channel_async and create_channel_finish, and use the GAsyncResult > pattern. > > I wonder whether it should just be synchronous, and do the preparation > separately, though; if it's async, then we can't use it in any context > where we need an object synchronously. It seems better to allow for that - > we'd prefer to get an unprepared object of the right app-specific subclass > than an unprepared TpChannel, surely? Perhaps then: TpChannel* create_channel (Factory, path, properties); void prepare_channel_async (Factory, TpChannel*); gboolean prepare_channel_finish (Factory, GAsyncResult*, GError**); So that you can always create the channel, and then optionally have the factory do some async preparation that's additional to simply preparing the core features. -- Danielle Madeley Software Developer, Collabora Ltd. Melbourne, Australia www.collabora.co.uk _______________________________________________ telepathy mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/telepathy
