/// <summary> /// サーバーからHttpで前回データのファイルパスを全て取得する /// </summary> /// <param name="deviceAdress">接続しているデバイスのアドレス(MACアドレス)</param> /// <param name="onGetDataPathList">データのパスリスト取得完了時に呼び出されるコールバック。取得失敗時はnull</param> public static IEnumerator GetPriviousDataPathList(string deviceAdress, Action <List <string> > onGetDataPathList) { Debug.Log("GetPriviousDataPathList"); //スリープしないように設定 Screen.sleepTimeout = SleepTimeout.NeverSleep; if (!HttpManager.IsInternetAvailable()) { //接続失敗 Debug.Log("Connection Failed..."); onGetDataPathList(null); //スリープ設定解除 Screen.sleepTimeout = SleepTimeout.SystemSetting; yield break; } Debug.Log("Connection Success"); var devicePath = "/RD8001/Data/" + deviceAdress; var fileListTask = HttpManager.GetFileList(devicePath, HttpManager.FILE_TYPE_CSV, false); yield return(fileListTask.AsCoroutine()); List <string> fileFullPathList = fileListTask.Result; onGetDataPathList(fileFullPathList); //スリープ設定解除 Screen.sleepTimeout = SleepTimeout.SystemSetting; }
public static async Task <List <string> > GetFileList(string directoryPath, int fileType, bool isFileNameOnly = false) { if (!HttpManager.IsInternetAvailable()) { return(null); } List <string> fileList = new List <string>(); using (var client = new HttpClient()) { MultipartFormDataContent form = new MultipartFormDataContent(); form.Add(new StringContent(directoryPath), "directory_path"); form.Add(new StringContent(fileType.ToString()), "file_type"); form.Add(new StringContent(Kaimin.Common.Utility.getSecurityText()), "security_text"); Debug.Log("FileListAPI-start(" + directoryPath + ")"); var response = await client.PostAsync($"{API_FILE_LIST_URL}/", form); response.EnsureSuccessStatusCode(); var responseContent = await response.Content.ReadAsStringAsync(); Debug.Log("FileListAPI-completet(" + directoryPath + ")"); var jsonResult = MiniJSON.Json.Deserialize(responseContent) as Dictionary <string, object>; if (jsonResult.ContainsKey("err_code") && int.Parse(jsonResult["err_code"].ToString()) == 0) { List <object> filePaths = jsonResult["file_paths"] as List <object>; if (filePaths != null) { if (isFileNameOnly) { foreach (var filePath in filePaths) { string fileName = filePath.ToString().Substring(filePath.ToString().LastIndexOf('/') + 1); fileList.Add(fileName); } } else { foreach (var filePath in filePaths) { fileList.Add(filePath.ToString()); } } } } } return(fileList); }
/// <summary> /// サーバーからHttpで最新のファームウェアのファイル名を取得する /// </summary> /// <param name="firmwareDirectory">G1D・H1Dのディレクトリパス</param> /// <param name="onGetFileName">目的のファイル名を受け取るコールバック</param> /// <param name="fileExtension">.mot, .bin</param> public static IEnumerator GetLatestFirmwareFileNameByHttp(string firmwareDirectoryPath, Action <string> onGetFileName, string fileExtension, Action <bool> onResponseIsError = null) { bool directoryExistResult = false; if (HttpManager.IsInternetAvailable()) { //HTTPでサーバー上にファームウェアのディレクトリが存在するか確認する var isDirExistTask = HttpManager.IsDirectoryExist(firmwareDirectoryPath); yield return(isDirExistTask.AsCoroutine()); directoryExistResult = isDirExistTask.Result; Debug.Log(directoryExistResult ? "G1D directory is Exist!" : "G1D directory is NotExist..."); } if (directoryExistResult) { //指定したファームウェアディレクトリの名のファイル名をすべて取得する var firmwareFileNameListTask = HttpManager.GetFileList(firmwareDirectoryPath, HttpManager.FILE_TYPE_BIN, true); yield return(firmwareFileNameListTask.AsCoroutine()); if (firmwareFileNameListTask.Result != null) { List <string> firmwareFileNameList = firmwareFileNameListTask.Result; //ファームウェア以外のファイルをはじく firmwareFileNameList = firmwareFileNameList .Where(fileName => fileName.Contains(fileExtension)) .ToList(); //ファイルがあるか確認 if (firmwareFileNameList.Count == 0) { onGetFileName(null); Debug.Log("No firmwareFile"); } else { //取得したディレクトリを確認 //foreach (var fileName in firmwareFileNameList) //{ // Debug.Log("GetFile:" + fileName); //} //ファイル名のリストが取得できれば、その中から最新のものを探す var ratestVersionFileIndex = firmwareFileNameList .Select((fileName, index) => new { FileName = fileName, Index = index }) .Aggregate((max, current) => (FirmwareFileNameToVersionLong(max.FileName) > FirmwareFileNameToVersionLong(current.FileName) ? max : current)) .Index; onGetFileName(firmwareFileNameList[ratestVersionFileIndex]); } if (onResponseIsError != null) { onResponseIsError(false); } yield break; } } if (onResponseIsError != null) { onResponseIsError(true); } onGetFileName(null); }
public static IEnumerator UploadUnsendDatasByHttp() { var dataPath = Kaimin.Common.Utility.GsDataPath(); var sleepTable = MyDatabase.Instance.GetSleepTable(); var sleepDatas = sleepTable.SelectAllOrderByAsc(); //DBに登録されたすべてのデータ var unSentDatas = sleepDatas.Where(data => data.send_flag == false).ToList(); //サーバーに送信してないすべてのデータ //データが0件ならアップロードを行わない if (unSentDatas.Count == 0) { yield break; } UpdateDialog.Show("同期中"); Screen.sleepTimeout = SleepTimeout.NeverSleep; //スリープしないように設定 Debug.Log("UploadUnsendDatasByHttp_unsentDataCount:" + unSentDatas.Count); var mulitipleUploadDataCount = 10; //一回でまとめてアップロードするデータ件数 List <DbSleepData> sendDataStock = new List <DbSleepData>(); //アップロードするデータを貯めておくリスト //ファイルアップロードのためにサーバーと接続 bool isConnectionSuccess = HttpManager.IsInternetAvailable(); if (!isConnectionSuccess) { //サーバーとの接続に失敗すれば UpdateDialog.Dismiss(); //スリープ設定解除 Screen.sleepTimeout = SleepTimeout.SystemSetting; yield break; } //サーバーに送信してないデータをアップロード for (int i = 0; i < unSentDatas.Count; i++) { var data = unSentDatas[i]; var uploadPath = data.file_path; //例:1122334455566/yyyyMM/20180827092055.csv uploadPath = uploadPath.Substring(0, uploadPath.LastIndexOf('/') + 1); //例:1122334455566/yyyyMM/ Debug.Log("data.date:" + data.date + "; data.file_path:" + data.file_path + "; fullPath:" + dataPath + data.file_path); if (System.IO.File.Exists(dataPath + data.file_path)) //アップロードするデータが正常か確認する { sendDataStock.Add(data); } else { //ファイルが存在してなければ、DBから削除する sleepTable.DeleteFromTable(SleepTable.COL_DATE, data.date); } bool isStockDataCount = sendDataStock.Count >= mulitipleUploadDataCount; //送信するデータ個数が一定量(multipleUploadDataCount)に達したかどうか bool isLastData = i >= unSentDatas.Count - 1; //最後のデータかどうか bool isSameDirectoryNextData = false; //現在データと次データのアップロード先が同じであるか if (!isLastData) { //最後のデータでなければ、次のデータが同じディレクトリのデータであるか確認する。 //現在データと比較できるように次データのパスを同じように変換 var nextDataDirectory = unSentDatas[i + 1].file_path; //例:1122334455566/yyyyMM/20180827092055.csv nextDataDirectory = nextDataDirectory.Substring(0, nextDataDirectory.LastIndexOf('/') + 1); //例:1122334455566/yyyyMM/ //現在データと次データのアップロード先パスを比較 isSameDirectoryNextData = uploadPath == nextDataDirectory; } Debug.Log("isStockDataCount:" + isStockDataCount + ",isLastData:" + isLastData + ",isSameDirectoryNextData:" + isSameDirectoryNextData); if (isStockDataCount || isLastData || !isSameDirectoryNextData) { //まとめて送信するデータ件数に達したか、最後のデータに到達したらアップロードを行う Debug.Log("UploadData"); foreach (var stockedData in sendDataStock) { string filePath = stockedData.file_path; Debug.Log("stockData_path:" + filePath); string deviceId = getDeviceId(filePath); var uploadTask = HttpManager.UploadFile(deviceId, stockedData.file_id, dataPath + filePath); yield return(uploadTask.AsCoroutine()); //アップロードに成功すれば、アップロードしたファイルのDB送信フラグをtrueに if (uploadTask.Result) { sleepTable.Update(new DbSleepData(stockedData.date, filePath, true)); //例:20180827092055.csv, 1122334455566/yyyyMM/20180827092055.csv Debug.Log("Uploaded " + filePath); sleepTable.DebugPrint(); } else { ////アップロードに失敗すれば UpdateDialog.Dismiss(); //スリープ設定解除 Screen.sleepTimeout = SleepTimeout.SystemSetting; yield break; } } //データのアップロードがひとまとまり完了すれば、次のデータのアップロードへ移る sendDataStock = new List <DbSleepData>(); } } Debug.Log("Upload end"); UpdateDialog.Dismiss(); //スリープ設定解除 Screen.sleepTimeout = SleepTimeout.SystemSetting; }