Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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
        }
Пример #5
0
 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
 }