public MsgTopic TopicListDequeue(List <LiplisModel> ModelList, int retryCnt) { //次の話題をロードする MsgTopic result = LiplisStatus.Instance.NewTopic.TalkTopicList.Dequeue(); TopicUtil.SetAllocationIdAndTone(result, ModelList); //現在ロード中の話題をおしゃべり済みに入れる if (!result.FlgNotAddChatted) { LiplisStatus.Instance.NewTopic.ChattedKeyList.AddToNotDuplicate(result.Clone()); } //話題一致ならそのまま帰す if (LiplisSetting.Instance.Setting.CatCheck(result.TopicClassification)) { return(result); } else { if (retryCnt > 10) { //10回やってダメならそのまま帰す return(result); } else { retryCnt++; return(TopicListDequeue(ModelList, retryCnt)); } } }
/// <summary> /// 最新データをダウンロードする /// </summary> /// <returns></returns> private IEnumerator SetTopicDirectTopicAsync() { //最新ニュースデータ取得 var Async = ClalisForLiplisGetNewTopicOne.GetNewTopicAsync(LiplisStatus.Instance.NewTopic.ToneUrlList); //非同期実行 yield return(Async); //データ取得 ResLpsTopicList data = (ResLpsTopicList)Async.Current; //NULL回避 if (data == null) { yield break; } if (data.topicList == null) { yield break; } //おしゃべり済みに追加しないでおしゃべり foreach (var topic in data.topicList) { topic.FlgNotAddChatted = true; //アロケーションIDを設定する TopicUtil.SetAllocationIdAndTone(topic, LiplisModels.Instance.GetModelList()); } //データ追加 LiplisStatus.Instance.NewTopic.TalkTopicList.AddRange(data.topicList); }
/// <summary> /// 最新話題データ取得 /// </summary> /// <param name="regionId"></param> /// <returns></returns> public static IEnumerator GetNewTopic(List <string> toneUrlList) { WWWForm ps = new WWWForm(); //レックトピック生成 string json = JsonConvert.SerializeObject(TopicUtil.CreateReqTopic(toneUrlList)); //パラメータ生成 ps.AddField("reqmsg", json); //トーンURL string jsonText = ""; using (UnityWebRequest request = UnityWebRequest.Post(LpsDefine.LIPLIS_API_NEW_TOPIC_2_MLT, ps)) { yield return(request.SendWebRequest()); if (request.isNetworkError) { Debug.Log(request.error); } else { if (request.responseCode == 200) { // UTF8文字列として取得する jsonText = LpsGzipUtil.Decompress(request.downloadHandler.data); } } } //APIの結果受け取り用クラス yield return(JsonConvert.DeserializeObject <ResLpsTopicList>(jsonText)); }
/// <summary> /// リクエストを生成する /// </summary> /// <param name="NowLoadTopic"></param> /// <param name="SubId"></param> /// <returns></returns> public static WWWForm CreateRequest(MsgSentence Sentence) { WWWForm ps = new WWWForm(); //レックトピック生成 string json = JsonConvert.SerializeObject(TopicUtil.CreateReqTopicVoiceOndemand(Sentence.TalkSentence, Sentence.AllocationId)); //パラメータ生成 ps.AddField("reqmsg", json); //トーンURL //結果を返す return(ps); }
/// <summary> /// リクエストを生成する /// </summary> /// <param name="NowLoadTopic"></param> /// <param name="SubId"></param> /// <returns></returns> public static WWWForm CreateRequest(MsgTopic NowLoadTopic, int SubId) { WWWForm ps = new WWWForm(); //レックトピック生成 string json = JsonConvert.SerializeObject(TopicUtil.CreateReqTopicVoice(NowLoadTopic.DataKey, SubId, NowLoadTopic.TopicClassification)); //パラメータ生成 ps.AddField("reqmsg", json); //トーンURL //結果を返す return(ps); }
private IEnumerator SetTopicTalkFromClalis(string DataKey, ContentCategoly NewsSource) { //トピックをランダムで取得する var Async = ClalisForLiplisGetNewTopicOne.GetNewTopicAsync(LiplisStatus.Instance.NewTopic.ToneUrlList, DataKey, ((int)NewsSource).ToString()); //非同期実行 yield return(Async); //取得結果取得 ResLpsTopicList resTopic = (ResLpsTopicList)Async.Current; //現在ロード中の話題をおしゃべり済みに入れる if (resTopic != null) { //対象リストを洗い替えする LiplisStatus.Instance.NewsList.DequeueKeyNewsList(NewsSource, DataKey); //話題取得 this.NowLoadTopic = resTopic.topicList[0]; //アロケーションID設定 TopicUtil.SetAllocationIdAndTone(this.NowLoadTopic, LiplisModels.Instance.GetModelList()); //カテゴリセット this.NowLoadTopic.TopicClassification = ((int)NewsSource).ToString(); //おしゃべり済みに追加 LiplisStatus.Instance.NewTopic.ChattedKeyList.AddToNotDuplicate(this.NowLoadTopic.Clone()); //話題のセット、移動 StartCoroutine(SetToipcEnd()); //ログ追加 LiplisTalkLog.Instance.AddLog(this.LogLoadTopic.Clone()); } else { //だめなら、デフォルト処理 SetTopicTalkTopicList(); } }
/// <summary> /// ラストトピックリストからトピックを取得する /// </summary> /// <param name="retryCnt"></param> /// <returns></returns> public MsgTopic GetTopicFromResLpsTopicList(List <LiplisModel> ModelList) { //次の話題をロードする int count = LiplisStatus.Instance.NewTopic.LastData.topicList.Count; //乱数取得 System.Random r = new System.Random(); //インデックス取得 int idx = r.Next(0, count - 1); //ラストトピックからランダムに1件取得する MsgTopic result = LiplisStatus.Instance.NewTopic.LastData.topicList[idx].Clone(); //アロケーションID設定 if (result != null) { TopicUtil.SetAllocationIdAndTone(result, ModelList); } return(result); }
/// <summary> /// トピックを検索する /// </summary> /// <param name="DataKey"></param> /// <returns></returns> public MsgTopic SearchTopic(string DataKey, List <LiplisModel> ModelList) { MsgTopic result = null; //トピックリストから検索。あればトピックリストから返す foreach (var topic in TalkTopicList) { if (topic.DataKey == DataKey) { result = TopicListDequeueTargetTopic(topic); break; } } //おしゃべり済みデータから検索 if (result == null) { foreach (var topic in ChattedKeyList) { if (topic.DataKey == DataKey) { result = topic.Clone(); break; } } } //アロケーションID設定 if (result != null) { TopicUtil.SetAllocationIdAndTone(result, ModelList); } //見つからない場合はNULLを返す return(result); }