public void AddAndExecuteCodeEntryAsync_When_valid_code_entry_Then_returns_expected_output() { var sessionId = Guid.NewGuid().ToString(); var replSession = ReplSession.Create(sessionId); string code = "Console.WriteLine(\"Hello World\");"; var task = replSession.AddAndExecuteCodeEntryAsync(code); var result = task.Result; Assert.AreEqual("Hello World", result.ConsoleOutput); }
public void AddAndExecuteCodeEntryAsync_When_second_valid_code_entry_Then_returns_output_only_for_second_entry() { var sessionId = Guid.NewGuid().ToString(); var replSession = ReplSession.Create(sessionId); string code = "Console.WriteLine(\"Hello World\");" + "Console.WriteLine(\" \");"; var task = replSession.AddAndExecuteCodeEntryAsync(code); var result = task.Result; code = "Console.WriteLine(\"Hello Universe\");"; task = replSession.AddAndExecuteCodeEntryAsync(code); result = task.Result; Assert.AreEqual("Hello Universe", result.ConsoleOutput); }
/// <summary> /// POST: api/Messages /// Receive a message from a user and reply to it /// </summary> public async Task <HttpResponseMessage> Post([FromBody] Activity activity) { if (activity.Type == ActivityTypes.Message) { ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); // calculate something for us to return //int length = (activity.Text ?? string.Empty).Length; //return our reply to the user //Activity reply = activity.CreateReply($"You sent {activity.Text} which was {length} characters"); var roslynSession = ReplSession.LoadOrCreate(activity.Conversation.Id); string replyText = String.Empty; string activityText = CleanActivityText(activity.Text); switch (activityText) { case "#help": roslynSession.Reset(); replyText = "\\#help - Sorry I don't have self awareness." + Environment.NewLine + Environment.NewLine; replyText += "\\#reset - Reset the execution environment to the initial state, keep history."; break; case "#reset": roslynSession.Reset(); replyText = "I'm melting, melting. Ohhhhh, what a world, what a world."; break; case "#debug": roslynSession.EnableDebug(); break; default: var executeCodeEntryResult = await roslynSession.AddAndExecuteCodeEntryAsync(activityText); replyText = ConvertToReplyMessage(executeCodeEntryResult); break; } Activity reply = activity.CreateReply(replyText); await connector.Conversations.ReplyToActivityAsync(reply); } else { var reply = HandleSystemMessage(activity); if (reply != null) { ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); await connector.Conversations.ReplyToActivityAsync(reply); } } var response = Request.CreateResponse(HttpStatusCode.OK); return(response); }
void StartInteractiveSession(ReplView view, string platform = "AnyCPU") { if (view == null) { throw new InvalidProgramException ("ReplView is null"); } string exe_name; switch (platform.ToLower ()) { case "anycpu": exe_name = "CSharpReplServer.exe"; break; case "x86": exe_name = "CSharpReplServer32.exe"; break; case "x64": exe_name = "CSharpReplServer64.exe"; break; default: view.WriteOutput (String.Format ("Cannot start interactive session for platform {0}. Platform not supported.", platform)); return; } string bin_dir = Path.GetDirectoryName (Assembly.GetAssembly (typeof(ReplPad)).Location); string repl_exe = Path.Combine (bin_dir, exe_name); var port = nextPort++; var config = MonoDevelop.Ide.IdeApp.Workbench.ActiveDocument.Project.GetConfiguration (IdeApp.Workspace.ActiveConfiguration) as DotNetProjectConfiguration; var start_info = new ProcessStartInfo (repl_exe, port.ToString ()); start_info.UseShellExecute = false; start_info.CreateNoWindow = true; start_info.RedirectStandardError = true; start_info.RedirectStandardOutput = true; var proc = config.TargetRuntime.ExecuteAssembly (start_info); var session = new ReplSession (view, port, proc); replSessions.Add (view, session); //Running = true; Thread.Sleep (1000); // Give _repl_process time to start up before we let anybody do anything with it }
internal void ConnectToInteractiveSession(string address) { var view = AddRepl (); var session = new ReplSession (view, address); replSessions.Add (view, session); Thread.Sleep (1000); // Give _repl_process time to start up before we let anybody do anything with it }