Exemple #1
0
        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);
            }
        }