예제 #1
0
        public LineSprite(ConsoleString line, String fontFace, int fontSize, Device device)
        {
            _line = line;
            _fontFace = fontFace;
            _fontSize = fontSize;

            Rebuild(device);
        }
예제 #2
0
        private void ParseInput(String line, ConsoleString.StringType type)
        {
            if (_wrappers.Count > 0)
            {
                OutputAppend(line + Environment.NewLine, type);

                lock (_wrappers)
                {
                    foreach (IWrapper wrapper in _wrappers)
                    {
                        wrapper.SendLine(line, type);
                    }
                }
            }
            else
            {
                string command = line.Split(' ')[0];
                string args = line.Substring(line.IndexOf(' ') + 1);
                string[] splitLine = line.Split(new string[] { " ", "\n", "\n\r", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

                switch (command)
                {
                    case "exit":
                        {
                            AlertListenersFinished();
                            return;
                        }
                    case "cd":
                        {
                            OutputAppend(line + Environment.NewLine);
                            ChangeDirectory(args);
                        } break;
                    default:
                        {
                            OutputAppend(line + Environment.NewLine);

                            try
                            {
                                Wrapper wrapper = new Wrapper("cmd.exe", "/c " + line, _currentDirectory.FullName);
                                wrapper.AddListener(this);

                                lock (_wrappers)
                                {
                                    _wrappers.Add(wrapper);
                                }
                            }
                            catch (Exception e)
                            {
                                OutputAppend(e.Message + Environment.NewLine, ConsoleString.StringType.Err);
                            }
                        } break;
                }

                ShowDirectory();
            }
        }
예제 #3
0
        private void OutputAppend(string str, ConsoleString.StringType type)
        {
            lock (_availableLines)
            {
                str = _currentLine + str;

                string[] lines = str.Split(new string[] { Environment.NewLine, "\n", "\n\r" }, StringSplitOptions.None);

                for (int i = 0; i < lines.Length - 1; i++)
                {
                    if (_hasNextType && type == ConsoleString.StringType.Normal)
                        _availableLines.Add(new ConsoleString(lines[i], _nextType));
                    else
                        _availableLines.Add(new ConsoleString(lines[i], type));

                    _hasNextType = false;

                }

                _currentLine = lines[lines.Length - 1];
            }

            StartAlertListeners();
        }
예제 #4
0
        public void SendLine(string line, ConsoleString.StringType type)
        {
            _nextType = type;
            _hasNextType = true;

            ParseInput(line, type);
        }
예제 #5
0
        public ConsoleString[] PeekText()
        {
            ConsoleString[] output;

            lock (_availableLines)
            {
                output = new ConsoleString[_availableLines.Count];

                _availableLines.CopyTo(output, 0);
            }

            return output;
        }
예제 #6
0
        private void ProcessText()
        {
            lock (_currentLines)
            {
                if (_currentLines.Count > 0)
                {
                    ConsoleString[] lines = new ConsoleString[_currentLines.Count];
                    _currentLines.CopyTo(lines, 0);

                    foreach (ConsoleString line in lines)
                    {
                        if (line.Finalised)
                        {
                            _graphics.AddLine(line);
                            _currentLines.Remove(line);
                        }
                    }
                }

                UpdateCurrentLine();
            }
        }
예제 #7
0
        private void OutputAppend(string str, ConsoleString.StringType type)
        {
            lock (_availableLines)
            {
                str = _currentLine + str;

                string[] lines = str.Split(new string[] { Environment.NewLine, "\n", "\n\r" }, StringSplitOptions.None);

                for (int i = 0; i < lines.Length - 1; i++)
                {
                    if (_hasNextType)
                    {
                        _availableLines.Add(new ConsoleString(lines[i], _nextType));
                        _hasNextType = false;
                    }
                    else
                        _availableLines.Add(new ConsoleString(lines[i], type));
                }

                _currentLine = lines[lines.Length - 1];
            }

            // If there is already an alerting thread then
            // don't do anything
            if (!_alerting)
            {
                // The following may not be absolutely necessary but
                // better safe than sorry :D
                if (_alertListeners != null)
                {
                    if (_alertListeners.IsAlive)
                    {
                        // Give thread some time to exit
                        if (!_alertListeners.Join(100))
                        {
                            _alertListeners.Abort();
                            _alertListeners.Join();
                        }
                    }
                    _alertListeners = null;
                }
                _alertListeners = new Thread(new ThreadStart(AlertListeners));
                _alerting = true;
                _alertListeners.Start();
            }
        }
예제 #8
0
 public void SendLine(string line, ConsoleString.StringType type)
 {
     _nextType = type;
     _hasNextType = true;
     _process.StandardInput.WriteLine(line);
 }
예제 #9
0
        public ConsoleString[] GetText()
        {
            lock (_availableLines)
            {
                ConsoleString[] output = new ConsoleString[_availableLines.Count];

                _availableLines.CopyTo(output, 0);

                _availableLines.Clear();
                return output;
            }
        }