public Schema Solve(Schema inputSchema) { string solveUrl; if (PathIsAppServer) { int index = Path.LastIndexOf('/'); solveUrl = Path.Substring(0, index + 1) + "solve"; } else { solveUrl = Servers.GetSolveUrl(); if (!string.IsNullOrEmpty(_cacheKey)) { inputSchema.Pointer = _cacheKey; } } string inputJson = JsonConvert.SerializeObject(inputSchema); using (var content = new System.Net.Http.StringContent(inputJson, Encoding.UTF8, "application/json")) { var postTask = HttpClient.PostAsync(solveUrl, content); var responseMessage = postTask.Result; if (responseMessage.StatusCode == System.Net.HttpStatusCode.InternalServerError) { if (!PathIsAppServer && string.IsNullOrEmpty(inputSchema.Algo)) { var bytes = System.IO.File.ReadAllBytes(Path); string base64 = Convert.ToBase64String(bytes); inputSchema.Algo = base64; inputJson = JsonConvert.SerializeObject(inputSchema); var content2 = new System.Net.Http.StringContent(inputJson, Encoding.UTF8, "application/json"); postTask = HttpClient.PostAsync(solveUrl, content2); responseMessage = postTask.Result; if (responseMessage.StatusCode == System.Net.HttpStatusCode.InternalServerError) { throw new Exception("Unable to solve on compute"); } } } var remoteSolvedData = responseMessage.Content; var stringResult = remoteSolvedData.ReadAsStringAsync().Result; var schema = JsonConvert.DeserializeObject <Resthopper.IO.Schema>(stringResult); _cacheKey = schema.Pointer; return(schema); } }
public Schema Solve(Schema inputSchema, bool useMemoryCache) { string solveUrl; var pathType = GetPathType(); if (pathType == PathType.NonresponsiveUrl) { return(null); } if (pathType == PathType.GrasshopperDefinition || pathType == PathType.ComponentGuid) { solveUrl = Servers.GetSolveUrl(); if (!string.IsNullOrEmpty(_cacheKey)) { inputSchema.Pointer = _cacheKey; } } else { int index = Path.LastIndexOf('/'); solveUrl = Path.Substring(0, index + 1) + "solve"; } string inputJson = JsonConvert.SerializeObject(inputSchema); if (useMemoryCache && inputSchema.Algo == null) { var cachedResults = Hops.MemoryCache.Get(inputJson); if (cachedResults != null) { return(cachedResults); } } using (var content = new System.Net.Http.StringContent(inputJson, Encoding.UTF8, "application/json")) { var postTask = HttpClient.PostAsync(solveUrl, content); var responseMessage = postTask.Result; if (responseMessage.StatusCode == System.Net.HttpStatusCode.InternalServerError) { bool fileExists = File.Exists(Path); if (fileExists && string.IsNullOrEmpty(inputSchema.Algo)) { var bytes = System.IO.File.ReadAllBytes(Path); string base64 = Convert.ToBase64String(bytes); inputSchema.Algo = base64; inputJson = JsonConvert.SerializeObject(inputSchema); var content2 = new System.Net.Http.StringContent(inputJson, Encoding.UTF8, "application/json"); postTask = HttpClient.PostAsync(solveUrl, content2); responseMessage = postTask.Result; if (responseMessage.StatusCode == System.Net.HttpStatusCode.InternalServerError) { var badSchema = new Schema(); badSchema.Errors.Add("Unable to solve on compute"); return(badSchema); } } else { if (!fileExists && string.IsNullOrEmpty(inputSchema.Algo) && GetPathType() == PathType.GrasshopperDefinition) { var badSchema = new Schema(); badSchema.Errors.Add($"Unable to find file: {Path}"); return(badSchema); } } } var remoteSolvedData = responseMessage.Content; var stringResult = remoteSolvedData.ReadAsStringAsync().Result; var schema = JsonConvert.DeserializeObject <Resthopper.IO.Schema>(stringResult); if (useMemoryCache && inputSchema.Algo == null) { Hops.MemoryCache.Set(inputJson, schema); } _cacheKey = schema.Pointer; return(schema); } }