public IWampCancellableInvocation Invoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments) { TMessage number = arguments[0]; int n = formatter.Deserialize <int>(number); for (int i = 0; i < n; i++) { caller.Result(WampObjectFormatter.Value, new YieldOptions { Progress = true }, new object[] { i }); } caller.Result(WampObjectFormatter.Value, new YieldOptions(), new object[] { n }); return(null); }
public int FlushTestaments(string scope = WampTestamentScope.Destroyed) { InvocationDetails invocationDetails = WampInvocationContext.Current.InvocationDetails; long sessionId = (long)invocationDetails.Caller; int result = 0; lock (mLock) { IImmutableList <Testament> testaments; if (mSessionIdToTestaments.TryGetValue(sessionId, out testaments)) { result = testaments.Count; } mSessionIdToTestaments = mSessionIdToTestaments.Remove(sessionId); return(result); } }
protected override object InvokeSync <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords, out IDictionary <string, object> outputs) { object[] unpacked = this.UnpackParameters(formatter, arguments, argumentsKeywords) .ToArray(); string name = (string)unpacked[0]; outputs = new Dictionary <string, object>(); outputs["length"] = name.Length; for (int i = 0; i < 10; i++) { string argumentName = "item" + (i + 1); outputs[argumentName] = string.Format("{0} {1}", name, i); } return(null); }
private InvocationDetails GetInvocationDetails(InvocationDetails details) { if (!(details is InvocationDetailsExtended casted)) { return(details); } InvocationDetails result = new InvocationDetails(casted); CallOptions callerOptions = casted.CallerOptions; if (Options.DiscloseCaller == true && callerOptions.DiscloseMe == false) { throw new WampException(WampErrors.DiscloseMeNotAllowed); } if (Options.DiscloseCaller == true || callerOptions.DiscloseMe == true) { result.Caller = casted.CallerSession; result.CallerAuthenticationId = casted.AuthenticationId; result.CallerAuthenticationRole = casted.AuthenticationRole; } if (callerOptions.ReceiveProgress == true) { result.ReceiveProgress = true; } if (Options.Match != WampMatchPattern.Exact) { result.Procedure = casted.ProcedureUri; } return(result); }
private async Task InnerInvokeAsync <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords, CancellationToken cancellationToken) { try { Task <object> task = InvokeAsync(caller, formatter, details, arguments, argumentsKeywords, cancellationToken); object result = await task; CallResult(caller, result); } catch (Exception ex) { mLogger.ErrorFormat(ex, "An error occured while calling {ProcedureUri}", this.Procedure); WampException wampException = ex as WampException; if (wampException == null) { wampException = ConvertExceptionToRuntimeException(ex); } IWampErrorCallback callback = new WampRpcErrorCallback(caller); callback.Error(wampException); } }
public void Invocation(long requestId, long registrationId, InvocationDetails details, object[] arguments) { Send(mInvocation4, requestId, registrationId, details, arguments); }
public void Invocation(long requestId, long registrationId, InvocationDetails details) { Send(mInvocation3, requestId, registrationId, details); }
public void Invocation(long requestId, long registrationId, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords) { mCallee.Invocation(requestId, registrationId, details, arguments, argumentsKeywords); }
public void Invocation(long requestId, long registrationId, InvocationDetails details, TMessage[] arguments) { mCallee.Invocation(requestId, registrationId, details, arguments); }
public IWampCancellableInvocation Invoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments) { return(InnerInvoke(caller, formatter, details, arguments, null)); }
protected override object InvokeSync <TMessage> (IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords, out IDictionary <string, object> outputs) { WampInvocationContext.Current = new WampInvocationContext(details); try { object[] unpacked = UnpackParameters(formatter, arguments, argumentsKeywords) .ToArray(); object[] parameters = mHelper.GetArguments(unpacked); object instance = mInstanceProvider(); ValidateInstanceType(instance, mMethod); object result = mMethodInvoker(instance, parameters); outputs = mHelper.GetOutOrRefValues(parameters); return(result); } finally { WampInvocationContext.Current = null; } }
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); } }
public IWampCancellableInvocation Invoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords) { return(null); }
public IWampCancellableInvocation Invoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments) { this.Details = details; return(null); }
public int Add2(int x, int y) { Details = WampInvocationContext.Current.InvocationDetails; return(x + y); }
public void Invoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords) { InnerInvoke(caller, formatter, details, arguments, argumentsKeywords); }
public void Invoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments) { InnerInvoke(caller, formatter, details, arguments, null); }
protected abstract void InnerInvoke <TMessage> (IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords);
public void Invocation(long requestId, long registrationId, InvocationDetails details, object[] arguments, IDictionary <string, object> argumentsKeywords) { Send(mInvocation5, requestId, registrationId, details, arguments, argumentsKeywords); }
protected override IWampCancellableInvocation InnerInvoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords) { try { object result = InvokeSync(caller, formatter, details, arguments, argumentsKeywords, out IDictionary <string, object> outputs); CallResult(caller, result, outputs); } catch (WampException ex) { mLogger.ErrorFormat(ex, "An error occured while calling {ProcedureUri}", this.Procedure); IWampErrorCallback callback = new WampRpcErrorCallback(caller); callback.Error(ex); } catch (Exception ex) { WampException wampException = ConvertExceptionToRuntimeException(ex); IWampErrorCallback callback = new WampRpcErrorCallback(caller); callback.Error(wampException); } return(null); }
protected override IWampCancellableInvocation InnerInvoke <TMessage> (IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords) { mAction(); caller.Result(formatter, new YieldOptions()); return(null); }
public WampMessage <object> Invocation(long requestId, long registrationId, InvocationDetails details, object[] arguments, IDictionary <string, object> argumentsKeywords) { return(mSerializer.SerializeRequest(mInvocation5, new object[] { requestId, registrationId, details, arguments, argumentsKeywords })); }
public IWampCancellableInvocation Invoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details) { return(null); }
protected override object InvokeSync <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords, out IDictionary <string, object> outputs) { outputs = null; int argumentsLength = 0; if (arguments != null) { argumentsLength = arguments.Length; } int argumentKeyWordsLength = 0; if (argumentsKeywords != null) { argumentKeyWordsLength = argumentsKeywords.Count; } return(new int[] { argumentsLength, argumentKeyWordsLength }); }
protected override IWampCancellableInvocation InnerInvoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords) { try { object result = InvokeSync(caller, formatter, details, arguments, argumentsKeywords, out IDictionary <string, object> outputs); return(OnResult(caller, result, outputs)); } catch (WampException ex) { HandleException(caller, ex); } catch (Exception ex) { HandleException(caller, ex); } return(null); }
protected abstract Task <object> InvokeAsync <TMessage> (IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords, CancellationToken cancellationToken);
protected abstract object InvokeSync <TMessage> (IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords, out IDictionary <string, object> outputs);
protected override IWampCancellableInvocation InnerInvoke <TMessage>(IWampRawRpcOperationRouterCallback caller, IWampFormatter <TMessage> formatter, InvocationDetails details, TMessage[] arguments, IDictionary <string, TMessage> argumentsKeywords) { CancellationTokenSourceInvocation result = null; CancellationToken token = CancellationToken.None; if (SupportsCancellation) { CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); result = new CancellationTokenSourceInvocation(cancellationTokenSource); token = cancellationTokenSource.Token; } Task task = InnerInvokeAsync(caller, formatter, details, arguments, argumentsKeywords, token); return(result); }
/// <summary> /// Generates the ProcessPipDetails for a given Pip /// </summary> public ProcessPipDetails GenerateProcessPipDetails(Process pip) { ProcessPipDetails processPipDetails = new ProcessPipDetails(); InvocationDetails invoDetails = new InvocationDetails { Executable = pip.Executable.IsValid ? pip.Executable.Path.ToString(PathTable): null, ToolDescription = pip.ToolDescription.IsValid ? pip.ToolDescription.ToString(StringTable) : null, ResponseFilePath = pip.ResponseFile.IsValid ? pip.ResponseFile.Path.ToString(PathTable) : null, Arguments = pip.Arguments.IsValid ? pip.Arguments.ToString(PathTable) : null, ResponseFileContents = pip.ResponseFileData.IsValid ? pip.ResponseFileData.ToString(PathTable) : null, }; invoDetails.EnvironmentVariables = pip.EnvironmentVariables. Select(x => new KeyValuePair <string, string> (x.Name.ToString(StringTable), x.Value.IsValid ? x.Value.ToString(PathTable) : null)) .ToList(); invoDetails.EnvironmentVariables = invoDetails.EnvironmentVariables.Any() ? invoDetails.EnvironmentVariables : null; processPipDetails.InvocationDetails = invoDetails; InputOutputDetails inOutDetails = new InputOutputDetails { STDInFile = pip.StandardInput.File.IsValid ? pip.StandardInput.File.Path.ToString(PathTable): null, STDOut = pip.StandardOutput.IsValid ? pip.StandardOutput.Path.ToString(PathTable): null, STDError = pip.StandardError.IsValid ? pip.StandardError.Path.ToString() : null, STDDirectory = pip.StandardDirectory.IsValid ? pip.StandardDirectory.ToString(PathTable) : null, WarningRegex = pip.WarningRegex.IsValid ? pip.WarningRegex.Pattern.ToString(StringTable) : null, ErrorRegex = pip.ErrorRegex.IsValid ? pip.ErrorRegex.Pattern.ToString(StringTable) : null, STDInData = pip.StandardInputData.IsValid ? pip.StandardInputData.ToString(PathTable) : null }; processPipDetails.InputOutputDetails = inOutDetails; DirectoryDetails dirDetails = new DirectoryDetails { WorkingDirectory = pip.WorkingDirectory.IsValid ? pip.WorkingDirectory.ToString(PathTable) : null, UniqueOutputDirectory = pip.UniqueOutputDirectory.IsValid ? pip.UniqueOutputDirectory.ToString(PathTable) : null, TempDirectory = pip.TempDirectory.IsValid ? pip.TempDirectory.ToString(PathTable) : null, }; if (pip.AdditionalTempDirectories.IsValid) { dirDetails.ExtraTempDirectories = pip.AdditionalTempDirectories. Select(x => x.ToString(PathTable)) .ToList(); } dirDetails.ExtraTempDirectories = dirDetails.ExtraTempDirectories.Any() ? dirDetails.ExtraTempDirectories : null; processPipDetails.DirectoryDetails = dirDetails; AdvancedOptions advancedOptions = new AdvancedOptions { TimeoutWarning = pip.WarningTimeout.GetValueOrDefault(), TimeoutError = pip.Timeout.GetValueOrDefault(), SuccessCodes = pip.SuccessExitCodes.ToList(), Semaphores = pip.Semaphores.Select(x => x.Name.ToString(StringTable)).ToList(), HasUntrackedChildProcesses = pip.HasUntrackedChildProcesses, ProducesPathIndependentOutputs = pip.ProducesPathIndependentOutputs, OutputsMustRemainWritable = pip.OutputsMustRemainWritable, AllowPreserveOutputs = pip.AllowPreserveOutputs }; advancedOptions.SuccessCodes = advancedOptions.SuccessCodes.Any() ? advancedOptions.SuccessCodes : null; advancedOptions.Semaphores = advancedOptions.Semaphores.Any() ? advancedOptions.Semaphores : null; processPipDetails.AdvancedOptions = advancedOptions; ProcessInputOutputDetails procInOutDetails = new ProcessInputOutputDetails { FileDependencies = pip.Dependencies.Select(x => x.IsValid ? x.Path.ToString(PathTable) : null).ToList(), DirectoryDependencies = pip.DirectoryDependencies.Select(x => x.IsValid ? x.Path.ToString(PathTable) : null).ToList(), OrderDependencies = pip.OrderDependencies.Select(x => x.Value).ToList(), FileOutputs = pip.FileOutputs.Select(x => x.IsValid ? x.Path.ToString(PathTable) : null).ToList(), DirectoryOuputs = pip.DirectoryOutputs.Select(x => x.IsValid ? x.Path.ToString(PathTable) : null).ToList(), UntrackedPaths = pip.UntrackedPaths.Select(x => x.IsValid ? x.ToString(PathTable) : null).ToList(), UntrackedScopes = pip.UntrackedScopes.Select(x => x.IsValid ? x.ToString(PathTable) : null).ToList(), }; procInOutDetails.FileDependencies = procInOutDetails.FileDependencies.Any() ? procInOutDetails.FileDependencies : null; procInOutDetails.DirectoryDependencies = procInOutDetails.DirectoryDependencies.Any() ? procInOutDetails.DirectoryDependencies : null; procInOutDetails.OrderDependencies = procInOutDetails.OrderDependencies.Any() ? procInOutDetails.OrderDependencies : null; procInOutDetails.FileOutputs = procInOutDetails.FileOutputs.Any() ? procInOutDetails.FileOutputs : null; procInOutDetails.DirectoryOuputs = procInOutDetails.DirectoryOuputs.Any() ? procInOutDetails.DirectoryOuputs : null; procInOutDetails.UntrackedPaths = procInOutDetails.UntrackedPaths.Any() ? procInOutDetails.UntrackedPaths : null; procInOutDetails.UntrackedScopes = procInOutDetails.UntrackedScopes.Any() ? procInOutDetails.UntrackedScopes : null; processPipDetails.ProcessInputOutputDetails = procInOutDetails; ServiceDetails servDetails = new ServiceDetails { IsService = pip.IsService, ShutdownProcessPipId = pip.ShutdownProcessPipId.Value, ServicePipDependencies = pip.ServicePipDependencies.Select(x => x.Value).ToList(), IsStartOrShutdownKind = pip.IsStartOrShutdownKind }; servDetails.ServicePipDependencies = servDetails.ServicePipDependencies.Any() ? servDetails.ServicePipDependencies : null; processPipDetails.ServiceDetails = servDetails; return(processPipDetails); }
public void Invocation(long requestId, long registrationId, InvocationDetails details) { mCallee.Invocation(requestId, registrationId, details); }