private static Result WaitingForResult(string apikey, string taskid, TimeSpan maxWaitingTime) { //queued DateTime requestSent = DateTime.Now; bool done = false; do { TimeSpan waiting = DateTime.Now - requestSent; string data = null; try { using (WebOcr wc = new WebOcr(60 * 1000)) { data = wc.DownloadString(ApiUrl + $"result.ashx?apikey={apikey}&taskid={taskid}"); } } catch (System.Net.WebException ex) { throw new ApiException("WaitingForResultAsync web exc", ex); } TaskStatus status = Newtonsoft.Json.JsonConvert.DeserializeObject <TaskStatus>(data); if (status.Status == TaskStatus.CurrentStatus.NotFound) { return new Result() { Id = taskid, IsValid = Result.ResultStatus.Invalid, Error = "not found", Started = requestSent, Ends = DateTime.Now } } ; else if (status.Status == TaskStatus.CurrentStatus.Done) { return(Newtonsoft.Json.JsonConvert.DeserializeObject <Result>(status.Result)); } if (waiting > maxWaitingTime) { return new Result() { Id = taskid, IsValid = Result.ResultStatus.Invalid, Error = "timeout", Started = requestSent, Ends = DateTime.Now } } ; if (waiting.TotalMilliseconds > longTimeThreshold) { System.Threading.Thread.Sleep(longWaitingTimesForResult); } else { System.Threading.Thread.Sleep(shortgWaitingTimesForResult); } } while (done == false); return(new Result() { Id = taskid, IsValid = Result.ResultStatus.Invalid, Error = "timeout", Started = requestSent, Ends = DateTime.Now }); }
private static async Task <string> uploadFileAsync(string apikey, string fileOnDisk, string client, int priority, MiningIntensity intensity, string origFilename, TimeSpan maxWaitingTime, TimeSpan?restartTaskAfterTime = null, Api.CallbackData callBackData = null ) { string callBackDataString = ""; if (callBackData != null) { callBackDataString = Newtonsoft.Json.JsonConvert.SerializeObject(callBackData); } var fullUrl = ""; byte[] resbyte; string res = ""; try { using (WebOcr wc = new WebOcr()) { string param = "fn=" + System.Net.WebUtility.UrlEncode((origFilename ?? "")) + "&client=" + System.Net.WebUtility.UrlEncode(client ?? "") + "&apikey=" + apikey + "&priority=" + priority + "&intensity=" + (int)intensity + "&expirationIn=" + (int)(maxWaitingTime.TotalSeconds * 1.05) //add 5% + "&restartIn=" + (int)(restartTaskAfterTime?.TotalSeconds ?? 0) + "&callbackData=" + System.Net.WebUtility.UrlEncode(callBackDataString); fullUrl = ApiUrl + "addTask.ashx?" + param; resbyte = await wc.UploadFileTaskAsync(fullUrl, "POST", fileOnDisk); res = System.Text.Encoding.UTF8.GetString(resbyte); Newtonsoft.Json.Linq.JToken json = Newtonsoft.Json.Linq.JToken.Parse(res); if (json["taskid"] != null) { return(json["taskid"].ToString()); } else { logger.Error($"ExtApi.TextFromFileAsync API Exception\nFile:{origFilename}\n content: " + res); throw new ApiException(res); } } } catch (System.Net.WebException e) { logger.Debug($"called ext API TextFromFile {fullUrl}.\nResponse: {res}\n" + ApiUrl, e); throw new ApiException("called ext API ", e); } catch (Exception e) { logger.Debug($"called ext API TextFromFile {fullUrl}.\nResponse: {res}\n" + ApiUrl, e); throw; } }
public static bool PingExternal(string url) { var pingStruct = new { server = "" }; try { using (WebOcr wc = new WebOcr(30000)) { var json = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(wc.DownloadString(url + "ping.ashx"), pingStruct); return(json.server == "OK"); } } catch (Exception) { return(false); } }
public static async Task <Result> TextFromUrlAsync(string apikey, Uri url, string client, int priority, MiningIntensity intensity, string origFilename = null, TimeSpan?maxWaitingTime = null, TimeSpan?restartTaskAfterTime = null /*, Api.CallbackData callBackData = null*/) { string fullUrl = null; string taskId = null; Api.CallbackData callBackData = null; //temporaty disable callBack try { if (string.IsNullOrEmpty(origFilename)) { origFilename = Lib.OCR.DocTools.GetFilename(url.LocalPath); } TimeSpan?waitTime = maxWaitingTime; if (waitTime == null && callBackData != null) { waitTime = TimeSpan.FromDays(14); } else if (waitTime == null) { waitTime = defaultWaitingTime; } string callBackDataString = ""; if (callBackData != null) { callBackDataString = Newtonsoft.Json.JsonConvert.SerializeObject(callBackData); } using (WebOcr wc = new WebOcr()) { string param = "url=" + System.Net.WebUtility.UrlEncode(url.AbsoluteUri) + "&apikey=" + apikey + "&fn=" + System.Net.WebUtility.UrlEncode(origFilename ?? "") + "&client=" + System.Net.WebUtility.UrlEncode(client ?? "") + "&priority=" + priority + "&intensity=" + (int)intensity + "&expirationIn=" + (int)(waitTime.Value.TotalSeconds * 1.05) //add 5% + "&restartIn=" + (int)(restartTaskAfterTime?.TotalSeconds ?? 0) + "&callbackData=" + System.Net.WebUtility.UrlEncode(callBackDataString); fullUrl = ApiUrl + "addTask.ashx?" + param; var resbyte = await wc.DownloadDataTaskAsync(fullUrl); var res = System.Text.Encoding.UTF8.GetString(resbyte); Newtonsoft.Json.Linq.JToken json = Newtonsoft.Json.Linq.JToken.Parse(res); if (json["taskid"] != null) { taskId = json["taskid"].ToString(); } else { logger.Error($"ExtApi.TextFromUrlAsync API Exception\nUrl:{url.AbsoluteUri}\n content: " + res); return(new Result() { Id = taskId, IsValid = Result.ResultStatus.Invalid, Error = json["error"].Value <string>() }); } } if (callBackData == null) { return(WaitingForResult(apikey, taskId, maxWaitingTime ?? defaultWaitingTime)); } else { return new Result() { Id = taskId, IsValid = Result.ResultStatus.InQueueWithCallback } }; } catch (System.Net.WebException e) { logger.Debug($"called ext API TextFromFile {fullUrl}.\n " + ApiUrl, e); throw new ApiException("called ext API ", e); } catch (Exception e) { logger.Error($"exception API TextFromFile {fullUrl}.\n " + ApiUrl, e); throw new ApiException("exception API TextFromFile ", e); } finally { //TempIO.DeleteFile(tmpFile); } }