public void MergeAsync() { var blocker = new AutoResetEvent(false); var lines = new[] { "CHAT Test {type=a,stage=b}", "SET ab = hello", "DO flip", "SAY ab", }; var file = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + Util.EpochMs() + ".ser"); ChatRuntime rt = new ChatRuntime(Client.AppConfig.TAC); rt.ParseText(String.Join("\n", lines)); rt.Save(serializer, file); ChatRuntime rt2 = new ChatRuntime(Client.AppConfig.TAC); rt2.MergeAsync(serializer, file, () => { blocker.Set(); //Console.WriteLine("CALLBACK: "+ (rt2.chats != null ? rt2.chats.Count + " chats" : "Failed")); Assert.That(rt2.chats, Is.Not.Null); Assert.That(rt2.chats.Count, Is.GreaterThan(0)); }); blocker.WaitOne(); }
/// <summary> /// Create an engine from a script file or folder script files /// </summary> /// <param name="fileOrFolder">File or folder.</param> public MockGameEngine(FileInfo fileOrFolder) { var config = AppConfig.TAC; var saveFile = new FileInfo("./runtime.ser"); ChatRuntime tmp = new ChatRuntime(config); tmp.ParseFile(fileOrFolder); serializer = new SerializerMessagePack(); tmp.Save(serializer, saveFile); dialogic = ChatRuntime.Create(serializer, saveFile, config); dialogic.Run(); }
public void MergeFromFile() { var lines = new[] { "CHAT Test {type=a,stage=b}", "SAY Find", "FIND {type=a,stage=b,other=c}", "CHAT next {type=a,stage=b}", "SAY Done", }; ChatRuntime rt; rt = new ChatRuntime(Client.AppConfig.TAC); rt.ParseText(String.Join("\n", lines)); var s = rt.InvokeImmediate(null); Assert.That(s, Is.EqualTo("Find\nDone")); // Add more chats via Update, with higher search score var lines2 = new[] { "CHAT switch {type=a,stage=b,other=c,statelness=}", "SAY Added", }; var file = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + Util.EpochMs() + ".ser"); ChatRuntime rt2 = new ChatRuntime(Client.AppConfig.TAC); rt2.ParseText(String.Join("\n", lines2)); rt2.Save(serializer, file); // append the 2nd runtime to the first rt.Merge(serializer, file); s = rt.InvokeImmediate(null); Assert.That(s, Is.EqualTo("Find\nAdded")); }