protected bool Equals(RemoteWampCalleeDetails other)
 {
     return(Equals(Callee, other.Callee) &&
            ((string.Equals(Procedure, other.Procedure) &&
              string.Equals(Options.Match, other.Options.Match)) ||
             RegistrationId == other.RegistrationId));
 }
Example #2
0
 public WampRpcInvocation(RemoteWampCalleeDetails operation, IWampRawRpcOperationRouterCallback callback, InvocationDetails options, object[] arguments, IDictionary <string, object> argumentsKeywords)
 {
     Operation          = operation;
     Callback           = callback;
     Options            = options;
     Arguments          = arguments;
     mArgumentsKeywords = argumentsKeywords;
 }
        public void Unregister(IWampCallee callee, long registrationId)
        {
            RemoteWampCalleeDetails operation =
                new RemoteWampCalleeDetails(callee, registrationId);


            if (!mOperationToDisposable.TryRemove(operation, out IDisposable disposable))
            {
                throw new WampException(WampErrors.NoSuchRegistration, "registrationId: " + registrationId);
            }

            disposable.Dispose();

            mInvocationHandler.Unregistered(operation);
        }
Example #4
0
        public void Unregistered(RemoteWampCalleeDetails operation)
        {
            lock (mLock)
            {
                if (mOperationToInvocations.TryGetValue(operation, out ICollection <WampRpcInvocation> invocations))
                {
                    foreach (WampRpcInvocation invocation in invocations.ToArray())
                    {
                        UnregisterInvocation(invocation);

                        invocation.Callback.Error(mFormatter,
                                                  mEmptyDetails, WampErrors.CalleeUnregistered);
                    }
                }
            }
        }
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj))
            {
                return(false);
            }

            if (ReferenceEquals(this, obj))
            {
                return(true);
            }

            RemoteWampCalleeDetails casted = obj as RemoteWampCalleeDetails;

            if (casted == null)
            {
                return(false);
            }

            return(Equals(casted));
        }
        public long RegisterInvocation(RemoteWampCalleeDetails operation, IWampRawRpcOperationRouterCallback callback, InvocationDetails options, object[] arguments = null, IDictionary <string, object> argumentsKeywords = null)
        {
            lock (mLock)
            {
                WampRpcInvocation invocation =
                    new WampRpcInvocation
                        (operation, callback, options, arguments, argumentsKeywords);

                if (!mCallbackToInvocations.ContainsKey(callback))
                {
                    RegisterDisconnectionNotifier(callback);
                }

                long invocationId = mRequestIdToInvocation.Add(invocation);

                invocation.InvocationId = invocationId;

                mOperationToInvocations.Add(operation, invocation);
                mCallbackToInvocations.Add(callback, invocation);

                return(invocationId);
            }
        }
Example #7
0
        public long RegisterInvocation(RemoteWampCalleeDetails operation, IWampRawRpcOperationRouterCallback callback, InvocationDetails options, object[] arguments = null, IDictionary <string, object> argumentsKeywords = null)
        {
            lock (mLock)
            {
                WampRpcInvocation invocation =
                    new WampRpcInvocation
                        (operation, callback, options, arguments, argumentsKeywords);

                long invocationId = mRequestIdToInvocation.Add(invocation);

                invocation.InvocationId = invocationId;

                mOperationToInvocations.Add(operation, invocation);

                IWampCaller caller = GetCaller(callback);

                if (caller != null)
                {
                    if (!mCallerToInvocations.ContainsKey(caller))
                    {
                        RegisterDisconnectionNotifier(callback);
                    }

                    mCallerToInvocations.Add(caller, invocation);
                }

                IWampClientProperties properties = invocation.Operation.Callee as IWampClientProperties;

                if (properties.HelloDetails?.Roles?.Callee?.Features?.CallCanceling == true)
                {
                    mCallbackToInvocation.Add(callback, invocation);
                }

                return(invocationId);
            }
        }