Пример #1
0
        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
            });
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
            }
        }