Консоль не принимает команды у остановленного сервера
Поле ввода и кнопка «Отправить» были активны всегда, хотя команда уходит в stdin процесса: у остановленного сервера его просто нет, и панель отвечала ошибкой уже после отправки. Теперь консоль блокируется, а подсказка объясняет, почему. Заодно из вывода убираются управляющие последовательности терминала. SteamCMD раскрашивает свои сообщения, и в браузере это выглядело как «[0mWaiting for user info...[0mOK». Чистка стоит на общем пути записи в буфер: через него идёт и вывод сервера, и SteamCMD, и сообщения панели. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
package pzserver
|
||||
|
||||
import "testing"
|
||||
|
||||
// TestStripANSI берёт строки ровно в том виде, в каком их печатает SteamCMD:
|
||||
// в браузере коды раскраски превращались в мусор вроде "[0mOK".
|
||||
func TestStripANSI(t *testing.T) {
|
||||
cases := map[string]string{
|
||||
"\x1b[0mConnecting anonymously to Steam Public...\x1b[0mOK": "Connecting anonymously to Steam Public...OK",
|
||||
"\x1b[0m Update state (0x3) reconfiguring, progress: 0.00": " Update state (0x3) reconfiguring, progress: 0.00",
|
||||
"\x1b[1;32mSuccess!\x1b[0m": "Success!",
|
||||
// Перемещение курсора и очистка строки — тоже CSI.
|
||||
"\x1b[2K\x1b[1GЗагрузка": "Загрузка",
|
||||
// Обычные строки не должны меняться.
|
||||
"[----] Installing update...": "[----] Installing update...",
|
||||
"Steam Console Client (c) Valve": "Steam Console Client (c) Valve",
|
||||
"Мир сохранён, игроков онлайн: 3": "Мир сохранён, игроков онлайн: 3",
|
||||
"": "",
|
||||
}
|
||||
|
||||
for input, want := range cases {
|
||||
if got := stripANSI(input); got != want {
|
||||
t.Errorf("stripANSI(%q) = %q, ожидалось %q", input, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestAppendStripsANSI проверяет, что чистка стоит на общем пути: через буфер
|
||||
// идёт и вывод сервера, и SteamCMD, и сообщения самой панели.
|
||||
func TestAppendStripsANSI(t *testing.T) {
|
||||
buf := newLogBuffer(10)
|
||||
buf.append(LogLine{Stream: "task", Text: "\x1b[0mWaiting for user info...\x1b[0mOK"})
|
||||
|
||||
lines := buf.since(0)
|
||||
if len(lines) != 1 {
|
||||
t.Fatalf("строк в буфере: %d", len(lines))
|
||||
}
|
||||
if lines[0].Text != "Waiting for user info...OK" {
|
||||
t.Errorf("в буфер попала строка с кодами: %q", lines[0].Text)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user