Mudlet: Текст GMCP / GA подавляется при входе в систему

Созданный на 2 февр. 2019  ·  36Комментарии  ·  Источник: Mudlet/Mudlet

Краткое описание проблемы / Описание запрошенной функции:

Мы включили GMCP и пытаемся включить GA с помощью LDmud 3.3.495. Для того, чтобы это произошло в LDmud, вы должны включить перехватчик H_PRINT_PROMPT в файле master.c библиотеки и предоставить библиотеке функции для вывода на экран, в том числе принудительную выдачу приглашения Go Ahead. Эта функция отлично работает в объекте игрока и в Mudlet, вы можете увидеть приращение раздела GA.

В первый раз, когда мы подключаемся к грязи, наши подсказки для имени пользователя и пароля отображаются правильно, но если вы выйдете из грязи и без перезапуска Mudlet, нажмите кнопку повторного подключения, ни одна из подсказок не будет отображаться для пользователей. Я выполнил трассировку пакетов, и я вижу, что запрос имени пользователя доставляется клиенту, но Mudlet не отображает приглашение. Чтобы добавить сложности, если я возьму то же самое имя пользователя / пароль и добавлю n в конце приглашения, Mudlet покажет это, но по какой-то причине он не будет печатать без принудительного возврата строки (что я не хочу делать на пользовательском вводе).

Действия по воспроизведению проблемы / Причины добавления функции:

  1. Подключитесь к нашей грязи с помощью Mudlet
  2. Выйти, но не перезапускать Mudlet
  3. В том же окне просто нажмите «Подключиться».

Вывод ошибок / ожидаемый результат функции

Запросы имени пользователя и пароля не выводятся на экран, но пользователь может ввести свое имя пользователя и пароль в слепую. После ввода обоих полей Mudlet отобразит кешированные подсказки.

Дополнительная информация, такая как версия Mudlet, операционная система и идеи по решению / реализации:

Если мы отложим подсказки с n, Mudlet отобразит подсказки правильно, но принудительно выполнит возврат каретки, что не является оптимальным. Mudlet должен иметь возможность нормально печатать приглашение, как при первом подключении к MUD.

Я выполнил трассировку пакетов и подтвердил, что приглашение отправляется в Mudlet, но оно просто не отображает приглашение. Я также разместил снимок экрана в Discord на канале #help.

Использование Mudlet 3.16.1 в Windows 10

need more info

Самый полезный комментарий

Что ж, то, что я слышал, действительно звучит так, будто мы не сбрасываем что-то, когда Сервер отключается - все, что нам нужно сделать, это выяснить, что изменилось во второй раз, и вернуть все обратно к тому, как это было в первый раз ...: scream:

Все 36 Комментарий

Это предшествует исправлению, которое я недавно внес ( начиная с версии выпуска 3.16.1), чтобы, наконец, позволить серверу согласовывать вариант telnet 1 (ECHO) и принимать на себя эхо на экране Mudlet текста, который Mudlet отправляет на сервер обратно в Mudlet. - так что, если все сделано правильно, пароли, которые пользователь вводит в командную строку Mudlet, не отображаются впоследствии на главном экране профиля, если у них установлен параметр «повторять то, что я набираю на моем экране» - поэтому я

Ты хоть представляешь, недавнее ли это изменение или Mudlet всегда был таким?

Честно говоря, похоже, что мы не сбрасываем то, что нужно в нашем методе (void) cTelnet::reset() - я просто не знаю (пока), что это может быть - какие-нибудь идеи ...?

Единственное, что я бы сказал, это то, что если я отключу перехватчик H_PRINT_PROMPT в master.c, проблема не возникнет при 2-х попытках входа в систему, однако тот факт, что они показывают первое соединение с включенным перехватчиком, но терпят неудачу только при последующих попытках. соединений, несмотря на то, что текст отправляется в Mudlet, мне трудно бросить проблему на грязевую библиотеку или драйвер. Тот факт, что добавление n в запрос имени пользователя и пароля приводит к тому, что Mudlet отображает приглашение, заставляет меня думать, что в Mudlet есть проблема. (т.е. это работает: input_to ("get_name", INPUT_PROMPT, "Под каким именем вы хотите, чтобы вас знали? n"); но вызывает возврат строки после приглашения, а затем ввод на следующей строке)

Кроме того, мы не видим такой же проблемы ни на одном другом протестированном клиенте (telnet, tintin ++).

Это вообще помогает?

У нас тоже есть эта проблема на StickMUD. @mfczureal и я потратили немало часов, пытаясь обойти это в игре, но мне кажется, что это связано с Mudlet.

Подтверждено с LDmud 3.5.1 и Mudlet 3.17 - но это уже довольно давно присутствует в Mudlet. Я почти уверен, что уже где-то отмечал эту проблему, но не могу найти ее спонтанно. Спасибо, что сообщили подробности!

Что ж, то, что я слышал, действительно звучит так, будто мы не сбрасываем что-то, когда Сервер отключается - все, что нам нужно сделать, это выяснить, что изменилось во второй раз, и вернуть все обратно к тому, как это было в первый раз ...: scream:

Я попробовал записать повтор для сравнения, но он отличается от оригинала. Первое подключение: Дисплей в порядке. Следующие подключения: Дисплей выключен. Воспроизведение повтора в это время: Также неправильное отображение при первом подключении.

screen shot 2019-02-06 at 7 45 36 am
Вот пример поведения при первом и последующих входах. GA отправляется из игры.

Я вижу, что это все еще помечено как "нужна дополнительная информация". Что я могу предложить, чтобы помочь вам решить эту проблему? Эта проблема мешает нам продвинуться вперед с развертыванием GA в нашей производственной MUD, и мы действительно хотели бы работать с вами, ребята, над ее исправлением. Спасибо

@SlySven ?

: Thinking: Хмм, файла воспроизведения может быть недостаточно, потому что он может не отражать поведение отключения / повторного подключения - поэтому мне нужно войти в MUD, который отображает эту проблему и отслеживает несколько переменных - у меня есть некоторые подозрения, но жив тестирование действительно поможет. Могу ли я получить логин в любой из ваших MUD @mfczureal / @mpconley ?

Что ж, ты недавно был на моей грязи, устраняя неполадки в Discord, так что попробуй Darkwind? :)

Ах, но я не знал, что @mfczureal на GitHub был ZureaL на Discord. :подмигивание:

Вы можете попробовать эту проблему, подключившись к mg.mud.de:23

Войдите в систему как гость с таким именем, как gast затем подключитесь повторно.

Просто проверяю, есть ли по этому поводу какие-то дальнейшие действия? Мы все еще не можем реализовать GA в продакшене, и мне бы очень хотелось уложить это в постель. Спасибо!

Нам нужно убрать ярлык «Требуется дополнительная информация» с этого и вернуть ярлык с высоким приоритетом :)

Выполнено! Однако я не уверен, каковы планы @SlySven по расследованию этого

Я действительно пытался разобраться в этом, но я не мог быть уверен, что испытываю то, о чем вы сообщаете. Я действительно не понимаю, как работает материал GA, поэтому не уверен, как все это связано с исправлением ошибок IRE и всем этим. Я попытался войти в Darkwind, но с загружаемым пользовательским интерфейсом происходили действительно странные вещи (который устанавливался и как пакет, и как модуль, и каждый раз, когда я начинал, требовалось время для этого). возникла проблема, о которой вы сообщаете - я даже не уверен, что все ручки были в правильном положении.

: think_balloon: Я думаю, что для Mudlet было бы полезно иметь временный набор методов в Host и cTelnet и, возможно, в основном TConsole и это TBuffer Экземпляр флага bool в этих классах и заставляет их сообщать сразу после завершения входа в систему (или когда это другое поведение отображается в подсказках). Это было бы для того, чтобы увидеть, какие флаги находятся в другом состоянии после первого входа в систему (где все правильно) и второго и повторяющихся (где их нет) - я сильно подозреваю, что один из этих флагов (по крайней мере) должен быть сбросить / установить в cTelnet::reset() - как я обнаружил, это необходимо с Host::mIsRemoteEchoingActive которое я недавно добавил ...

Спасибо, что посмотрели! Хорошо, тогда я попробую.

Не вижу этого с mg

image

Не вижу его и в Darkwind (пришлось _ действительно_ покопаться, чтобы найти информацию о соединении - пожалуйста, укажите это в отчете в следующий раз!)

image

В Stickmud ничего нет:

image

Добавьте точные шаги, чтобы воспроизвести проблему (желательно, не просматривая создание персонажа), и мы еще раз рассмотрим это. Спасибо ребята!

Прямо сейчас мы отключили GA в наших экземплярах prod и dev из-за этих проблем. Один из наших администраторов собирается запустить новый экземпляр dev MUD, чтобы я мог повторно включить GA и стать абсолютной площадкой для тестирования того, как GA работает в LDMud. Должно быть поздно вечером, и я сообщу, когда оно будет готово

@ vadi2 @SlySven Используйте stickmud.com 7680 или ссылку StickMUD в Mudlet. Подключитесь как игрок ИЛИ, чтобы войти в систему как Гость, введите "visit" в логине и введите код. После подключения вы можете lua disconnect () и повторить описанный выше процесс. При втором подключении и после этого вы не увидите запрос «Назовите свое имя», как это было при первом подключении, до тех пор, пока не введете имя игрока или «посещение».

Пример, который вы пробовали из mg, действительно отлично отображает дефект. Позволь мне объяснить:

Обратите внимание, как при первой попытке подключения Wie heisst Du denn ("neu" fuer neuen Spieler)? отправляется ДО того, как вы ответите на gast и только после ответа на этот вопрос вам будет задан вопрос Bist Du maennlich oder weiblich: - Остальная процедура входа в систему не имеет отношения к этой проблеме .

grafik

Теперь во всех последующих попытках вы не видите строку Wie heisst Du denn перед ответом на gast . Вместо этого вам нужно ответить, прежде чем вы увидите вопрос, и тогда оба вопроса будут отображаться в одной строке.

grafik

Понял, спасибо!

: think:: confounded:: man_shrugging:

Ах, у меня есть скрытое подозрение, что статус, когда GA включен или нет, не сбрасывается при повторном подключении ... так что Mudlet все еще думает, что он включен, когда игра еще не включила его (например, mg.mud.de не включите его, пока не наберете gast ).

Когда GA не включен, Mudlet немного подождет, прежде чем сдаться и показать текст, но если он включен, он показывает текст только при появлении GA. Итак, здесь - GA никогда не приходит - Mudlet вечно ждет, чтобы показать текст.

привет @ vadi2, у меня работает на OSX с StickMUD. Спасибо!

Отлично. Это исправляет это на стороне Mudlets. Лучшим решением было бы сразу включить GA при подключении (чтобы вы не видели No GA, как в mg. Не тестировали Stickmud)

Пока мы включаем GA, как только подтверждаем, что это клиенты Mudlet или Grapevine - в противном случае игроки могли бы включить ее, если она им нужна. Некоторые клиенты не могут правильно обрабатывать GA.

Технически GA является частью модели NVT ( Network Virtual Terminal ), то есть того, что терминал по умолчанию должен предоставлять как часть полудуплексной модели, подразумеваемой Telnet. Подавить Go Ahead - это не вариант, на который Mudlet когда-либо соглашается, поэтому на самом деле другой конец необходим для подачи сигналов GA. Раньше я этого до конца не осознавал ...

Кажется, это улучшает опыт подключения к mg.mud.de 👍

Комментарии о необходимости (или отсутствии необходимости) в GA обсуждались в # 1252 более подробно, и MG, похоже, отлично работает с Mudlet, просто отправляя EOR вместо GA, что кажется устаревшим.

Кебаб обратил мое внимание на эту проблему, и я хотел бы немного прокомментировать GA / SGA. Не знаю, где еще, пусть будет здесь ...

Вы совершенно правы. GA - это (историческое) средство управления потоком. И если SGA не согласовано, совместимые со стандартами партнеры по обмену данными должны отправлять GA, когда другому партнеру разрешено отправлять (то есть в настоящее время, вероятно, после каждого вывода). Но по тому же аргументу партнеры должны отправлять только после того, как они получили GA ... (что, по моему мнению, никто не делает)

С моей точки зрения, единственный разумный способ справиться с этим и соответствовать стандартам - это всегда согласовывать SGA и избавляться от лишних GA.

По этой причине я не сторонник использования GA как средства быстрого обнаружения (маркировки подсказок). Для этого вам нужно включить Suppress-go-forward, чтобы отключить GA как средство управления потоком в telnet. Только тогда вы можете использовать его с другим значением на уровне выше telnet (маркировка подсказок в выводе MUD). Даже если вы проигнорируете здесь стандарты telnet, в противном случае вы могли бы получить GA для подсказок и, в конечном итоге, для множества других, не подсказок).
Одна из проблем заключается в том, что нет хорошего способа договориться о том, использует ли MUD GA для быстрого обнаружения.

Кроме того, SGA AFAIR переплетается с другими опциями telnet, такими как режим NOECHO и CHARMODE / LINEMODE. Эта взаимозависимость еще больше усложняет дело.

Morgengrauen использует EOR для маркировки приглашений, если TELOPT_EOR согласован (в противном случае он не маркирует приглашения) и не возится с SGA (потому что это значительно усложнит поведение при согласовании telnet для mudlib - в этом случае Mudlib должен позаботьтесь о TELOPT_ECHO, TELOPT_SGA, TELOPT_COMPRESS и TELOPT_COMPRESS2, которых я не хочу делать, это материал для драйвера) и оставьте все вопросы управления потоком на telnet-машине LDMud. Это означает, что Morgengrauen имеет поведение по умолчанию MUD, использующее LDMud для GA / SGA.

Что касается поведения LDMud по умолчанию, я в настоящее время не совсем уверен, но @amotzkau, безусловно, мог бы рассказать об этом более подробно.

Реализация LDMud по умолчанию заключается в том, чтобы не указывать подсказку (это может иметь исторические причины, раньше подсказка была написана до вызова input_to, поэтому драйвер также не имел никаких указаний на подсказку).

И LDMud использует SGA для обозначения символьного режима, что также имеет исторические причины. Без SGA партнерам по коммуникации настоятельно рекомендуется говорить только после того, как они получили GA от контрагента, и сигнализировать GA, когда они закончили говорить. Таким образом, эта последовательность «команда, GA - ответ, GA» фактически составляет стиль линейного режима. А согласие с SGA тогда рассматривается многими клиентами как режим символов, потому что теперь клиент может отправлять символы по мере их ввода. Вот почему SGA не обсуждается вначале. Существует опция Telnet LINEMODE, которая может делать то же самое, но не так широко используется клиентами, как SGA.

В ответ на @SlySven, что каждый сервер должен отправлять GA, если SGA не согласовано, это технически правильно, но это также означает, что клиенту не разрешено отправлять что-либо снова после того, как он отправил GA и не получил GA. И серверу будет разрешено отправить только один ответ, прежде чем снова придется ждать пользовательской команды. Любые внеполосные сообщения (события, действия других пользователей) должны буферизоваться до тех пор, пока пользователь не выполнит другую команду. Насколько мне известно, ни один клиент или сервер MUD этого не придерживается.

Использование GA для индикации подсказок будет следовать за этим старым процессом (сервер завершает свой ответ с помощью GA, последнее, что в ответе - это подсказка), но никто больше не выполняет остальную часть этого процесса, так что это не служит хорошим обоснованием. И всякий раз, когда согласован SGA (так что это не касается Mudlet), GA не должен отправляться и игнорироваться при получении. Поэтому другие клиенты могут игнорировать подсказку в символьном режиме.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги