Esempio n. 1
0
        private static void InnerAction(object clientProxy,
                                        Func <IWampAuthorizer, bool> authorizationCheck,
                                        Action action,
                                        Action <WampException> reportError)
        {
            IWampClientProperties wampClientProxy = clientProxy as IWampClientProxy;
            IWampAuthorizer       authorizer      = wampClientProxy.Authorizer;

            try
            {
                bool isAuthorized = authorizationCheck(authorizer);

                if (isAuthorized)
                {
                    action();
                }
                else
                {
                    reportError(new WampException(WampErrors.NotAuthorized));
                }
            }
            catch (WampException ex)
            {
                reportError(ex);
            }
        }
Esempio n. 2
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);
            }
        }