Example: Receive notifications when a client subscribes to a routing topic
The following examples use the SubscriptionControl feature in the Unified API to listen for notifications of when a client subscribes to a routing topic.
Java and Android
package com.pushtechnology.diffusion.examples; import com.pushtechnology.diffusion.client.Diffusion; import com.pushtechnology.diffusion.client.features.control.topics.SubscriptionControl; import com.pushtechnology.diffusion.client.features.control.topics.SubscriptionControl.RoutingSubscriptionRequest; import com.pushtechnology.diffusion.client.features.control.topics.SubscriptionControl.SubscriptionCallback; import com.pushtechnology.diffusion.client.session.Session; /** * This demonstrates using a control client to be notified of subscription * requests to routing topics. * <P> * This uses the 'SubscriptionControl' feature. * * @author Push Technology Limited * @since 5.0 */ public class ControlClientSubscriptionControlRouting { private final Session session; /** * Constructor. * * @param routingCallback for routing subscription requests */ public ControlClientSubscriptionControlRouting( final SubscriptionCallback routingCallback) { session = Diffusion.sessions().principal("control").password("password") .open("ws://diffusion.example.com:80"); final SubscriptionControl subscriptionControl = session.feature(SubscriptionControl.class); // Sets up a handler so that all subscriptions to topic a/b are routed // to routing/target/topic // To do this, the client session requires the 'view_session', // 'modify_session', and 'register_handler' permissions. subscriptionControl.addRoutingSubscriptionHandler( "a/b", new SubscriptionControl.RoutingSubscriptionRequest.Handler .Default() { @Override public void onSubscriptionRequest( final RoutingSubscriptionRequest request) { request.route( "routing/target/topic", routingCallback); } }); } /** * Close the session. */ public void close() { session.close(); } }
.NET
using PushTechnology.ClientInterface.Client.Factories; using PushTechnology.ClientInterface.Client.Features.Control.Topics; using PushTechnology.ClientInterface.Client.Session; namespace Examples { /// <summary> /// This demonstrates using a control client to be notified of subscription requests to routing topics. /// /// This uses the <see cref="ISubscriptionControl"/> feature. /// </summary> public class ControlClientSubscriptionControlRouting { private readonly ISession session; /// <summary> /// Constructor. /// </summary> /// <param name="routingCallback">The callback for routing subscription requests.</param> public ControlClientSubscriptionControlRouting( ISubscriptionCallback routingCallback ) { session = Diffusion.Sessions.Principal( "control" ).Password( "password" ) .Open( "ws://diffusion.example.com:80" ); var subscriptionControl = session.GetSubscriptionControlFeature(); // Sets up a handler so that all subscriptions to topic 'a/b' are routed to the routing/target topic. // To do this, the client session requires the VIEW_SESSION, MODIFY_SESSION and REGISTER_HANDLER // permissions. subscriptionControl.AddRoutingSubscriptionHandler( "a/b", new SubscriptionHandler( routingCallback ) ); } /// <summary> /// Close the session. /// </summary> public void Close() { session.Close(); } private class SubscriptionHandler : RoutingSubscriptionRequestHandlerDefault { private readonly ISubscriptionCallback theRoutingCallback; public SubscriptionHandler( ISubscriptionCallback callback ) { theRoutingCallback = callback; } /// <summary> /// A request to subscribe to a specific routing topic. /// </summary> /// <param name="request"></param> public override void OnSubscriptionRequest( IRoutingSubscriptionRequest request ) { request.Route( "routing/target/topic", theRoutingCallback ); } } } }
Change the URL from that provided in the example to the URL of the Diffusion™ server.
This page last modified: 2017/06/29