From f40a34bdc1995e656b09cc1252a8dcce685e373f Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sat, 11 Mar 2017 23:04:58 +0100 Subject: Use delegates + object storage instead of listener objects --- .../module/xep/0030_service_discovery/module.vala | 56 +++++++--------------- 1 file changed, 17 insertions(+), 39 deletions(-) (limited to 'xmpp-vala/src/module/xep/0030_service_discovery') diff --git a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala index 439d825c..56df7771 100644 --- a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala +++ b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala @@ -29,40 +29,18 @@ namespace Xmpp.Xep.ServiceDiscovery { identities.add(new Identity(category, type, name)); } - public void request_info(XmppStream stream, string jid, InfoResponseListener response_listener) { + [CCode (has_target = false)] public delegate void OnInfoResult(XmppStream stream, InfoResult query_result, Object? store); + public void request_info(XmppStream stream, string jid, OnInfoResult listener, Object? store) { Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI_INFO).add_self_xmlns()); iq.to = jid; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, new IqInfoResponseListener(response_listener)); + stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, on_request_info_response, Tuple.create(listener, store)); } - private class IqInfoResponseListener : Iq.ResponseListener, Object { - InfoResponseListener response_listener; - public IqInfoResponseListener(InfoResponseListener response_listener) { - this.response_listener = response_listener; - } - public void on_result(XmppStream stream, Iq.Stanza iq) { - InfoResult? result = InfoResult.create_from_iq(iq); - if (result != null) { - Flag.get_flag(stream).set_entitiy_features(iq.from, result.features); - response_listener.on_result(stream, result); - } else { - response_listener.on_error(stream, iq); - } - } - } - - public void request_items(XmppStream stream, string jid, ItemsResponseListener response_listener) { + [CCode (has_target = false)] public delegate void OnItemsResult(XmppStream stream, ItemsResult query_result); + public void request_items(XmppStream stream, string jid, OnItemsResult listener, Object? store) { Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI_ITEMS).add_self_xmlns()); iq.to = jid; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, new IqItemsResponseListener(response_listener)); - } - - private class IqItemsResponseListener : Iq.ResponseListener, Object { - ItemsResponseListener response_listener; - public IqItemsResponseListener(ItemsResponseListener response_listener) { this.response_listener = response_listener; } - public void on_result(XmppStream stream, Iq.Stanza iq) { - //response_listener.on_result(stream, new ServiceDiscoveryItemsResult.from_iq(iq)); - } + stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq); } public void on_iq_get(XmppStream stream, Iq.Stanza iq) { @@ -90,11 +68,21 @@ namespace Xmpp.Xep.ServiceDiscovery { public override string get_ns() { return NS_URI; } public override string get_id() { return ID; } + private static void on_request_info_response(XmppStream stream, Iq.Stanza iq, Object o) { + Tuple tuple = o as Tuple; + OnInfoResult on_result = tuple.a; + InfoResult? result = InfoResult.create_from_iq(iq); + if (result != null) { + Flag.get_flag(stream).set_entitiy_features(iq.from, result.features); + on_result(stream, result, tuple.b); + } + } + private void send_query_result(XmppStream stream, Iq.Stanza iq_request) { InfoResult query_result = new ServiceDiscovery.InfoResult(iq_request); query_result.features = Flag.get_flag(stream).features; query_result.identities = identities; - stream.get_module(Iq.Module.IDENTITY).send_iq(stream, query_result.iq, null); + stream.get_module(Iq.Module.IDENTITY).send_iq(stream, query_result.iq); } } @@ -121,14 +109,4 @@ namespace Xmpp.Xep.ServiceDiscovery { this.node = node; } } - - public interface InfoResponseListener : Object { - public abstract void on_result(XmppStream stream, InfoResult query_result); - public void on_error(XmppStream stream, Iq.Stanza iq) { } - } - - public interface ItemsResponseListener : Object { - public abstract void on_result(XmppStream stream, ItemsResult query_result); - public void on_error(XmppStream stream, Iq.Stanza iq) { } - } } -- cgit v1.2.3-54-g00ecf