From 59a3670b274793215fbea550d2ec7f90527ad53c Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Thu, 29 Oct 2020 02:18:17 +0100
Subject: [PATCH] Improve login-handling.

---
 new2/plomrogue/commands.py               |  2 +-
 new2/plomrogue/game.py                   |  2 +-
 new2/rogue_chat_nocanvas_monochrome.html | 60 ++++++++++++++----------
 3 files changed, 36 insertions(+), 28 deletions(-)

diff --git a/new2/plomrogue/commands.py b/new2/plomrogue/commands.py
index 88a5211..8aec89b 100644
--- a/new2/plomrogue/commands.py
+++ b/new2/plomrogue/commands.py
@@ -23,7 +23,7 @@ def cmd_LOGIN(game, nick, connection_id):
         t.position = YX(game.map.size.y // 2, game.map.size.x // 2)
         game.things += [t]  # TODO refactor into Thing.__init__?
         game.sessions[connection_id] = t.id_
-        game.io.send('META ' + quote('you are now: ' + nick), connection_id)
+        game.io.send('LOGIN_OK ' + quote('you are now: ' + nick), connection_id)
     t.nickname = nick
     game.io.send('PLAYER_ID %s' % t.id_, connection_id)
 cmd_LOGIN.argtypes = 'string'
diff --git a/new2/plomrogue/game.py b/new2/plomrogue/game.py
index 2d71ac3..6295f8d 100755
--- a/new2/plomrogue/game.py
+++ b/new2/plomrogue/game.py
@@ -100,7 +100,7 @@ class Game(GameBase):
                 to_delete += [connection_id]
         for connection_id in to_delete:
             del self.sessions[connection_id]
-            self.changed = True 
+            self.changed = True
         for t in [t for t in self.things]:
             if t in self.things:
                 try:
diff --git a/new2/rogue_chat_nocanvas_monochrome.html b/new2/rogue_chat_nocanvas_monochrome.html
index ad65461..f878776 100644
--- a/new2/rogue_chat_nocanvas_monochrome.html
+++ b/new2/rogue_chat_nocanvas_monochrome.html
@@ -164,6 +164,7 @@ class Mode {
         this.shows_annotations = shows_annotations;
     }
 }
+let mode_login = new Mode('login', true, false);
 let mode_chat = new Mode('chat', true, false);
 let mode_annotate = new Mode('annotate', true, true);
 let mode_play = new Mode('play', false, false);
@@ -171,7 +172,7 @@ let mode_study = new Mode('study', false, true);
 let mode_edit = new Mode('edit', false, false);
 
 let tui = {
-  mode: mode_chat,
+  mode: mode_login,
   log: [],
   input_prompt: '> ',
   input: '',
@@ -183,6 +184,7 @@ let tui = {
   init: function() {
       this.recalc_input_lines();
       this.height_header = this.height_turn_line + this.height_mode_line;
+      this.log_msg("Please enter your username:");
   },
   switch_mode: function(mode, keep_pos=false) {
     if (mode == mode_study && !keep_pos) {
@@ -317,29 +319,29 @@ let tui = {
     terminal.refresh();
   },
   log_help: function() {
-    tui.log_msg("");
-    tui.log_msg("HELP");
-    tui.log_msg("");
-    tui.log_msg("chat mode commands:");
-    tui.log_msg(":login USER - register as USER");
-    tui.log_msg(":msg USER TEXT - send TEXT to USER");
-    tui.log_msg(":help - show this help");
-    tui.log_msg(":play or :p - switch to play mode");
-    tui.log_msg(":study or :s - switch to study mode");
-    tui.log_msg("");
-    tui.log_msg("play mode commands:");
-    tui.log_msg("w, a, s, d - move avatar");
-    tui.log_msg("f - flatten surroundings");
-    tui.log_msg("e - write following ASCII character");
-    tui.log_msg("c - switch to chat mode");
-    tui.log_msg("? - switch to study mode");
-    tui.log_msg("");
-    tui.log_msg("study mode commands:");
-    tui.log_msg("w, a, s, d - move question mark");
-    tui.log_msg("A - annotate terrain");
-    tui.log_msg("c - switch to chat mode");
-    tui.log_msg("p - switch to play mode");
-    tui.log_msg("");
+    this.log_msg("");
+    this.log_msg("HELP");
+    this.log_msg("");
+    this.log_msg("chat mode commands:");
+    this.log_msg(":nick NAME - re-name yourself to NAME");
+    this.log_msg(":msg USER TEXT - send TEXT to USER");
+    this.log_msg(":help - show this help");
+    this.log_msg(":play or :p - switch to play mode");
+    this.log_msg(":study or :s - switch to study mode");
+    this.log_msg("");
+    this.log_msg("play mode commands:");
+    this.log_msg("w, a, s, d - move avatar");
+    this.log_msg("f - flatten surroundings");
+    this.log_msg("e - write following ASCII character");
+    this.log_msg("c - switch to chat mode");
+    this.log_msg("? - switch to study mode");
+    this.log_msg("");
+    this.log_msg("study mode commands:");
+    this.log_msg("w, a, s, d - move question mark");
+    this.log_msg("A - annotate terrain");
+    this.log_msg("c - switch to chat mode");
+    this.log_msg("p - switch to play mode");
+    this.log_msg("");
   },
   draw_info: function() {
     terminal.drawBox(this.height_header, this.window_width, terminal.rows - this.height_header - this.height_input, this.window_width);
@@ -372,7 +374,6 @@ let game = {
 
 terminal.initialize();
 tui.init();
-tui.log_help();
 tui.full_refresh();
 
 server.init(websocket_location);
@@ -402,6 +403,10 @@ server.websocket.onmessage = function (event) {
   } else if (tokens[0] === 'META') {
      tui.log_msg('@ ' + tokens[1]);
      tui.refresh();
+  } else if (tokens[0] === 'LOGIN_OK') {
+      tui.log_msg('@ ' + tokens[1]);
+      tui.log_help();
+      tui.switch_mode(mode_chat);
   } else if (tokens[0] === 'ANNOTATION') {
      let position = parser.parse_yx(tokens[1]);
      explorer.update_info_db(position, tokens[2]);
@@ -490,6 +495,9 @@ document.addEventListener('keydown', (event) => {
     } else if (tui.mode.has_input_prompt && event.key == 'Backspace') {
         tui.shorten_input();
         tui.full_refresh();
+    } else if (tui.mode == mode_login && event.key == 'Enter') {
+        server.send(['LOGIN', tui.input]);
+        tui.switch_mode(mode_login);
     } else if (tui.mode == mode_annotate && event.key == 'Enter') {
         explorer.annotate(tui.input);
         tui.switch_mode(mode_study, true);
@@ -504,7 +512,7 @@ document.addEventListener('keydown', (event) => {
                 } else if (tokens[0] == ':help') {
                     tui.log_help();
                     tui.refresh();
-                } else if (tokens[0] == ':login') {
+                } else if (tokens[0] == ':nick') {
                     if (tokens.length > 1) {
                         server.send(['LOGIN', tokens[1]]);
                     } else {
-- 
2.30.2