/// <summary> /// 指定したファイルの会話ノードを保存する。 /// </summary> /// <param name="connection">DB接続情報</param> /// <param name="nodeFile">NodeFile</param> /// <param name="fileCode">FileCode</param> private static void SaveToTable(SQLiteConnection connection, MieConversationNodeFile nodeFile, long fileCode) { SQLiteCommand cmd = connection.CreateCommand(); cmd.CommandText = "INSERT INTO ConversationNodeEntries VALUES(@FileCode,@NodeID,@NodeType,@SpeakerGuid,@ListenerGuid,@IsRootNode,@IsQuestionNode);"; //// パラメータのセット cmd.Parameters.Add("FileCode", System.Data.DbType.Int64); cmd.Parameters.Add("NodeID", System.Data.DbType.Int32); cmd.Parameters.Add("NodeType", System.Data.DbType.Int32); cmd.Parameters.Add("SpeakerGuid", System.Data.DbType.Guid); cmd.Parameters.Add("ListenerGuid", System.Data.DbType.Guid); cmd.Parameters.Add("IsRootNode", System.Data.DbType.Boolean); cmd.Parameters.Add("IsQuestionNode", System.Data.DbType.Boolean); foreach (var node in nodeFile.FlatNodes.Values) { //// 値のセット cmd.Parameters["FileCode"].Value = fileCode; cmd.Parameters["NodeID"].Value = node.NodeID; cmd.Parameters["NodeType"].Value = node.NodeType; cmd.Parameters["SpeakerGuid"].Value = node.SpeakerGuid; cmd.Parameters["ListenerGuid"].Value = node.ListenerGuid; cmd.Parameters["IsRootNode"].Value = node.IsRootNode; cmd.Parameters["IsQuestionNode"].Value = node.IsQuestionNode; try { cmd.ExecuteNonQuery(); } catch (Exception ex) { logger.Error(ex, $"ConversationNodeEntries: FileCode({fileCode}) NodeID({node.NodeID})"); } } }
private static void SaveToTable(SQLiteConnection connection, MieConversationNodeFile nodeFile, long fileCode) { SQLiteCommand cmd = connection.CreateCommand(); cmd.CommandText = "INSERT INTO ConversationNodeLinks VALUES(@FileCode,@FromNodeID,@ToNodeID);"; //// パラメータのセット cmd.Parameters.Add("FileCode", System.Data.DbType.Int64); cmd.Parameters.Add("FromNodeID", System.Data.DbType.Int32); cmd.Parameters.Add("ToNodeID", System.Data.DbType.Int32); foreach (var link in nodeFile.Links) { cmd.Parameters["FileCode"].Value = fileCode; cmd.Parameters["FromNodeID"].Value = link.FromeNode; cmd.Parameters["ToNodeID"].Value = link.ToNode; try { cmd.ExecuteNonQuery(); } catch (Exception ex) { logger.Error(ex, $"ConversationNodeLinks: FileCode({fileCode}) FromeNode({link.FromeNode}) ToNode({link.ToNode})"); } } }
/// <summary> /// JSON形式の会話ファイルを読み込み、会話ファイルを返す。 /// [非OE DLL] /// </summary> /// <param name="path">会話ファイルのパス</param> /// <param name="fileList">FileLIst</param> /// <returns>会話ファイル</returns> private static MieConversationNodeFile LoadFromJson(string path, MieFileList fileList) { MieConversationNodeFile mieConversationsFile = null; var ctext = LoadJson(path); ctext = ctext.Replace("$type", "MieFlowChartsDataTypeTag"); var oeConversations = JsonConvert.DeserializeObject <MieOEConversations>(ctext); foreach (var conv in oeConversations.Conversations) { var fileID = conv.Filename.Replace(".conversation", string.Empty); //// FileIDを統一形式に変換する。 fileID = MieFileUtils.ConvertFileIDToCommon(fileID); fileID = MieStringUtils.NormalizedFileID(fileID); var fileCode = fileList.GetHashByFileID(fileID); if (fileCode == 0) { //// 言語情報から生成されたFileListに含まれないものは無視する。 continue; } else { mieConversationsFile = new MieConversationNodeFile(fileCode); } //// ノード情報作成 foreach (var node in conv.Nodes) { var nodeType = GetFlowChartsDataTypeTag(node.MieFlowChartsDataTypeTag); MieConversationNodeEntry conversationNode = null; Guid speakerGuid; if (node.SpeakerGuid == null) { speakerGuid = default(Guid); } else { speakerGuid = new Guid(node.SpeakerGuid); } Guid listenerGuid; if (node.ListenerGuid == null) { listenerGuid = default(Guid); } else { listenerGuid = new Guid(node.ListenerGuid); } //// Root node は NodeIDで判断する。 conversationNode = new MieConversationNodeEntry( nodeType, node.NodeID, speakerGuid, listenerGuid, node.NodeID == 0 ? true : false, node.IsQuestionNode); //// リンク情報作成 foreach (var link in node.Links) { MieConversationLink mieConversationLinks = new MieConversationLink(link.FromNodeID, link.ToNodeID); mieConversationsFile.AddLinkEntry(mieConversationLinks); } mieConversationsFile.AddFlatNodeEntry(conversationNode); } //// キャラクターマップ情報作成 foreach (var map in conv.CharacterMappings) { MieCharacterMapEntry mapEntry = new MieCharacterMapEntry(new Guid(map.Guid)); mieConversationsFile.AddCharacterMapEntry(mapEntry); } } if (mieConversationsFile != null) { mieConversationsFile.BuildLink(); mieConversationsFile.UpdateDepth(); } return(mieConversationsFile); }