private void Save(RankingData data)
        {
            Log.Info("Record Write start.");
            SaveLocal(data);
            Boolean success = false;

            if (IsOnline && CanOnline)
            {
                success = SaveOnline(data);
            }
            else if (IsOnline && !CanOnline)
            {
                Log.Info("【Diff】Local diff save start.");
                s.ConnectionOpen();
                s.DiffInsertRecord(data);
                s.ConnectionClose();
                Log.Info("【Success】【Diff】Successful Local diff save.");
            }

            if (!success)
            {
                Log.Warn("【FAILED】【Online】Connection to server failed. Change to offline.");

                Log.Info("【Diff】Local diff save start.");
                s.ConnectionOpen();
                s.DiffInsertRecord(data);
                s.ConnectionClose();
                Log.Info("【Success】【Diff】Successful Local diff save.");

                RankingManager.CanOnline = false;
            }
        }
        /// <summary>
        /// スコア, データ名を指定してセーブ。
        /// </summary>
        /// <param name="data">double型:スコアデータ</param>
        /// <param name="dataName">string型:データ名</param>
        public void SaveData(Double data, String dataName = "")
        {
            RankingData newdata = new RankingData(data, dataName);

            this.Save(newdata);
            return;
        }
 /// <summary>
 /// ローカルデータベースに取得
 /// </summary>
 /// <param name="newdata"></param>
 private void SaveLocal(RankingData newdata)
 {
     Log.Info("Local save start.");
     s.ConnectionOpen();
     s.InsertRecord(newdata);
     s.ConnectionClose();
     Log.Info("【Success】Successful Local save.");
 }
        /// <summary>
        /// スコア, データ名を指定してセーブ。その後データ取得。
        /// </summary>
        /// <param name="data">double型:スコアデータ</param>
        /// <param name="dataName">string型:データ名</param>
        /// <returns>取得したランキングデータ型のリスト</returns>
        public List <RankingData> DataSetAndLoad(Double data, String dataName = "")
        {
            RankingData newdata = new RankingData(data, dataName);

            this.Save(newdata);

            return(this.GetData());
        }
        /// <summary>
        /// オンラインに非同期でセーブコマンドを送信するメソッド
        /// </summary>
        /// <param name="data">RankigData型:送信するランキングデータ</param>
        /// <returns>実行したSQLコマンド, もしくはサーバーから返信されたエラーメッセージ</returns>
        private async Task <string> SendOnlineSaveData(RankingData data)
        {
            var content = new System.Net.Http.FormUrlEncodedContent(data.Dictionary());
            var client  = new System.Net.Http.HttpClient();

            Log.Info("【Online】Access to server.");
            Log.Info($"【Online】Address is [{BaseUrl}{SAVE_DATA_URL}].");
            Log.Info($"【Online】【Transmission】Ranking Data [{data.ToString()}].");
            Log.Info($"【Online】【Transmission】Contents [{ content.ToString()}].");
            var response = await client.PostAsync(BaseUrl + SAVE_DATA_URL, content);

            return(await response.Content.ReadAsStringAsync());
        }
 /// <summary>
 /// オンラインデータベースにデータ送信
 /// </summary>
 /// <param name="data">RankingData型:送信するランキングデータ</param>
 /// <returns>true:送信成功, false:送信失敗</returns>
 private bool SaveOnline(RankingData data)
 {
     Log.Info("【Online】Save Online start.");
     try
     {
         var task = Task.Run(() =>
         {
             return(this.SendOnlineSaveData(data));
         });
         Log.Debug(task.Result);
         Log.Info("【Success】【Online】Save Online Success.");
         return(true);
     }
     catch (AggregateException ex)
     {
         foreach (Exception e in ex.Flatten().InnerExceptions)
         {
             Exception exNestedInnerException = e;
             do
             {
                 if (!String.IsNullOrEmpty(exNestedInnerException.Message))
                 {
                     Log.Fatal(exNestedInnerException.Message);
                 }
                 exNestedInnerException = exNestedInnerException.InnerException;
             }while (exNestedInnerException != null);
         }
         return(false);
     }
     catch (HttpRequestException ex)
     {
         Log.Fatal(ex.Message);
         return(false);
     }
     catch (System.Net.WebException ex)
     {
         Log.Fatal(ex.Message);
         return(false);
     }
     catch (System.Net.Sockets.SocketException ex)
     {
         Log.Fatal(ex.Message);
         return(false);
     }
     catch (ArgumentException ex)
     {
         Log.Fatal(ex.Message);
         return(false);
     }
 }
        /// <summary>
        /// コンストラクタ, ランキングマネージャーの初期設定
        /// </summary>
        /// <param name="gamename">ゲーム名を指定</param>
        /// <param name="gameid">ゲームのID</param>
        /// <param name="orderType">OrderType型, スコアデータのソート順</param>
        /// <param name="onlie">手動オンライン設定, デフォルト:true</param>
        public void Setting(String gamename, UInt64 gameid, OrderType orderType, Boolean onlie = true)
        {
            Log.Info($"【Start】[{gamename}]------------------------------------------------------------------------------------------" +
                     "------------------------------------------------------------------------------------------");
            Log.Info($"Version = [{this.Version}].");
            if (!RankingData.SetGameID(gameid))
            {
                Log.Fatal("Game ID is out of range.");
                throw new System.ArgumentOutOfRangeException("Game ID is out of range", "gameid");
            }
            Log.SetGameID(RankingData.GameID);
            RankingManager.Oder     = orderType;
            RankingManager.IsOnline = onlie;
            SQLite.SQLite.SetGameName(gameid);
            Log.Info("Instance was created.");

            this.Init();
        }
 /// <summary>
 /// ランキングデータ型でセーブ。
 /// </summary>
 /// <param name="data">RankingData型:セーブするランキングデータ</param>
 public void SaveData(RankingData data)
 {
     this.Save(data);
 }
        /// <summary>
        /// ランキングデータ型でセーブ。その後データ取得
        /// </summary>
        /// <param name="data">RankingData型:セーブするランキングデータ</param>
        /// <returns>取得したランキングデータ型のリスト</returns>
        public List <RankingData> DataSetAndLoad(RankingData data)
        {
            this.Save(data);

            return(this.GetData());
        }