private static void GenerateHttpMethodParameters(MethodReferenceInfo methodInfo, string prefix, StringBuilder builder, bool doSemicolon = true) { foreach (ParameterReferenceInfo parameter in methodInfo.Parameters) { builder.AppendLine($"{prefix + prefix + prefix} new ParameterInfo() {{ Name = nameof({parameter.Name}),Value = Newtonsoft.Json.JsonConvert.SerializeObject({parameter.Name}) }},"); } }
private static void GenerateHttpAsyncMethod(MethodReferenceInfo methodInfo, string serviceName, string prefix, StringBuilder builder, bool doSemicolon = true) { if (methodInfo.ReturnTypeName.Contains("SignalGo.Shared.Http.ActionResult")) { return; } string returnType = "public async Task"; if (methodInfo.ReturnTypeName != "void") { returnType = "public async Task<" + methodInfo.ReturnTypeName + ">"; } builder.AppendLine($"{prefix}{returnType} {methodInfo.Name}Async({GenerateMethodParameters(methodInfo)}){(doSemicolon ? ";" : "")}"); //generate empty data if (!doSemicolon) { builder.AppendLine($"{prefix}{{"); builder.AppendLine($"{prefix + prefix}HttpClientResponse result = await _httpClient.PostAsync(_serverUrl + (_serverUrl.EndsWith(\"/\") ? \"\" : \"{"/"}\") + \"{serviceName}/{methodInfo.Name}\", new ParameterInfo[]"); builder.AppendLine($"{prefix + prefix}{{"); GenerateHttpMethodParameters(methodInfo, prefix, builder, doSemicolon); builder.AppendLine($"{prefix + prefix}}});"); builder.AppendLine($"{prefix + prefix}ResponseHeaders = result.ResponseHeaders;"); builder.AppendLine($"{prefix + prefix}Status = result.Status;"); if (methodInfo.ReturnTypeName != "void") { builder.AppendLine($"{prefix + prefix}return SignalGo.Client.ClientSerializationHelper.DeserializeObject<{methodInfo.ReturnTypeName}>(result.Data);"); } builder.AppendLine($"{prefix}}}"); } }
private string GenerateMethodParameters(MethodReferenceInfo methodInfo, string baseServiceName, Dictionary <string, Dictionary <string, string> > nameSpaces, bool isStream) { StringBuilder builder = new StringBuilder(); int index = 0; foreach (ParameterReferenceInfo item in methodInfo.Parameters) { if (item.TypeName.StartsWith("SignalGo.Shared.Models.StreamInfo")) { continue; } if (index > 0) { builder.Append(", "); } string returnType = GetReturnTypeName(item.TypeName, baseServiceName, nameSpaces); //AddToDictionary(nameSpaces, returnType); builder.Append($"{item.Name}: {returnType}"); index++; } if (isStream) { if (index > 0) { builder.Append(", "); } builder.Append("...params: any[]"); } return(builder.ToString()); }
private static void GenerateHttpMethodParameters(MethodReferenceInfo methodInfo, string prefix, StringBuilder builder, bool doSemicolon = true) { foreach (ParameterReferenceInfo parameter in methodInfo.Parameters) { builder.AppendLine($"{prefix + prefix + prefix} new SignalGo.Shared.Models.ParameterInfo() {{ Name = nameof({parameter.Name}),Value = SignalGo.Client.ClientSerializationHelper.SerializeObject({parameter.Name}) }},"); } }
private static void GenerateOneWayMethod(MethodReferenceInfo methodInfo, string serviceName, string prefix, StringBuilder builder) { builder.AppendLine($"{prefix}public {methodInfo.ReturnTypeName} {methodInfo.Name}({GenerateMethodParameters(methodInfo)})"); builder.AppendLine($"{prefix}{{"); builder.AppendLine($"{prefix + prefix}return SignalGo.Client.ClientProvider.SendOneWayMethod<{methodInfo.ReturnTypeName}>(_signalGoServerAddress, _signalGoPortNumber, \"{serviceName}\", \"{methodInfo.Name}\"{GenerateMethodParametersWitoutTypes(methodInfo)});"); builder.AppendLine($"{prefix}}}"); }
private static void GenerateHttpMethod(string serviceName, MethodReferenceInfo methodInfo, StringBuilder builder) { builder.AppendLine($"{GetTabs(4)}{{"); builder.AppendLine($"{GetTabs(5)}\"name\": \"{methodInfo.GetMethodName()}\","); builder.AppendLine($@"{GetTabs(5)}""request"": {{ {GetTabs(6)}""method"": ""POST"", {GetTabs(6)}""header"": [], {GetTabs(6)}""body"": {{ {GetTabs(6)} ""mode"": ""raw"", {GetTabs(6)} ""raw"": ""{GenerateMethodParameter(methodInfo)}"", {GetTabs(6)} ""options"": {{ {GetTabs(6)} ""raw"": {{ {GetTabs(6)} ""language"": ""json"" {GetTabs(6)} }} {GetTabs(6)} }} {GetTabs(6)}}}, {GetTabs(6)}""url"": {{ {GetTabs(6)} ""raw"": ""{{{{endpoint}}}}/{serviceName}/{methodInfo.GetMethodName()}"", {GetTabs(6)} ""host"": [ {GetTabs(6)} ""{{{{endpoint}}}}"" {GetTabs(6)} ], {GetTabs(6)} ""path"": [ {GetTabs(6)} ""{serviceName}"", {GetTabs(6)} ""{methodInfo.GetMethodName()}"" {GetTabs(6)} ] {GetTabs(6)}}} {GetTabs(5)}}} {GetTabs(4)}}},"); }
private static void GenerateInterfaceMethodAsync(MethodReferenceInfo methodInfo, string prefix, StringBuilder builder) { string returnType = "Task"; if (methodInfo.ReturnTypeName != "void") { returnType = "Task<" + methodInfo.ReturnTypeName + ">"; } builder.AppendLine($"{prefix}{returnType} {methodInfo.Name}Async({GenerateMethodParameters(methodInfo)});"); }
private void GenerateMethodParameters(MethodInfo methodInfo, MethodReferenceInfo methodReferenceInfo) { foreach (System.Reflection.ParameterInfo item in methodInfo.GetParameters()) { ParameterReferenceInfo parameterReferenceInfo = new ParameterReferenceInfo(); AddToGenerate(item.ParameterType); parameterReferenceInfo.Name = item.Name; parameterReferenceInfo.TypeName = GetFullNameOfType(item.ParameterType, true); methodReferenceInfo.Parameters.Add(parameterReferenceInfo); } }
private static string GenerateMethodParametersWitoutTypes(MethodReferenceInfo methodInfo) { StringBuilder builder = new StringBuilder(); foreach (ParameterReferenceInfo item in methodInfo.Parameters) { builder.Append(", "); builder.Append($"new SignalGo.Shared.Models.ParameterInfo() {{ Name = \"{item.Name}\", Value = SignalGo.Client.ClientSerializationHelper.SerializeObject({item.Name}) }}"); } return(builder.ToString()); }
private string GenerateMethodParametersWitoutTypes(MethodReferenceInfo methodInfo) { StringBuilder builder = new StringBuilder(); foreach (ParameterReferenceInfo item in methodInfo.Parameters) { builder.Append(", "); builder.Append($"{item.Name}"); } return(builder.ToString()); }
private static string GenerateMethodParameters(MethodReferenceInfo methodInfo) { StringBuilder builder = new StringBuilder(); int index = 0; foreach (ParameterReferenceInfo item in methodInfo.Parameters) { if (index > 0) { builder.Append(", "); } builder.Append($"{item.TypeName} {item.Name}"); index++; } return(builder.ToString()); }
private string GenerateMethodParameters(MethodReferenceInfo methodInfo, string baseServiceName) { StringBuilder builder = new StringBuilder(); int index = 0; foreach (ParameterReferenceInfo item in methodInfo.Parameters) { if (index > 0) { builder.Append(", "); } builder.Append($"{item.Name}: {GetReturnTypeName(item.TypeName, baseServiceName)}"); index++; } return(builder.ToString()); }
private static void GenerateOneWayMethodAsync(MethodReferenceInfo methodInfo, string serviceName, string prefix, StringBuilder builder) { string returnType = "Task"; if (methodInfo.ReturnTypeName != "void") { returnType = "Task<" + methodInfo.ReturnTypeName + ">"; } builder.AppendLine($"{prefix}public {returnType} {methodInfo.Name}Async({GenerateMethodParameters(methodInfo)})"); builder.AppendLine($"{prefix}{{"); string result = $"SignalGo.Client.ClientProvider.SendOneWayMethodAsync<{methodInfo.ReturnTypeName}>(_signalGoServerAddress, _signalGoPortNumber, \"{serviceName}\", \"{methodInfo.Name}\"{GenerateMethodParametersWitoutTypes(methodInfo)})"; builder.AppendLine($"{prefix + prefix}return {result};"); builder.AppendLine($"{prefix}}}"); }
private static void GenerateAsyncMethod(MethodReferenceInfo methodInfo, string prefix, StringBuilder builder) { string returnType = "Task"; string returnTypeValue = ""; if (methodInfo.ReturnTypeName != "void") { returnType = "Task<" + methodInfo.ReturnTypeName + ">"; returnTypeValue = "<" + methodInfo.ReturnTypeName + ">"; } builder.AppendLine($"{prefix}public {returnType} {methodInfo.Name}Async({GenerateMethodParameters(methodInfo)})"); builder.AppendLine($"{prefix}{{"); builder.AppendLine($"{prefix + prefix}return SignalGo.Client.ClientManager.ConnectorExtensions.SendDataAsync{returnTypeValue}(CurrentProvider, ServiceName,\"{methodInfo.Name}\", new SignalGo.Shared.Models.ParameterInfo[]"); builder.AppendLine($"{prefix + prefix}{{"); GenerateHttpMethodParameters(methodInfo, prefix, builder, false); builder.AppendLine($"{prefix + prefix}}});"); builder.AppendLine($"{prefix}}}"); }
private static void GenerateMethod(MethodReferenceInfo methodInfo, string prefix, StringBuilder builder) { builder.AppendLine($"{prefix}public {methodInfo.ReturnTypeName} {methodInfo.Name}({GenerateMethodParameters(methodInfo)})"); builder.AppendLine($"{prefix}{{"); string returnType = methodInfo.ReturnTypeName; string returnValue = "return "; if (returnType == "void") { returnValue = ""; returnType = "object"; } builder.AppendLine($"{prefix + prefix}{returnValue} SignalGo.Client.ClientManager.ConnectorExtensions.SendDataSync<{returnType}>(CurrentProvider, ServiceName,\"{methodInfo.Name}\", new SignalGo.Shared.Models.ParameterInfo[]"); builder.AppendLine($"{prefix + prefix}{{"); GenerateHttpMethodParameters(methodInfo, prefix, builder, false); builder.AppendLine($"{prefix + prefix}}});"); builder.AppendLine($"{prefix}}}"); }
private string GenerateMethodParameters(MethodReferenceInfo methodInfo, string baseServiceName, Dictionary <string, Dictionary <string, string> > nameSpaces) { StringBuilder builder = new StringBuilder(); int index = 0; foreach (ParameterReferenceInfo item in methodInfo.Parameters) { if (index > 0) { builder.Append(", "); } string returnType = GetReturnTypeName(item.TypeName, baseServiceName, nameSpaces); //AddToDictionary(nameSpaces, returnType); builder.Append($"{item.Name}: {returnType}"); index++; } return(builder.ToString()); }
private void GenerateMethod(MethodInfo methodInfo, ClassReferenceInfo classReferenceInfo) { if (methodInfo.GetParameters().Any(x => x.IsOut || x.IsRetval) || methodInfo.DeclaringType == typeof(object)) { return; } if (IsRenameDuplicateMethodNames) { if (!ServiceMethods.ContainsKey(classReferenceInfo.Name)) { ServiceMethods[classReferenceInfo.Name] = new List <string>(); } } MethodReferenceInfo methodReferenceInfo = new MethodReferenceInfo(); AddToGenerate(methodInfo.ReturnType); string returnType = "void"; if (methodInfo.ReturnType != typeof(void)) { returnType = GetFullNameOfType(methodInfo.ReturnType, true); } string methodName = methodInfo.Name; if (IsRenameDuplicateMethodNames) { int i = 1; while (ServiceMethods[classReferenceInfo.Name].Contains(methodName)) { methodName = methodInfo.Name + i; i++; } } methodReferenceInfo.ReturnTypeName = returnType; methodReferenceInfo.Name = methodInfo.Name; methodReferenceInfo.DuplicateName = methodName; if (IsRenameDuplicateMethodNames) { ServiceMethods[classReferenceInfo.Name].Add(methodName); } GenerateMethodParameters(methodInfo, methodReferenceInfo); classReferenceInfo.Methods.Add(methodReferenceInfo); }
private static string GenerateMethodParameter(MethodReferenceInfo methodInfo) { StringBuilder rawBuilder = new StringBuilder(); rawBuilder.Append("{\\n"); bool isFirst = true; foreach (var parameter in methodInfo.Parameters) { if (!isFirst) { rawBuilder.Append(",\\n"); } rawBuilder.Append($"\\\"{parameter.Name}\\\" : null"); isFirst = false; } rawBuilder.Append("\\n}"); return(rawBuilder.ToString()); }
private void GenerateMethod(string serviceName, MethodReferenceInfo methodInfo, string prefix, StringBuilder resultBuilder, bool doSemicolon, string baseServiceName, Dictionary <string, Dictionary <string, string> > nameSpaces) { StringBuilder builder = new StringBuilder(); string returnTypeName = GetReturnTypeName(methodInfo.ReturnTypeName, baseServiceName, nameSpaces); //AddToDictionary(nameSpaces, returnTypeName); if (returnTypeName == "SignalGo.Shared.Http.ActionResult") { return; } builder.AppendLine($"{prefix}{methodInfo.DuplicateName}({GenerateMethodParameters(methodInfo, baseServiceName, nameSpaces)}): Promise<{returnTypeName}> {{"); builder.Append($@"return this.server.post<{returnTypeName}>('{serviceName}/{methodInfo.Name}',"); int index = 0; if (methodInfo.Parameters.Count == 0) { builder.AppendLine("null"); } else { builder.AppendLine(" {"); foreach (ParameterReferenceInfo item in methodInfo.Parameters) { if (index > 0) { builder.Append(", "); } builder.AppendLine(prefix + prefix + prefix + item.Name + ":" + item.Name); index++; } builder.Append(prefix + prefix + "}"); } builder.AppendLine(");"); builder.AppendLine(prefix + "}"); string result = builder.ToString(); if (!result.Contains("SignalGo.Shared")) { resultBuilder.AppendLine(result); } }
private static void GenerateHttpMethod(MethodReferenceInfo methodInfo, string serviceName, string prefix, StringBuilder builder, bool doSemicolon = true) { builder.AppendLine($"{prefix}public {methodInfo.ReturnTypeName} {methodInfo.Name}({GenerateMethodParameters(methodInfo)}){(doSemicolon ? ";" : "")}"); //generate empty data if (!doSemicolon) { builder.AppendLine($"{prefix}{{"); builder.AppendLine($"{prefix + prefix}SignalGo.Client.HttpClientResponse result = _httpClient.Post(_serverUrl + (_serverUrl.EndsWith(\"/\") ? \"\" : \"{"/"}\") + \"{serviceName}/{methodInfo.Name}\", new SignalGo.Shared.Models.ParameterInfo[]"); builder.AppendLine($"{prefix + prefix}{{"); GenerateHttpMethodParameters(methodInfo, prefix, builder, doSemicolon); builder.AppendLine($"{prefix + prefix}}});"); builder.AppendLine($"{prefix + prefix}ResponseHeaders = result.ResponseHeaders;"); builder.AppendLine($"{prefix + prefix}Status = result.Status;"); builder.AppendLine($"{prefix + prefix}if (Status == System.Net.HttpStatusCode.InternalServerError)"); builder.AppendLine($"{prefix + prefix + prefix}throw new Exception(result.Data);"); if (methodInfo.ReturnTypeName != "void") { builder.AppendLine($"{prefix + prefix}return SignalGo.Client.ClientSerializationHelper.DeserializeObject<{methodInfo.ReturnTypeName}>(result.Data);"); } builder.AppendLine($"{prefix}}}"); } }
private void GenerateMethod(List <ClassReferenceInfo> models, string serviceName, MethodReferenceInfo methodInfo, string prefix, StringBuilder resultBuilder, bool doSemicolon, string baseServiceName, Dictionary <string, Dictionary <string, string> > nameSpaces) { bool isStream = false; if (methodInfo.Parameters.Any(x => x.TypeName.StartsWith("SignalGo.Shared.Models.StreamInfo"))) { isStream = true; } StringBuilder builder = new StringBuilder(); string returnTypeName = GetReturnTypeName(methodInfo.ReturnTypeName, baseServiceName, nameSpaces); //AddToDictionary(nameSpaces, returnTypeName); if (returnTypeName == "SignalGo.Shared.Http.ActionResult") { return; } builder.AppendLine($"{prefix}{methodInfo.DuplicateName.ToCamelCase()}({GenerateMethodParameters(methodInfo, baseServiceName, nameSpaces, isStream)}): Observable<{returnTypeName}> {{"); //return type without Generic builder.AppendLine($"var result = new {returnTypeName}();"); //var findModel = models.FirstOrDefault(x => x.Name == returnTypeName); if (returnTypeName.EndsWith(">")) { string text = returnTypeName.Substring(returnTypeName.IndexOf('<')); text = text.Substring(1, text.LastIndexOf('>') - 1); if (text.EndsWith("[]")) { //builder.AppendLine($"result.result = new {text.Substring(0, text.Length - 1)}0];"); builder.AppendLine($"result.result = [];"); } else { if (text == "string") { builder.AppendLine($"result.result = \"\";"); } else if (text == "boolean") { builder.AppendLine($"result.result = false;"); } else if (text == "number") { builder.AppendLine($"result.result = 0;"); } else { builder.AppendLine($"result.result = new {text}();"); } } } if (isStream) { builder.Append($@"return this.server.postFile<{returnTypeName}>('{serviceName}/{methodInfo.GetMethodName()}',"); } else { if (methodInfo.ProtocolType == ProtocolType.HttpGet) { builder.Append($@"return this.server.get<{returnTypeName}>('{serviceName}/{methodInfo.GetMethodName()}',"); } else { builder.Append($@"return this.server.post<{returnTypeName}>('{serviceName}/{methodInfo.GetMethodName()}',"); } } int index = 0; if (methodInfo.Parameters.Count == 0) { builder.AppendLine("null"); } else if (isStream) { builder.AppendLine("params"); foreach (ParameterReferenceInfo item in methodInfo.Parameters) { if (item.TypeName.StartsWith("SignalGo.Shared.Models.StreamInfo")) { continue; } builder.Append(", "); builder.AppendLine(prefix + prefix + prefix + $"{{ Name: \"{item.Name}\", Value: {item.Name} }}"); index++; } } else { builder.AppendLine(" {"); foreach (ParameterReferenceInfo item in methodInfo.Parameters) { if (index > 0) { builder.Append(", "); } builder.AppendLine(prefix + prefix + prefix + item.Name + ":" + item.Name); index++; } builder.Append(prefix + prefix + "}"); } builder.AppendLine($",result,\"{baseServiceName}\""); builder.AppendLine(");"); builder.AppendLine(prefix + "}"); string result = builder.ToString(); if (!result.Contains("SignalGo.Shared")) { resultBuilder.AppendLine(result); } }
private static void GenerateInterfaceMethod(MethodReferenceInfo methodInfo, string prefix, StringBuilder builder) { builder.AppendLine($"{prefix}{methodInfo.ReturnTypeName} {methodInfo.Name}({GenerateMethodParameters(methodInfo)});"); }