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); } }
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); } }