public IAsyncResult <object> Invoke(RemoteProcedureInfo procedure, params object[] arguments) { var request = new List <string>(); request.Add(procedure.Name); if (arguments != null && arguments.Length > 0) { foreach (var a in arguments) { request.Add(ArgumentToCommandString(a)); } } var command = new CommandData(null, String.Join(" ", request), CommandResponseTimeout, procedure.ReturnType); return(EnqueueCommand(command)); }
public IAsyncResult <object> Invoke(string procedure, params object[] arguments) { var cmd = new RemoteProcedureInfo(procedure); return(Invoke(cmd, arguments)); }
internal static RemoteProcedureInfo DecodeRemoteProcedureInfo(string command, int id, List <string> responseLines) { string helpPrefix = "Help: "; string parametersPrefix = "Parameters: "; string returnTypePrefix = "Return type: "; string lisSBPrefix = "Lists: "; var returnType = typeof(void); string help = null; var parameters = new List <Tuple <string, Type> >(); string lists = null; string error = null; foreach (var line in responseLines) { if (line.StartsWith(helpPrefix)) { help = line.Substring(helpPrefix.Length); } else { if (line.StartsWith(parametersPrefix, StringComparison.InvariantCulture)) { var endIndex = line.IndexOf('.'); var parametersString = line.Substring(parametersPrefix.Length, ((endIndex > 0) ? endIndex : line.Length) - parametersPrefix.Length); var parametersTexts = parametersString.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries); foreach (var parameter in parametersTexts) { var parts = parameter.Split(' '); Type type = null; string name = ""; switch (parts.Length) { case 1: name = parameter; type = typeof(object); break; case 2: name = parts[1]; type = DecodeTypeString(parts[0]); break; default: break; } if (type == null) { error = "Error decoding parameters."; } else { parameters.Add(new Tuple <string, Type>(name, type)); } } } else if (line.StartsWith(lisSBPrefix, StringComparison.InvariantCulture)) { lists = line.Substring(lisSBPrefix.Length); } int i = line.IndexOf(returnTypePrefix, StringComparison.InvariantCulture); if (i >= 0) { var typeString = line.Substring(i + returnTypePrefix.Length); returnType = DecodeTypeString(typeString); } } } var procInfo = new RemoteProcedureInfo(command, id, help, returnType, lists, error); foreach (var p in parameters) { procInfo.AddParameter(p.Item1, "", p.Item2); } return(procInfo); }