Allow non-ncurses clients #11

Open
opened 2019-04-17 10:06:24 +00:00 by freemo · 0 comments
freemo commented 2019-04-17 10:06:24 +00:00 (Migrated from git.qoto.org)

Metadata

  • Commit Message: feat(display): support non-ncurses plain-text clients
  • Branch: feature/m2-non-ncurses-clients

Background and Context

The server currently renders all output using server-side Ncurses window management. Clients that do not support the Ncurses escape sequences (e.g., simple telnet clients, web-based MUD clients) receive garbled output. A fallback plain-text rendering mode is needed for these clients.

Expected Behavior

The server detects whether a client supports Ncurses-style rendering (via TTYPE negotiation or a configuration flag). Clients that do not support it receive plain-text output with basic ANSI colors but without window management escape sequences.

Acceptance Criteria

  • Server detects non-Ncurses clients via TTYPE negotiation
  • Non-Ncurses clients receive plain-text output without window management escapes
  • Basic ANSI color codes are still sent to non-Ncurses clients
  • All game functionality works for non-Ncurses clients (commands, combat, maps rendered as ASCII text)
  • Players can manually toggle between Ncurses and plain-text modes

Subtasks

  • Code: Add a rendering_mode attribute to PlayerConnection (:ncurses or :plain)
  • Code: Detect client capabilities during TTYPE negotiation — set :plain for unrecognized terminal types
  • Code: Implement a PlainTextRenderer that formats game output as simple text with ANSI colors but no window positioning
  • Code: Route output through the appropriate renderer based on rendering_mode
  • Code: Add a player command to toggle rendering mode (e.g., set display plain / set display ncurses)
  • Code: Ensure map display falls back to basic ASCII grid for plain-text clients
  • Docs: Update YARD comments on PlayerConnection and Display classes. Document the plain-text mode in player help.
  • Tests (Cucumber): Add tests/unit/plain_text_renderer.feature covering: plain text output formatting, ANSI color inclusion, map fallback, mode detection
  • Tests (Cucumber Integration): Add integration feature verifying a plain telnet client receives readable output.
  • Tests (Profiling): Run bundle exec rake unit_profile and verify no performance regressions.
  • Quality: Verify coverage >=97% via bundle exec rake unit. If coverage is <97% then review the current unit test coverage report at build/tests/unit/coverage/ and use it to write new Cucumber based unit tests to improve code coverage. Specifically, write Cucumber/Gherkin style unit tests that are descriptively named and specifically improve coverage on whichever file has the most uncovered lines by writing tests that will target the uncovered lines in the report. Once that is done rerun bundle exec rake unit to verify all tests pass and coverage is above >=97%. Only mark this as complete once coverage is >=97%, if not repeat this task as many times as is needed until coverage reaches >=97%.
  • Quality: Run bundle exec rake (default task: unit tests with coverage) and bundle exec rake integration, fix any errors if needed ensuring both pass across entire code base, do not ignore any failure even if it seems unrelated to this commit, fix it.

Definition of Done

This issue is complete when:

  • All subtasks above are completed and checked off.
  • A Git commit is created where the first line of the commit message matches the Commit Message in Metadata exactly, followed by a blank line, then additional lines providing relevant details about the implementation.
  • The commit is pushed to the remote on the branch matching the Branch in Metadata exactly.
  • The commit is submitted as a pull request to master, reviewed, and merged before this issue is marked done.
## Metadata - **Commit Message**: `feat(display): support non-ncurses plain-text clients` - **Branch**: `feature/m2-non-ncurses-clients` ## Background and Context The server currently renders all output using server-side Ncurses window management. Clients that do not support the Ncurses escape sequences (e.g., simple telnet clients, web-based MUD clients) receive garbled output. A fallback plain-text rendering mode is needed for these clients. ## Expected Behavior The server detects whether a client supports Ncurses-style rendering (via TTYPE negotiation or a configuration flag). Clients that do not support it receive plain-text output with basic ANSI colors but without window management escape sequences. ## Acceptance Criteria - [ ] Server detects non-Ncurses clients via TTYPE negotiation - [ ] Non-Ncurses clients receive plain-text output without window management escapes - [ ] Basic ANSI color codes are still sent to non-Ncurses clients - [ ] All game functionality works for non-Ncurses clients (commands, combat, maps rendered as ASCII text) - [ ] Players can manually toggle between Ncurses and plain-text modes ## Subtasks - [ ] Code: Add a `rendering_mode` attribute to `PlayerConnection` (`:ncurses` or `:plain`) - [ ] Code: Detect client capabilities during TTYPE negotiation — set `:plain` for unrecognized terminal types - [ ] Code: Implement a `PlainTextRenderer` that formats game output as simple text with ANSI colors but no window positioning - [ ] Code: Route output through the appropriate renderer based on `rendering_mode` - [ ] Code: Add a player command to toggle rendering mode (e.g., `set display plain` / `set display ncurses`) - [ ] Code: Ensure map display falls back to basic ASCII grid for plain-text clients - [ ] Docs: Update YARD comments on `PlayerConnection` and `Display` classes. Document the plain-text mode in player help. - [ ] Tests (Cucumber): Add `tests/unit/plain_text_renderer.feature` covering: plain text output formatting, ANSI color inclusion, map fallback, mode detection - [ ] Tests (Cucumber Integration): Add integration feature verifying a plain telnet client receives readable output. - [ ] Tests (Profiling): Run `bundle exec rake unit_profile` and verify no performance regressions. - [ ] Quality: Verify coverage >=97% via `bundle exec rake unit`. If coverage is <97% then review the current unit test coverage report at `build/tests/unit/coverage/` and use it to write new Cucumber based unit tests to improve code coverage. Specifically, write Cucumber/Gherkin style unit tests that are descriptively named and specifically improve coverage on whichever file has the most uncovered lines by writing tests that will target the uncovered lines in the report. Once that is done rerun `bundle exec rake unit` to verify all tests pass and coverage is above >=97%. Only mark this as complete once coverage is >=97%, if not repeat this task as many times as is needed until coverage reaches >=97%. - [ ] Quality: Run `bundle exec rake` (default task: unit tests with coverage) and `bundle exec rake integration`, fix any errors if needed ensuring both pass across **entire** code base, do not ignore any failure even if it seems unrelated to this commit, fix it. ## Definition of Done This issue is complete when: - All subtasks above are completed and checked off. - A Git commit is created where the **first line** of the commit message matches the Commit Message in Metadata exactly, followed by a blank line, then additional lines providing relevant details about the implementation. - The commit is pushed to the remote on the branch matching the **Branch** in Metadata exactly. - The commit is submitted as a **pull request** to `master`, reviewed, and **merged** before this issue is marked done.
freemo self-assigned this 2026-03-15 04:25:21 +00:00
freemo added this to the (deleted) milestone 2026-03-15 04:25:53 +00:00
freemo modified the milestone from (deleted) to v1.1.0 2026-03-16 00:28:16 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference: aethyr/Aethyr#11
No description provided.