webbasierter Telnet-Client
Ein minimalistischer webbasierter Telnet-Client der Anfängern und Proxy/Firewall-Opfern helfen soll, einen Telnet Zugang zum Mud zu erhalten.
URL: http://telnet.morgengrauen.info
Realisierung
- perl
- zweiteilig Web+Gateway
- ConnServer WebTelnet als Gateway zum Telnet-Server (Mud)
- Cache von Telnet-Verbindungen über eine Id, die vom Client (Web) kommt
- addConnection und doCmd und closeConnection
- Buffer für Ausgabe-History, kann bis zu 1000 Zeilen enthalten und man kann beliebige länge anfordern
- TelnetBrowser.pl für die Erzeugung der Webseiten
Features
- Ansi-Unterstützung
- asynchrones Laden mit Ajax
- einstellbarer (Zeit,Zeilen) Refresh
- Einfärben von Ausgängen, Kommunikation
- Untersuchen, Richtungen mittels Doppelklick auf dem Ausgabefenster
- Buttons mit Standardkommandos
- separate Prompt-Anzeige
- History
- css für Anzeige
- Scroll-Down + Fokus auf Eingabezeile nach Reload
Ideen
- man könnte daraus einen betriebssystem-unabhängigen, browserbasierten Mud-Client machen
- viele leute koennen html/css/javscript und nen paar perl, man kann sich ueberlegen ob man auf den server oder client die verarbeitung macht und man koennte sogar tf und zmud-scripte verarbeiten, und die dann mit perl/javascript funktionen ergaenzen
- Über einen Nutzeraccount koennte man serverseitig Trigger (z.B. fuer Farben) definieren. Damit ist man vom lokalen Rechner unabhängig.
- Loggen und Download der Telnet-Session am Ende. (? will man das wirklich, schliesslich sind da ja private daten (tm & co) drin?)
- Ende-Button, der die Session wirklich beendet. Gibt dem Spieler ein gutes Gefühl und man bekommt eine Logout-Meldung.
- "ABER: BENUTZUNG AUF EIGENE GEFAHR !!!" bei "schlafe ein" nicht mehr anzeigen, wenn die Verbindung schon laengst gekappt ist; das irritiert etwas.
- Telnet-Ausgabe in einem eigenen Frame. Dann kann man da drin scrollen, ohne dass die Buttons und die Eingabezeile mit wegscrollen. Beim Refresh sollte dieses Frame nur ans Ende scrollen, wenn es auch vorm Refresh schon am Ende war, um nerviges gespringe zu vermeiden.
- Richtungsbuttons als Kompassrose
- gerade bei Richtungskommandos nett, asynchron klemmt da irgendwie und macht zwei Kommandos auf einmal oder wasweissich
- Passworteingabe über Input-Feld vom Typ Passwort
TODO
Defekte Links
Bugs
- Ich fliege regelmäßig (ohne für mich erkennbaren Grund) aus dem System raus (oft schon nach 3, 4, 5 Eingaben, manchmal auch erst nach längerer Zeit), mit der entsprechenden Fehlermeldung: "ERROR E6BKLGMOHodo6GPbBJWpmQ?: Connection closed." oder auch "ERROR s9paHPrR6h6fPN8ABGrzdw: Connection closed." oder oder oder... Die Buchstabenkombination scheint immer eine andere zu sein, hab das aber nicht so genau verfolgt. (Perdita)
- Das gleiche hab ich auch: "ERROR KurKsoDV9U4Cf3x6HwP4tA?: Connection closed." leider kann ich meinen alten Account so garnicht mehr nutzen, das schlägt dann schon beim einlogen schief. (Porter) Mail: Porter2005@gmx.net
- Ich hab das gleiche Problem "ERROR AvV?+/QaLwGG0mfdHnHb36g?: Connection closed" (Cutter)
- Dieses Problem tritt bei mir auch sehr zuverlässig auf, meist so nach 10 Minuten Verbindung. (Zaphob, 12.8.2008)
- In letzter Zeit kein Einloggen mehr möglich. Regelmäßig "too many connections" (Cutter)
- Die Verbindung reißt ab, wenn ich
- dieses Portal betrete, um zwischen Para und Normal zu wählen. (Zaphob, 12.8.2008)
- im Wolpertinge zu Tox sage, ich habe eine Clubangelegenheit zu klaeren. (Zaphob, 21.08.2008)
- "Schlafe ein" funktioniert nicht ganz, man wird nicht ausgeloggt, sondern es erscheint immer wieder die gleiche Zeile, und zwar scheinbar die letzte vorm Logout. Auch bei oben genannten ungeplanten Verbindungsabbrüchen wäre es toll, wieder zum Login zu gelangen. (Zaphob, 18.8.2008)
Anzeige
- verschiedene auswählbare CSS-Stylesheets
- waere schoen, wuerde die Ausgabe nach "ende" oder "schlaf ein" noch angezeigt. Hat aber eher niedrige Prioritaet, wuerde ich sagen.
Technisches
- https/ssl zum Mud
- alternative IPC Methoden (unix sockets) ?
- mod_perl richtig nutzen, ggf kann man sich da den Gateway-Server auch sparen
- Apache benutzt (normalerweise) mehrere Prozesse/Threads, die beliebig vom Apache erstellt / gekillt werden. Damit kann man keine Telnet-Verbindungen dauerhaft aufrecht erhalten. Man kann sich auch nicht aussuchen, in welchem Prozess man landet. Ohne zusätzlichen Vermittler geht es also so ohne weiteres nicht, es sei denn mod_perl bietet von sich aus etwas unabhängiges (bisher mir nur bei FastCGI? mit Session Affinity patch bekannt, der einfach viele Daemons laufen laesst, aber dieser Patch wird nicht mehr gepflegt). mod_perl bringt ausser dem Geschwindigkeitsvorteil, dass ein Programm nicht mehr für jede Anfrage komplett neu geladen werden muss, nichts. Wenn ihr doch einen Weg findet, würde mich das interessieren :-) (Menaures)
- Connection timeout bei Wegnavigieren vom WebTelnet-Interface erzwingen (ggfs. mit Rückfrage)
- du buttonphalanx sollte schöner wedden.
DONE
Anzeige
- nach Laden der Seite sollte Eingabefokus direkt auf der Eingabezeile sein.
- Buttons für Himmelsrichtungen/schau
- einfärben von (per Hash regexp->farbe) Richtungen, sag, tm, Anfängerkanal,(Kanäle allgemein)
- Anbieten von Kommando-Buttons mit Text für Richtungen und grundlegende Befehle
- von <pre> zu direktformatiertem Text, mehrere Spaces durch ersetzen
- nach Laden der Seite sollte Eingabefokus direkt auf der Eingabezeile sein.
- nach Kommandoausfuehrung sollte die Seite automatisch nach unten gescrollt sein, damit man direkt die neuste Ausgabe sieht und nicht erst per Hand runterscrollen muss.
- Farben lt. Ansi-Codes (über css-klassen)
- Auswahl Mud + Connect
- direktes Login
- beim Beenden mit 'ende' kommt keine Abschlussmeldung. (Test mit gesnooptem Gast)
- Update-Button, mit dem man z.B. bei langen reload-Abständen per hand aktualisieren kann.
- nn-Button :)
- Momentan ist die IP Adresse, von der aus der Spieler eingeloggt ist, nicht mehr ermittelbar - man sollte in Analogie zum SSL Zugang als erstes ein REMOTE_HOST=xxx.xxx.xxx.xxx senden (Rumata) damit man im Falle von Vandalismus nicht das ganze WebTelnet lahmlegen muss.
- Objekte und NPCs vielleicht in anklickbare Dingse parsen, die automatisch mit "unt" bzw "nimm" versehen sind?
- Kommandos zwischenspeichern (History)
- mehrere Kommandos mittels ";"
- stty ansi jetzt korrekt unterstuetzt mit state-engine
Technisches
- ajax für incrementelles update
- direkte Anzeige der Prompts kein automatisches Login mehr (notwendig für Gast/Neuanmeldung)
- Passworte werden direkt durchgereicht
- telnet-cache bereinigen (timeout) und geschlossene Verbindungen (eof) - check nach jedem Kommando oder per alert regelmäßig
- Begrenzung der Anzahl der Connections im Cache (z.b. auf 20)
Bugs
- Kampf ist eher schwierig, so mit nur Anzeige von Zeilen, wenn man Kommandos eingibt (mit ajax und 2 sekunden refresh geht es ganz gut)
- -b*10 macht, dass keine Anzeige mehr zurückkommt, irgend etwas hängt dann, keine Anzeige mehr von nachfolgenden Kommandos und anscheinend werden diese Kommandos auch nicht mehr ans Mud geschickt. (Taranis) (war das more-prompt)
- automatischer Fokus auf Eingabezeile und damit Scroll nach unten funktioniert bei mir leider nicht. (Taranis)
- Einige Trigger scheinen wohl noch nicht ganz zu laufen:
- In der Raetselstein-Quest haengt bei einem Partiturentausch die Ausgabe nach "tausche partitur": Die bisherige Ausgabe verschwindet, es ist nur das Steuerfeld mit Eingabezeile zu sehen. Drei oder vier Returns bringen aber das gewohnte Bild mitsamt der neuen Ausgabe zurueck. Aufgefallen in Tiefkrumendorf 3. (Drachno)
- Wenn man Ajax einstellt, bleibt das Skript bei einbuchstabigen Kommandos (z. B. o fuer Osten oder auch einbuchstabige Aliase) haengen, es akzeptiert dann auch keine anderen Kommandos mehr, bis man Ajax wieder abstellt. (Xjs)
- Sobald die Eingabe für Befehle wie sag oder tm bestimmte Klammern enthält, gibt es einen Internal Server Error. Allerdings kann man mittels Zurück-Button ins Web-Telnet zurück, und ein Return bringt die dannn auch die erwartete Ausgabe. Probleme bereiten: [() Edit: Passiert nur, wenn die Klammern nicht in Paaren auftreten, wie z.B. bei Smileys und Co.