Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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;
        }