/// <summary> /// Constructor /// </summary> /// <param name="controllers">Controllers</param> /// <param name="variables">Variables</param> /// <param name="logs">Logs</param> /// <param name="networkManager">Network manger</param> /// <param name="consoleReaderInit">Console reader init</param> /// <param name="consoleWriterInit">Console writer init</param> /// <param name="logger">Logger</param> /// <param name="blockchain">Blockchain</param> /// <param name="vmFactory">VM Factory</param> public Prompt ( IEnumerable <IPromptController> controllers, IPromptUserVariables variables, ILogBag logs, INetworkManager networkManager, IConsoleReader consoleReaderInit, IConsoleWriter consoleWriterInit, Core.Logging.ILogger <Prompt> logger, IBlockchain blockchain ) { _networkManager = networkManager; _consoleReader = consoleReaderInit; _consoleWriter = consoleWriterInit; _logger = logger; _blockchain = blockchain; _logs = logs; _variables = variables; // Get controllers _commandAutocompleteCache = new AutoCommandComplete(); _commandCache = new Dictionary <string[], PromptCommandAttribute>(); _commandCache.Cache(this, _commandAutocompleteCache); foreach (var controller in controllers) { _commandCache.Cache(controller, _commandAutocompleteCache); } }
public ActionResult GetCustRoad(string cond) { try { IAutoCompleteHandler handler = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; List <doCustRoad> lst = handler.GetCustRoad(cond); List <string> strList = new List <string>(); foreach (doCustRoad r in lst) { strList.Add(r.Road); } //string xml = CommonUtil.ConvertToXml<doCustRoad>(lst); return(Json(strList.ToArray())); } catch (Exception ex) { ObjectResultData res = new ObjectResultData(); res.AddErrorMessage(ex); return(Json(res)); } }
public OpenModConsoleInputOutput( ILoggerFactory loggerFactory, IAutoCompleteHandler autoCompleteHandler) { m_CommandQueue = new ConcurrentQueue <string>(); m_AutoCompleteHandler = autoCompleteHandler; m_Logger = loggerFactory.CreateLogger("SDG.Unturned"); }
public ActionResult GetInstrumentCodeAll(string cond) { ObjectResultData res = new ObjectResultData(); try { IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; res.ResultData = hand.GetInstrumentCodeAll(cond, null); } catch (Exception ex) { res.AddErrorMessage(ex); } return(Json(res)); }
public ActionResult GetInstrumentCodeExpansionChild(string cond) { ObjectResultData res = new ObjectResultData(); try { IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; res.ResultData = hand.GetInstrumentCodeAll(cond, ExpansionType.C_EXPANSION_TYPE_CHILD); } catch (Exception ex) { res.AddErrorMessage(ex); } return(Json(res)); }
/// <summary> /// Constructor /// </summary> /// <param name="controllers">Controllers</param> /// <param name="variables">Variables</param> /// <param name="logs">Logs</param> /// <param name="networkManager">Network manger</param> /// <param name="consoleHandler">Console handler</param> /// <param name="logger">Logger</param> /// <param name="blockchain">Blockchain</param> /// <param name="vmFactory">VM Factory</param> public Prompt ( IEnumerable <IPromptController> controllers, IPromptUserVariables variables, ILogBag logs, INetworkManager networkManager, IConsoleHandler consoleHandler, Core.Logging.ILogger <Prompt> logger, IBlockchain blockchain ) { _networkManager = networkManager; _consoleHandler = consoleHandler; _logger = logger; _blockchain = blockchain; _logs = logs; _variables = variables; // Get controllers _commandAutocompleteCache = new AutoCommandComplete(); _commandCache = new Dictionary <string[], PromptCommandAttribute>(); _commandCache.Cache(this, _commandAutocompleteCache); foreach (var controller in controllers) { _commandCache.Cache(controller, _commandAutocompleteCache); } // Help autocomplete var ls = new List <string>(); foreach (var keys in _commandCache.Keys) { foreach (var key in keys) { if (_commandCache.TryGetValue(keys, out var value) && !ls.Contains(value.Command)) { ls.Add(value.Command); } } } CommandAutoCompleteAttribute.Availables = ls.OrderBy(u => u).ToArray(); }
public ActionResult GetSupplierName(string cond) { ObjectResultData res = new ObjectResultData(); try { IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; List <string> lst = hand.GetSupplierName(cond); res.ResultData = lst; } catch (Exception ex) { res.AddErrorMessage(ex); } return(Json(res)); }
/// <summary> /// Get employee code match to cond for auto complete textbox. /// </summary> /// <param name="cond"></param> /// <returns></returns> public ActionResult MAS080_EmployeeCode(string cond) { ObjectResultData res = new ObjectResultData(); List <string> listCode = new List <string>(); try { IAutoCompleteHandler handler = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; listCode = handler.GetEmployeeCode(cond); } catch (Exception ex) { res.AddErrorMessage(ex); } res.ResultData = listCode.ToArray(); return(Json(res)); }
public ActionResult GetMaker(string cond) { try { IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; List <dtGetInstrumentMaker> lst = hand.GetInstrumentMaker(cond); List <string> strList = new List <string>(); foreach (var l in lst) { strList.Add(l.Maker); } return(Json(strList.ToArray())); } catch (Exception ex) { ObjectResultData res = new ObjectResultData(); res.AddErrorMessage(ex); return(Json(res)); } }
public ActionResult GetSubcontractorNameLC(string cond) { try { IAutoCompleteHandler handler = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; List <doSubcontractorNameLC> lst = handler.GetSubcontractorNameLC(cond); List <string> strList = new List <string>(); foreach (var l in lst) { strList.Add(l.SubcontractorName); } return(Json(strList.ToArray())); } catch (Exception ex) { ObjectResultData res = new ObjectResultData(); res.AddErrorMessage(ex); return(Json(res)); } }
public ActionResult GetSiteSubDistrictLC(string cond) { ObjectResultData res = new ObjectResultData(); try { IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; List <dtSiteSubDistrictLC> lst = hand.GetSiteSubDistrictLC(cond); List <string> strList = new List <string>(); foreach (var l in lst) { strList.Add(l.SubDistrictLC); } res.ResultData = strList; } catch (Exception ex) { res.AddErrorMessage(ex); } return(Json(res)); }
/// <summary> /// Get local billing address match to cond for using in auto complete textbox. /// </summary> /// <param name="cond"></param> /// <returns></returns> public ActionResult GetAddressLC(string cond) { ObjectResultData res = new ObjectResultData(); List <string> listAddressLC = new List <string>(); try { IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; List <doBillingAddressNameLC> lst = hand.GetBillingAddressNameLC(cond); foreach (var item in lst) { listAddressLC.Add(item.AddressLC); } } catch (Exception ex) { res.AddErrorMessage(ex); } res.ResultData = listAddressLC.ToArray(); return(Json(res)); }
public ActionResult MAS090_GetInatrumentName(string cond) { ObjectResultData res = new ObjectResultData(); List <string> listInstName = new List <string>(); try { IAutoCompleteHandler handler = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler; List <doInstrumentName> lst = handler.GetInstrumentName(cond); foreach (var item in lst) { listInstName.Add(item.InstrumentName); } } catch (Exception ex) { res.AddErrorMessage(ex); } res.ResultData = listInstName.ToArray(); return(Json(res)); }
public OpenModWindowsConsoleInputOutput( ILoggerFactory loggerFactory, IConfiguration configuration, IAutoCompleteHandler autoCompleteHandler) : base(loggerFactory, configuration, autoCompleteHandler) { }
public SerilogWindowsConsoleInputOutput( ILoggerFactory loggerFactory, IAutoCompleteHandler autoCompleteHandler) : base(loggerFactory, autoCompleteHandler) { }
public static void Cache(this IDictionary <string[], PromptCommandAttribute> cache, object instance, IAutoCompleteHandler autoComplete) { foreach (var mi in instance.GetType().GetMethods ( BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance )) { foreach (var atr in mi.GetCustomAttributes <PromptCommandAttribute>()) { if (atr == null) { continue; } atr.SetMethod(instance, mi); cache.Add(atr.Commands, atr); if (autoComplete == null) { continue; } if (autoComplete.TryGetValue(atr.Command, out var value)) { value.Add(mi.GetParameters()); } else { var ls = new List <ParameterInfo[]> { mi.GetParameters() }; autoComplete.Add(atr.Command, ls); } } } }
public KeyHandler(IConsole console, List <string> history, IAutoCompleteHandler autoCompleteHandler) : this(console, history, autoCompleteHandler, string.Empty) { }
/// <inheritdoc /> public string ReadFromConsole(IAutoCompleteHandler autocomplete = null) { State = ConsoleReaderState.Reading; // Write prompt WritePrompt(); // If have something loaded if (TryReadManualInput(out var manual)) { State = ConsoleReaderState.ReadingDirty; // Print it WriteLine(manual, ConsoleOutputStyle.Input); // Use it State = ConsoleReaderState.None; return(manual); } // Read from console var state = new ConsoleInputState(this) { Autocomplete = autocomplete }; if (IsWindows) { // In Mac don't work Console.CursorSize = !state.InsertMode ? 100 : 25; } ConsoleKeyInfo i; do { i = Console.ReadKey(true); if (_keyHandle.TryGetValue(i.Key, out var action)) { action(i.Key, state); } else { ReadFromConsole_Default(i, state); } State = state.Txt.Length > 0 ? ConsoleReaderState.ReadingDirty : ConsoleReaderState.Reading; }while (i.Key != ConsoleKey.Enter); // Process return var ret = state.Txt.ToString(); // Append to history if (_history.LastOrDefault() != ret) { if (_history.Count > MaxHistorySize) { _history.RemoveAt(0); } _history.Add(ret); } // return text State = ConsoleReaderState.None; return(ret); }
private AutoCompleteCommand[] SearchCommands(CommandToken[] tokens, IAutoCompleteHandler autocomplete) { if (autocomplete == null) { return(null); } var ret = new Dictionary <string, AutoCompleteCommand>(); foreach (var entry in autocomplete.Commands) { var entryTokens = entry.SplitCommandLine().ToArray(); // check start with var exact = true; var parIndex = 0; var error = false; for (var max = Math.Min(tokens.Length, entryTokens.Length); parIndex < max; parIndex++) { var a = entryTokens[parIndex].Value; var b = tokens[parIndex].Value; if (!string.Equals(a, b, StringComparison.InvariantCultureIgnoreCase)) { if (parIndex == max - 1) { if (!a.StartsWith(b, StringComparison.InvariantCultureIgnoreCase)) { error = true; break; } exact = false; } else { error = true; break; } } } if (error) { continue; } if (!ret.TryGetValue(entry, out var value)) { value = new AutoCompleteCommand() { IsExact = exact, ParameterStartIndex = parIndex, Method = entry, Methods = new List <ParameterInfo[]>() }; ret.Add(entry, value); } // return the entry if (autocomplete.TryGetMethods(entry, out var avalue)) { foreach (var ls in avalue) { value.Methods.Add(ls.ToArray()); } } } // Return the find return(ret.Count > 0 ? ret.Values.OrderBy(u => u.IsExact).ThenBy(u => u.Method).ToArray() : null); }
public KeyHandler(IConsole console, List <string> history, IAutoCompleteHandler autoCompleteHandler) { Console2 = console; _history = history ?? new List <string>(); _historyIndex = _history.Count; _text = new StringBuilder(); _keyActions = new Dictionary <string, Action>(); _keyActions["LeftArrow"] = MoveCursorLeft; _keyActions["Home"] = MoveCursorHome; _keyActions["End"] = MoveCursorEnd; _keyActions["ControlA"] = MoveCursorHome; _keyActions["ControlB"] = MoveCursorLeft; _keyActions["RightArrow"] = MoveCursorRight; _keyActions["ControlF"] = MoveCursorRight; _keyActions["ControlE"] = MoveCursorEnd; _keyActions["Backspace"] = Backspace; _keyActions["Delete"] = Delete; _keyActions["ControlD"] = Delete; _keyActions["ControlH"] = Backspace; _keyActions["ControlL"] = ClearLine; _keyActions["Escape"] = ClearLine; _keyActions["UpArrow"] = PrevHistory; _keyActions["ControlP"] = PrevHistory; _keyActions["DownArrow"] = NextHistory; _keyActions["ControlN"] = NextHistory; _keyActions["ControlU"] = () => { while (!IsStartOfLine()) { Backspace(); } }; _keyActions["ControlK"] = () => { int pos = _cursorPos; MoveCursorEnd(); while (_cursorPos > pos) { Backspace(); } }; _keyActions["ControlW"] = () => { while (!IsStartOfLine() && _text[_cursorPos - 1] != ' ') { Backspace(); } }; _keyActions["ControlT"] = TransposeChars; _keyActions["Tab"] = () => { if (IsInAutoCompleteMode()) { NextAutoComplete(); } else { if (autoCompleteHandler == null || !IsEndOfLine()) { return; } string text = _text.ToString(); _completionStart = text.LastIndexOfAny(autoCompleteHandler.Separators); _completionStart = _completionStart == -1 ? 0 : _completionStart + 1; _completions = autoCompleteHandler.GetSuggestions(text, _completionStart); _completions = _completions?.Length == 0 ? null : _completions; if (_completions == null) { return; } StartAutoComplete(); } }; _keyActions["ShiftTab"] = () => { if (IsInAutoCompleteMode()) { PreviousAutoComplete(); } }; }
/// <inheritdoc /> public string ReadFromConsole(IAutoCompleteHandler autocomplete = null) { State = ConsoleReaderState.Reading; // Write prompt _consoleWriter.WritePrompt(); // If have something loaded if (_manualInputs.Count > 0) { State = ConsoleReaderState.ReadingDirty; // Get first loaded command var input = _manualInputs[0]; _manualInputs.RemoveAt(0); if (!string.IsNullOrEmpty(input)) { // Print it _consoleWriter.WriteLine(input, ConsoleOutputStyle.Input); // Use it State = ConsoleReaderState.None; return(input); } } // Read from console string ret; var cursor = 0; var historyIndex = 0; var insertMode = true; var txt = new StringBuilder(); if (IsWindows) { // In Mac don't work Console.CursorSize = !insertMode ? 100 : 25; } _consoleWriter.GetCursorPosition(out var startX, out var startY); var i = new ConsoleKeyInfo(); do { i = Console.ReadKey(true); switch (i.Key) { // Accept case ConsoleKey.Enter: { _consoleWriter.WriteLine("", ConsoleOutputStyle.Input); break; } // Remove case ConsoleKey.Delete: { if (cursor >= txt.Length) { break; } txt.Remove(cursor, 1); if (txt.Length - cursor != 0) { _consoleWriter.SetCursorPosition(startX + cursor, startY); _consoleWriter.Write(txt.ToString().Substring(cursor) + " \b", ConsoleOutputStyle.Input); _consoleWriter.SetCursorPosition(startX + cursor, startY); } else { _consoleWriter.Write(" \b", ConsoleOutputStyle.Input); } break; } case ConsoleKey.Backspace: { if (cursor > 0) { txt.Remove(cursor - 1, 1); cursor--; } else if (cursor == 0) { break; } int l = txt.Length - cursor; if (l > 0) { _consoleWriter.Write("".PadLeft(l, ' '), ConsoleOutputStyle.Input); _consoleWriter.SetCursorPosition(startX + cursor, startY); _consoleWriter.Write(txt.ToString().Substring(cursor), ConsoleOutputStyle.Input); _consoleWriter.SetCursorPosition(startX + cursor, startY); } else { _consoleWriter.Write("\b \b", ConsoleOutputStyle.Input); } break; } // Move case ConsoleKey.LeftArrow: case ConsoleKey.RightArrow: { if (i.Key == ConsoleKey.LeftArrow) { cursor = Math.Max(0, cursor - 1); } else { cursor = Math.Min(txt.Length, cursor + 1); } _consoleWriter.SetCursorPosition(startX + cursor, startY); break; } case ConsoleKey.Home: case ConsoleKey.End: { if (i.Key != ConsoleKey.End) { cursor = 0; } else { cursor = txt.Length; } _consoleWriter.SetCursorPosition(startX + cursor, startY); break; } // History case ConsoleKey.UpArrow: case ConsoleKey.PageUp: case ConsoleKey.DownArrow: case ConsoleKey.PageDown: { string strH = ""; if (_history.Count > 0) { historyIndex = (historyIndex + (i.Key == ConsoleKey.DownArrow || i.Key == ConsoleKey.PageDown ? 1 : -1)); if (historyIndex < 0) { historyIndex = _history.Count - 1; } else if (historyIndex > _history.Count - 1) { historyIndex = 0; } strH = _history[historyIndex]; txt.Clear(); txt.Append(strH); cursor = txt.Length; } CleanFromThisPoint(startX, startY); _consoleWriter.Write(strH, ConsoleOutputStyle.Input); break; } // Autocomplete case ConsoleKey.Tab: { string cmd = txt.ToString().ToLowerInvariant(); string[] matches = autocomplete?.Keys.Where(key => key.StartsWith(cmd)).OrderBy(u => u).ToArray(); if (matches == null || matches.Length <= 0) { // No match break; } int max = 0; if (matches.Length == 1) { // 1 found txt.Clear(); txt.Append(matches[0] + " "); cursor = txt.Length; max = matches[0].Length; } else { // Search match cmd = matches[0]; for (int x = 1, m = cmd.Length; x <= m; x++) { var ok = true; var split = cmd.Substring(0, x); foreach (string s in matches) { if (s.StartsWith(split)) { continue; } ok = false; break; } if (ok) { max = x; } else { break; } } // Take coincidences txt.Clear(); txt.Append(matches[0].Substring(0, max)); cursor = txt.Length; } // Print found _consoleWriter.WriteLine("", ConsoleOutputStyle.Input); foreach (var var in matches) { _consoleWriter.Write(var.Substring(0, max), ConsoleOutputStyle.AutocompleteMatch); _consoleWriter.WriteLine(var.Substring(max), ConsoleOutputStyle.Autocomplete); } // Prompt _consoleWriter.WritePrompt(); _consoleWriter.GetCursorPosition(out startX, out startY); _consoleWriter.Write(txt.ToString(), ConsoleOutputStyle.Input); _consoleWriter.SetCursorPosition(startX + cursor, startY); break; } // Special case ConsoleKey.Insert: { insertMode = !insertMode; Console.CursorSize = !insertMode ? 100 : 25; break; } // Write default: { txt.Insert(cursor, i.KeyChar); cursor++; if (!insertMode) { _consoleWriter.Write(i.KeyChar.ToString(), ConsoleOutputStyle.Input); if (cursor < txt.Length) { txt.Remove(cursor, 1); } } else { _consoleWriter.Write(txt.ToString().Substring(cursor - 1), ConsoleOutputStyle.Input); if (cursor != txt.Length) { _consoleWriter.SetCursorPosition(startX + cursor, startY); } } break; } } State = txt.Length > 0 ? ConsoleReaderState.ReadingDirty : ConsoleReaderState.Reading; }while (i.Key != ConsoleKey.Enter); ret = txt.ToString(); // Append to history if (_history.LastOrDefault() != ret) { if (_history.Count > MaxHistorySize) { _history.RemoveAt(0); } _history.Add(ret); } // return text State = ConsoleReaderState.None; return(ret); }