public AutoUpdateImpl(string windowsManifestUrl, string macManifestUrl, string packageUrl, string serviceName) { _version = Assembly.GetEntryAssembly().GetName().Version.ToString(); _packageUrl = packageUrl; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { _manifestUrl = windowsManifestUrl; OsCommand startOsCommand = new OsCommand(); if (!serviceName.Equals("")) { startOsCommand.FileName = "cmd"; startOsCommand.Arguments = $"/c sc start {serviceName}"; startOsCommand.WaitForExit = true; } else { startOsCommand.FileName = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; startOsCommand.Arguments = ""; startOsCommand.WaitForExit = false; } _startCommand = startOsCommand; OsCommand stopOsCommand = new OsCommand(); if (!serviceName.Equals("")) { stopOsCommand.FileName = "cmd"; stopOsCommand.Arguments = $"/c sc stop {serviceName}"; stopOsCommand.WaitForExit = true; } else { stopOsCommand.FileName = "cmd"; stopOsCommand.Arguments = $"/c taskkill /PID {System.Diagnostics.Process.GetCurrentProcess().Id.ToString()}"; stopOsCommand.WaitForExit = true; } _stopCommand = stopOsCommand; } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { _manifestUrl = macManifestUrl; OsCommand startOsCommand = new OsCommand(); startOsCommand.FileName = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; startOsCommand.Arguments = ""; startOsCommand.WaitForExit = false; _startCommand = startOsCommand; OsCommand stopOsCommand = new OsCommand(); stopOsCommand.FileName = "kill"; //killall stopOsCommand.Arguments = System.Diagnostics.Process.GetCurrentProcess().Id.ToString(); stopOsCommand.WaitForExit = true; _stopCommand = stopOsCommand; } }
private static void Osc(AnsiParser sut, OsCommand command, params string[] args) { var arr = new ReadOnlyMemory <byte> [args.Length]; for (var i = 0; i < args.Length; i++) { arr[i] = Encoding.UTF8.GetBytes(args[i]); } sut.OnOsCommand(command, arr.AsSpan()); }
internal static void AnsiParser_OsCommand_ResetColor_Special(OsCommand command, NamedColor expectedIndex) { var dispatched = 0; var events = new AnsiParserEvents { ResetColor = (index) => { ++dispatched; Assert.Equal(expectedIndex, index); } }; var sut = new AnsiParser(events: events); Osc(sut, command); Assert.Equal(1, dispatched); }
internal static void AnsiParser_OsCommand_SetColor( int expectedCount, NamedColor expectedIndex, int expectedR, int expectedG, int expectedB, OsCommand command, params string[] param ) { var dispatched = 0; var events = new AnsiParserEvents { SetColor = (NamedColor index, in Color color) => { dispatched++; Assert.Equal(expectedIndex, index); Assert.Equal(Color.FromArgb(expectedR, expectedG, expectedB), color); } }; var sut = new AnsiParser(events: events); Osc(sut, command, param); Assert.Equal(expectedCount, dispatched); }
public void OnOsCommand(OsCommand command, ReadOnlySpan <ReadOnlyMemory <byte> > parameters, IgnoredData ignored = default) { Color color; ReadOnlySpan <char> characters; switch (command) { case OsCommand.SetWindowIconAndTitle: case OsCommand.SetWindowTitle: // Set window title. if (parameters.Length > 0 && _utf8(parameters[0].Span, out characters)) { _events.SetTitle?.Invoke(characters); } break; case OsCommand.SetWindowIcon: break; case OsCommand.SetColor: // Set color index. if (parameters.Length % 2 != 0) { break; } for (var i = 0; i < parameters.Length; i += 2) { if (TryParseByte(parameters[i].Span, out var index) && TryParseColor(parameters[i + 1].Span, out color)) { _events.SetColor?.Invoke((NamedColor)index, color); } } break; case OsCommand.SetForegroundColor: if (parameters.Length > 0 && TryParseColor(parameters[0].Span, out color)) { _events.SetColor?.Invoke(NamedColor.Foreground, color); } break; case OsCommand.SetBackgroundColor: if (parameters.Length > 0 && TryParseColor(parameters[0].Span, out color)) { _events.SetColor?.Invoke(NamedColor.Background, color); } break; case OsCommand.SetCursorColor: if (parameters.Length > 0 && TryParseColor(parameters[0].Span, out color)) { _events.SetColor?.Invoke(NamedColor.Cursor, color); } break; case OsCommand.SetCursorStyle: if (parameters.Length > 0 && parameters[0].Length > _cursorShape.Length && parameters[0].Span.Slice(0, _cursorShape.Length).SequenceEqual(_cursorShape)) { switch ((CursorStyle)(parameters[0].Span[12] - (byte)'0')) { case CursorStyle.Beam: _events.SetCursor?.Invoke(CursorStyle.Beam); break; case CursorStyle.Block: _events.SetCursor?.Invoke(CursorStyle.Block); break; case CursorStyle.Underline: _events.SetCursor?.Invoke(CursorStyle.Underline); break; } } break; case OsCommand.SetClipboard: if (parameters.Length > 1 && (parameters[1].Length == 0 || parameters[1].Span[0] != '?') && TryParseBase64(parameters[1].Span, out ReadOnlySpan <byte> base64) && _utf8(base64, out characters)) { _events.SetClipboard?.Invoke(characters); } break; case OsCommand.ResetColor: if (parameters.Length == 0) { for (var i = 0; i < 257; i++) { _events.ResetColor?.Invoke((NamedColor)i); } break; } for (var i = 0; i < parameters.Length; i++) { if (TryParseByte(parameters[i].Span, out var index)) { _events.ResetColor?.Invoke((NamedColor)index); } } break; case OsCommand.ResetForegroundColor: _events.ResetColor?.Invoke(NamedColor.Foreground); break; case OsCommand.ResetBackgroundColor: _events.ResetColor?.Invoke(NamedColor.Background); break; case OsCommand.ResetCursorColor: _events.ResetColor?.Invoke(NamedColor.Cursor); break; } }