channelRegistrations;
10 |
11 | /**
12 | * @return The device token that device receives after registration on Google FCM.
13 | */
14 | public String getDeviceToken()
15 | {
16 | return deviceToken;
17 | }
18 |
19 | /**
20 | * @return The map, where key is a channel name and value is a device registration id (table DeviceRegistrations).
21 | * It is received after successful registration on Backendless server.
22 | */
23 | public Map getChannelRegistrations()
24 | {
25 | return channelRegistrations;
26 | }
27 |
28 | DeviceRegistrationResult setDeviceToken( String deviceToken )
29 | {
30 | this.deviceToken = deviceToken;
31 | return this;
32 | }
33 |
34 | DeviceRegistrationResult setChannelRegistrations( Map channelRegistrations )
35 | {
36 | this.channelRegistrations = channelRegistrations;
37 | return this;
38 | }
39 |
40 | @Override
41 | public String toString()
42 | {
43 | return "DeviceRegistrationResult{" + "deviceToken='" + deviceToken + '\'' + ", channelRegistrations=" + channelRegistrations + '}';
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/AbstractListenerFactory.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | public abstract class AbstractListenerFactory
4 | {
5 | protected E create( final String key, Provider provider )
6 | {
7 | return provider.create();
8 | }
9 |
10 | protected interface Provider
11 | {
12 | T create();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/AbstractRequest.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | import weborb.v3types.GUID;
4 |
5 | import java.util.HashMap;
6 | import java.util.Map;
7 |
8 | public abstract class AbstractRequest implements RTRequest
9 | {
10 | private final String id;
11 | private final RTCallback callback;
12 | private final Map options = new HashMap<>( );
13 |
14 | protected AbstractRequest( RTCallback callback )
15 | {
16 | this.id = new GUID().toString();
17 | this.callback = callback;
18 | }
19 |
20 | @Override
21 | public RTCallback getCallback()
22 | {
23 | return callback;
24 | }
25 |
26 | public String getId()
27 | {
28 | return id;
29 | }
30 |
31 | @Override
32 | public Object getOptions()
33 | {
34 | return options;
35 | }
36 |
37 | protected void putOption(String key, Object value)
38 | {
39 | options.put( key, value );
40 | }
41 |
42 | public Object getOption( String key )
43 | {
44 | return options.get( key );
45 | }
46 |
47 | @Override
48 | public Map toArgs()
49 | {
50 | final Map args = new HashMap<>( );
51 |
52 | args.put( "id", getId() );
53 | args.put( "name", getName() );
54 | args.put( "options", getOptions() );
55 |
56 | return args;
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/MethodTypes.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | public enum MethodTypes
4 | {
5 | SET_USER_TOKEN,
6 | PUB_SUB_COMMAND,
7 | RSO_GET,
8 | RSO_SET,
9 | RSO_CLEAR,
10 | RSO_COMMAND,
11 | RSO_INVOKE
12 | }
13 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/NoSocketIOException.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | import com.backendless.exceptions.BackendlessException;
4 |
5 | public class NoSocketIOException extends BackendlessException
6 | {
7 | public NoSocketIOException()
8 | {
9 | super(new BackendlessException( "To use real time features add socket.io-client:1.0.0 dependency" ));
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTCallback.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | import com.backendless.async.callback.AsyncCallback;
4 | import weborb.types.IAdaptingType;
5 |
6 | public interface RTCallback extends AsyncCallback
7 | {
8 | AsyncCallback usersCallback();
9 | }
10 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTCallbackWithFault.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | import com.backendless.exceptions.BackendlessFault;
4 |
5 | import java.util.logging.Logger;
6 |
7 | public abstract class RTCallbackWithFault implements RTCallback
8 | {
9 | private static final Logger logger = Logger.getLogger( "RTCallbackWithFault" );
10 |
11 | @Override
12 | public void handleFault( BackendlessFault fault )
13 | {
14 | logger.warning( "got fault " + fault );
15 |
16 | if( usersCallback() != null )
17 | usersCallback().handleFault( fault );
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTClient.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | import com.backendless.async.callback.Fault;
4 | import com.backendless.async.callback.Result;
5 |
6 | public interface RTClient
7 | {
8 | void subscribe( RTSubscription subscription );
9 |
10 | void unsubscribe( String subscriptionId );
11 |
12 | void userLoggedIn( String userToken );
13 |
14 | void userLoggedOut();
15 |
16 | void invoke( RTMethodRequest methodRequest );
17 |
18 | void setConnectEventListener( Result callback );
19 |
20 | void setReconnectAttemptEventListener( Result callback );
21 |
22 | void setConnectErrorEventListener( Fault fault );
23 |
24 | void setDisconnectEventListener( Result callback );
25 |
26 | boolean isConnected();
27 |
28 | void connect();
29 |
30 | void disconnect();
31 |
32 | boolean isAvailable();
33 | }
34 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTClientFactory.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | public class RTClientFactory
4 | {
5 | private static final RTClient rtClient;
6 |
7 | static
8 | {
9 | RTClient rt;
10 | try
11 | {
12 | rt = new AsynRTClient();
13 | }
14 | catch( NoClassDefFoundError e )
15 | {
16 | rt = new RTClientWithoutSocketIO();
17 | }
18 |
19 | rtClient = rt;
20 | }
21 |
22 | public static RTClient get()
23 | {
24 | return rtClient;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTListener.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | public interface RTListener
4 | {
5 | interface Predicate
6 | {
7 | boolean test( RTSubscription subscription );
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTListenerImpl.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | import java.util.Iterator;
4 | import java.util.Map;
5 | import java.util.concurrent.ConcurrentHashMap;
6 |
7 | public class RTListenerImpl implements RTListener
8 | {
9 | private final Map subscriptions = new ConcurrentHashMap<>( );
10 |
11 | private RTClient rt = RTClientFactory.get();
12 |
13 | protected void addEventListener( RTSubscription subscription )
14 | {
15 | subscriptions.put( subscription.getId(), subscription );
16 | rt.subscribe( subscription );
17 | }
18 |
19 | protected void removeEventListener( final RTSubscription subscription )
20 | {
21 | removeEventListener( new Predicate()
22 | {
23 | @Override
24 | public boolean test( RTSubscription other )
25 | {
26 | return other.equals( subscription );
27 | }
28 | } );
29 | }
30 |
31 | protected void removeEventListener( Predicate criteria )
32 | {
33 | Iterator iterator = subscriptions.values().iterator();
34 |
35 | while( iterator.hasNext() )
36 | {
37 | RTSubscription rtSubscription = iterator.next();
38 |
39 | if( criteria.test( rtSubscription ) )
40 | {
41 | rt.unsubscribe( rtSubscription.getId() );
42 | iterator.remove();
43 | }
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTMethodRequest.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | public class RTMethodRequest extends AbstractRequest
4 | {
5 | private final MethodTypes methodType;
6 |
7 | public RTMethodRequest( MethodTypes methodType, RTCallback callback )
8 | {
9 | super( callback );
10 | this.methodType = methodType;
11 | }
12 |
13 | @Override
14 | public String getName()
15 | {
16 | return methodType.name();
17 | }
18 |
19 | public MethodTypes getMethodType()
20 | {
21 | return methodType;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTRequest.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | import java.util.Map;
4 |
5 | public interface RTRequest
6 | {
7 | String getId();
8 |
9 | String getName();
10 |
11 | Object getOptions();
12 |
13 | RTCallback getCallback();
14 |
15 | Map toArgs();
16 | }
17 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTService.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | import com.backendless.async.callback.Fault;
4 | import com.backendless.async.callback.Result;
5 |
6 | public interface RTService
7 | {
8 | void addConnectListener( Result callback );
9 |
10 | void addReconnectAttemptListener( Result callback );
11 |
12 | void addConnectErrorListener( Fault fault );
13 |
14 | void removeConnectionListeners();
15 |
16 | void addDisconnectListener( Result callback );
17 |
18 | void removeListener( T callback );
19 |
20 | void connect();
21 |
22 | void disconnect();
23 | }
24 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/RTSubscription.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | public class RTSubscription extends AbstractRequest
4 | {
5 | private final SubscriptionNames subscriptionName;
6 |
7 | protected RTSubscription( SubscriptionNames subscriptionName, RTCallback callback )
8 | {
9 | super( callback );
10 | if( callback == null )
11 | throw new IllegalArgumentException( "Callback can not be null" );
12 |
13 | this.subscriptionName = subscriptionName;
14 | }
15 |
16 | @Override
17 | public String getName()
18 | {
19 | return subscriptionName.name();
20 | }
21 |
22 | public SubscriptionNames getSubscriptionName()
23 | {
24 | return subscriptionName;
25 | }
26 |
27 | @Override
28 | public String toString()
29 | {
30 | return "RTSubscription{" + "id='" + getId() + '\'' + ", callback=" + getCallback() + ", subscriptionName=" + subscriptionName + ", options=" + getOptions() + '}';
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/ReconnectAttempt.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | public class ReconnectAttempt
4 | {
5 | private final int timeout;
6 | private final int attempt;
7 | private String error;
8 |
9 | public ReconnectAttempt( int timeout, int attempt, String error )
10 | {
11 | this( timeout, attempt );
12 | this.error = error;
13 | }
14 |
15 | public ReconnectAttempt( int timeout, int attempt )
16 | {
17 | this.timeout = timeout;
18 | this.attempt = attempt;
19 | }
20 |
21 | public int getTimeout()
22 | {
23 | return timeout;
24 | }
25 |
26 | public int getAttempt()
27 | {
28 | return attempt;
29 | }
30 |
31 | String getError()
32 | {
33 | return error;
34 | }
35 |
36 | @Override
37 | public String toString()
38 | {
39 | return "ReconnectAttempt{" + "timeout=" + timeout + ", attempt=" + attempt + ", error='" + error + '\'' + '}';
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/SubscriptionNames.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt;
2 |
3 | public enum SubscriptionNames
4 | {
5 | OBJECTS_CHANGES,
6 | RELATIONS_CHANGES,
7 | PUB_SUB_CONNECT,
8 | PUB_SUB_MESSAGES,
9 | PUB_SUB_COMMANDS,
10 | PUB_SUB_USERS,
11 | RSO_CONNECT,
12 | RSO_CHANGES,
13 | RSO_CLEARED,
14 | RSO_COMMANDS,
15 | RSO_INVOKE,
16 | RSO_USERS
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/command/CommandRequest.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt.command;
2 |
3 | import com.backendless.rt.MethodTypes;
4 | import com.backendless.rt.RTCallback;
5 | import com.backendless.rt.RTMethodRequest;
6 |
7 | public class CommandRequest extends RTMethodRequest
8 | {
9 |
10 | public CommandRequest( MethodTypes methodType, RTCallback callback )
11 | {
12 | super( methodType, callback );
13 | }
14 |
15 | protected CommandRequest setData( Object data )
16 | {
17 | putOption( "data", data );
18 | return this;
19 | }
20 |
21 | protected CommandRequest setType( String type )
22 | {
23 | putOption( "type", type );
24 | return this;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/com/backendless/rt/data/EventHandlerFactory.java:
--------------------------------------------------------------------------------
1 | package com.backendless.rt.data;
2 |
3 | import com.backendless.rt.AbstractListenerFactory;
4 |
5 | import java.util.Map;
6 |
7 | public class EventHandlerFactory extends AbstractListenerFactory
8 | {
9 | @SuppressWarnings( "unchecked" )
10 | public EventHandler of( final Class entity )
11 | {
12 | return create( entity.getName(), new Provider()
13 | {
14 | @Override
15 | public EventHandlerImpl create()
16 | {
17 | return new EventHandlerImpl( entity );
18 | }
19 | } );
20 | }
21 |
22 | @SuppressWarnings( "unchecked" )
23 | public EventHandler