コード例 #1
0
        public async Task <ExecutionResult> ExecuteCodeAsync(string text)
        {
            var start = 0;
            var end   = text.IndexOf('\n');

            if (end == -1)
            {
                return(ExecutionResult.Success);
            }

            try {
                using (Session.DisableMutatedOnReadConsole()) {
                    while (end != -1)
                    {
                        var line = text.Substring(start, end - start + 1);
                        start = end + 1;
                        end   = text.IndexOf('\n', start);

                        using (var request = await Session.BeginInteractionAsync()) {
                            using (_evaluatorRequest.Increment()) {
                                if (line.Length >= request.MaxLength)
                                {
                                    CurrentWindow.WriteErrorLine(string.Format(Resources.InputIsTooLong, request.MaxLength));
                                    return(ExecutionResult.Failure);
                                }

                                await request.RespondAsync(line);
                            }
                        }
                    }
                }

                return(ExecutionResult.Success);
            } catch (RHostDisconnectedException rhdex) {
                WriteError(rhdex.Message);
                return(ExecutionResult.Success);
            } catch (OperationCanceledException) {
                // Cancellation reason was already reported via RSession.Error and printed out;
                // Return success cause connection lost doesn't mean that RHost died
                return(ExecutionResult.Success);
            } catch (Exception ex) {
                await _coreShell.ShowErrorMessageAsync(ex.ToString());

                return(ExecutionResult.Failure);
            } finally {
                History.AddToHistory(text);
            }
        }
コード例 #2
0
        public async Task <ExecutionResult> ExecuteCodeAsync(string text)
        {
            var start = 0;
            var end   = text.IndexOf('\n');

            if (end == -1)
            {
                return(ExecutionResult.Success);
            }

            try {
                Session.BeforeRequest -= SessionOnBeforeRequest;
                using (Session.DisableMutatedOnReadConsole()) {
                    while (end != -1)
                    {
                        var line = text.Substring(start, end - start + 1);
                        start = end + 1;
                        end   = text.IndexOf('\n', start);

                        using (var request = await Session.BeginInteractionAsync()) {
                            if (line.Length >= request.MaxLength)
                            {
                                CurrentWindow.WriteErrorLine(string.Format(Resources.InputIsTooLong, request.MaxLength));
                                return(ExecutionResult.Failure);
                            }

                            await request.RespondAsync(line);
                        }
                    }
                }

                return(ExecutionResult.Success);
            } catch (RException) {
                // It was already reported via RSession.Error and printed out; just return failure.
                return(ExecutionResult.Failure);
            } catch (OperationCanceledException) {
                // Cancellation reason was already reported via RSession.Error and printed out; just return failure.
                return(ExecutionResult.Failure);
            } catch (Exception ex) {
                await _coreShell.DispatchOnMainThreadAsync(() => _coreShell.ShowErrorMessage(ex.ToString()));

                return(ExecutionResult.Failure);
            } finally {
                Session.BeforeRequest += SessionOnBeforeRequest;
                History.AddToHistory(text);
            }
        }