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()); }