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; var tmpFile = TempIO.GetTemporaryFilename(); try { using (Devmasters.Net.HttpClient.URLContent net = new Devmasters.Net.HttpClient.URLContent(url.AbsoluteUri)) { net.TimeInMsBetweenTries = 2000; net.Timeout = 60000; net.Tries = 5; net.IgnoreHttpErrors = true; System.IO.File.WriteAllBytes(tmpFile, net.GetBinary().Binary); } return(await TextFromFileAsync(apikey, tmpFile, client, priority, intensity, origFilename, maxWaitingTime, restartTaskAfterTime)); } catch (Exception e) { throw new ApiException("exception API TextFromFileAsync ", e); //return new Result() { Id = taskId, IsValid = Result.ResultStatus.Invalid, Error = json["error"].Value<string>() }; } finally { TempIO.DeleteFile(tmpFile); } }
/// <summary> /// 已連線連線並有資料傳入時叫用 /// </summary> /// <param name="asyn"></param> public void OnDataReceived(IAsyncResult asyn) { try { SocketPacket socketData = (SocketPacket)asyn.AsyncState;//取得接受的資料 //宣告及定義訊息長度 int iRx = socketData.m_currentSocket.EndReceive(asyn); var clientIP = socketData.m_currentSocket.RemoteEndPoint; //客戶端IP byte[] databuff = socketData.dataBuffer; //回應丟去Helper來判斷原因,把原因切割成許多內容 //開頭是55AAFE才收,但是第四五碼是A3B6(163、182)時不收 if (databuff[0] == 85 && databuff[1] == 170 && databuff[2] == 254 && databuff[3] != 163 && databuff[4] != 182) { var response = ServerResponseHelper.cutData(databuff); var timeNow = DateTime.Now; var timeNowS = timeNow; response.ip = Convert.ToString(clientIP).Split(':')[0]; //只取IP response.InsertDate = timeNow; //IP-完整內容-類型1-類型2-說明 var msg = $"[{timeNowS}]-{response.ip}-{response.Cate}-{response.replayString}"; try { //通報別的執行緒上的控制象進行顯示 Print(tb_result, msg); //存入資料庫 db.Events.Add(response); db.SaveChanges(); //發信 MailHelper.SentMail(response.Cate, "[" + response.InsertDate + "] " + response.ip + " " + response.replayString); } catch (Exception e) { } } //如果是回55AAFE A3B6就代表設備還在線上 if (databuff[0] == 85 && databuff[1] == 170 && databuff[2] == 254 && databuff[3] == 163 && databuff[4] == 182) { try { //收到資料先檢查暫存檔有沒有資料 var clientIPString = Convert.ToString(clientIP).Split(':')[0]; var tempRepeat = db.TempIO.Where(o => o.IP == clientIPString); if (!tempRepeat.Any()) //如果沒資料的話 { //加入資料庫 var tempdata = new TempIO { IP = Convert.ToString(clientIP).Split(':')[0], InsertTime = DateTime.UtcNow, DueTime = DateTime.UtcNow.AddSeconds(70), }; db.TempIO.Add(tempdata); db.SaveChanges(); //產生一個事件 var fullResponse = TransferHelper.ToHexString(databuff).Replace(" ", "").Substring(0, 20); var tempEvent = new Events { ip = Convert.ToString(clientIP).Split(':')[0], replay = fullResponse, Cate = rm.GetString("CMD_Scanner"), cate1 = "A3B6", cate2 = "00", replayString = rm.GetString("CMD_A3B6I"), InsertDate = DateTime.Now }; db.Events.Add(tempEvent); db.SaveChanges(); //發信 MailHelper.SentMail(rm.GetString("CMD_A3B6I"), "[" + tempEvent.InsertDate + "] " + tempEvent.ip + " " + rm.GetString("CMD_A3B6I")); //IP-完整內容-類型1-類型2-說明 var msg = $"[{tempEvent.InsertDate}]-{tempEvent.ip}-{tempEvent.Cate}-{tempEvent.replayString}"; //通報別的執行緒上的控制象進行顯示 Print(tb_result, msg); } else //如果暫存檔有的話,就更新時間 { var saveTemp = tempRepeat.SingleOrDefault(); saveTemp.DueTime = DateTime.UtcNow.AddSeconds(70); db.SaveChanges(); } } catch (Exception e) { } } WaitForData(socketData.m_currentSocket); } catch (SocketException) { } }