public SubscriptionFuture ProcessSubscribe(SubscriptionConfig config, ISubscriptionObserver observer)
        {
            Log.V("Processing subscribe, subscription: {0}", this);

            if (!MarkAsDeleted || Future != null)
            {
                return(null);
            }

            Future = new SubscriptionFuture(
                subscriptionId: SubscriptionId,
                mode: config.Mode,
                filter: config.Filter,
                period: config.Period,
                position: config.Position,
                history: config.History,
                observer: observer);

            return(Future);
        }
        public SubscriptionFuture ProcessUnsubscribe()
        {
            Log.V("Processing unsubscribe, subscription: {0}", this);

            if (!MarkAsDeleted)
            {
                MarkAsDeleted = true;
                _state.ProcessMarkedAsDeleted();
                return(this);
            }

            if (Future != null)
            {
                Future.NotifyCreated();
                Future.NotifyDeleted();
                var ret = Future;
                Future = null;
                return(ret);
            }

            return(null);
        }
 public static void NotifyCreated(this SubscriptionFuture future)
 {
     future?.Observer.NotifyCreated(future);
 }
 public static void NotifyUnsubscribeError(this SubscriptionFuture future, ISubscription subscription, Exception error)
 {
     future?.Observer.NotifyUnsubscribeError(future, error);
 }
 public static void NotifySubscriptionInfo(this SubscriptionFuture future, RtmSubscriptionInfo info)
 {
     future?.Observer.NotifySubscriptionInfo(future, info);
 }
 public static void NotifySubscriptionError(this SubscriptionFuture future, RtmSubscriptionError error)
 {
     future?.Observer.NotifySubscriptionError(future, error);
 }
 public static void NotifySubscriptionData(this SubscriptionFuture future, RtmSubscriptionData data)
 {
     future?.Observer.NotifySubscriptionData(future, data);
 }
 public static void NotifyLeaveFailed(this SubscriptionFuture future)
 {
     future?.Observer.NotifyLeaveFailed(future);
 }
 public static void NotifyLeaveUnsubscribing(this SubscriptionFuture future)
 {
     future?.Observer.NotifyLeaveUnsubscribing(future);
 }
 public static void NotifyEnterSubscribed(this SubscriptionFuture future)
 {
     future?.Observer.NotifyEnterSubscribed(future);
 }
 public static void NotifyEnterSubscribing(this SubscriptionFuture future, RtmSubscribeRequest request)
 {
     future?.Observer.NotifyEnterSubscribing(future, request);
 }