[mud4j-commit] SF.net SVN: mud4j: [147] trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet
Status: Pre-Alpha
Brought to you by:
mpurland
|
From: <mpu...@us...> - 2007-10-04 21:42:00
|
Revision: 147
http://mud4j.svn.sourceforge.net/mud4j/?rev=147&view=rev
Author: mpurland
Date: 2007-10-04 14:41:58 -0700 (Thu, 04 Oct 2007)
Log Message:
-----------
Add behaviors for mud4j core, effectable, and tests
Add prompt shell for telnet server.
Add line terminal input handler.
Start fixing terminal screen buffer.
Modified Paths:
--------------
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/server/DefaultTelnetServer.java
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractScreenBuffer.java
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractTelnetShell.java
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractTerminalInputHandler.java
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetLoginShell.java
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/TerminalInputHandler.java
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/TerminalScreenBuffer.java
Added Paths:
-----------
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/LineTerminalInputHandler.java
trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetPromptShell.java
Modified: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/server/DefaultTelnetServer.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/server/DefaultTelnetServer.java 2007-10-03 04:46:38 UTC (rev 146)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/server/DefaultTelnetServer.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -35,10 +35,10 @@
properties.put("term.vt100.class", "net.wimpi.telnetd.io.terminal.vt100");
properties.put("term.vt100.aliases", "default,vt100-am,vt102,dec-vt10");
- properties.put("shells", "editor,login");
+ properties.put("shells", "editor,login,prompt");
properties.put("shell.editor.class", "net.sf.mud4j.telnet.shell.Mud4jTelnetEditorShell");
properties.put("shell.login.class", "net.sf.mud4j.telnet.shell.Mud4jTelnetLoginShell");
-
+ properties.put("shell.prompt.class", "net.sf.mud4j.telnet.shell.Mud4jTelnetPromptShell");
properties.put("listeners", "std");
properties.put("std.port", "6666");
Modified: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractScreenBuffer.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractScreenBuffer.java 2007-10-03 04:46:38 UTC (rev 146)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractScreenBuffer.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -59,14 +59,11 @@
* @return Returns true if the position is valid; false otherwise.
*/
protected boolean isValidPosition(int x, int y) {
- boolean positionValid = true;
+ boolean positionValid = false;
- if (x > screenWidth || x < 0) {
- positionValid = false;
+ if (x < screenWidth && y < screenHeight) {
+ positionValid = true;
}
- else if (y > screenHeight || y < 0) {
- positionValid = false;
- }
return positionValid;
}
@@ -245,7 +242,7 @@
// Check if we can fit more on the current line
if (isValidPosition(xPos, yPos)) {
- if (isEndOfLine(xPos)) {
+ if (isEndOfLine(xPos) && isValidPosition(xPos, getNextLine())) {
moveCursorToNextLine();
}
else {
@@ -254,12 +251,17 @@
}
}
// The current line has too much. Move the cursor to the next line.
- else {
+ else if (isValidPosition(xPos, getNextLine())) {
moveCursorToNextLine();
}
-
StringBuffer buffer = getCurrentLineBuffer();
- buffer.append(character);
+ // If at end of line with no more lines
+ if (xPos < screenWidth) {
+ buffer.append(character);
+ }
+ else {
+ buffer.setCharAt(buffer.length() - 1, character);
+ }
}
/**
@@ -270,12 +272,16 @@
write(string.charAt(i));
}
}
+
+ public int getNextLine() {
+ return cursorPosition.y + 1;
+ }
/**
* {@inheritDoc}
*/
public void moveCursorToNextLine() {
- setCursorPosition(0, cursorPosition.y + 1);
+ setCursorPosition(0, getNextLine());
}
/**
Modified: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractTelnetShell.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractTelnetShell.java 2007-10-03 04:46:38 UTC (rev 146)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractTelnetShell.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -76,11 +76,18 @@
protected BasicTerminalIO getTerminalIO() {
return terminalIO;
}
+
+ /**
+ * Read a command followed by an enter or return.
+ */
+ protected String readWord() {
+ return readWord(false);
+ }
/**
* Read a command followed by an enter or return.
*/
- protected String readWord() {
+ protected String readWord(boolean backspaceAllowed) {
boolean isInterrupted = false;
StringBuffer currentLineBuffer = new StringBuffer();
@@ -93,10 +100,22 @@
if (!TerminalUtil.isControlCharacter(c)) {
currentLineBuffer.append(c);
+
+
// Echo to the terminal the character
+ // @todo Only echo if we have echo turned off as telnet opt
terminalIO.write(c);
}
+ if (charValue == BasicTerminalIO.BACKSPACE) {
+ int index = currentLineBuffer.length() - 1;
+
+ if (currentLineBuffer.length() > 1) {
+ currentLineBuffer.deleteCharAt(index);
+ terminalIO.write(c);
+ }
+ }
+
/**
* Once we receive a return we have read the word.
*/
Modified: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractTerminalInputHandler.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractTerminalInputHandler.java 2007-10-03 04:46:38 UTC (rev 146)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/AbstractTerminalInputHandler.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -16,6 +16,8 @@
package net.sf.mud4j.telnet.shell;
import java.awt.Point;
+import java.util.HashSet;
+import java.util.Set;
import net.wimpi.telnetd.io.BasicTerminalIO;
@@ -29,6 +31,8 @@
// Internal screen buffer
private ScreenBuffer screenBuffer;
+ private Set<TerminalKey> allowedKeySet;
+
/**
* Construct a new instance with a ScreenBuffer instance.
*
@@ -36,7 +40,23 @@
*/
public AbstractTerminalInputHandler(ScreenBuffer screenBuffer) {
this.screenBuffer = screenBuffer;
+ this.allowedKeySet = new HashSet<TerminalKey>();
+
+ // Add every terminal key
+ for (TerminalKey terminalKey : TerminalKey.values()) {
+ allowedKeySet.add(terminalKey);
+ }
}
+
+ /**
+ * Construct a new instance with a ScreenBuffer instance with an allowed key set.
+ *
+ * @param screenBuffer ScreenBuffer to use.
+ */
+ public AbstractTerminalInputHandler(ScreenBuffer screenBuffer, Set<TerminalKey> allowedKeySet) {
+ this.screenBuffer = screenBuffer;
+ this.allowedKeySet = allowedKeySet;
+ }
/**
* {@inheritDoc}
@@ -47,25 +67,25 @@
// Point cursorPosition = screenBuffer.getCursorPosition();
if (TerminalUtil.isControlCharacter(inputCharacter)) {
- if (input == BasicTerminalIO.UP) {
+ if (allowedKeySet.contains(TerminalKey.UP) && input == BasicTerminalIO.UP) {
screenBuffer.moveCursorUp();
}
- else if (input == BasicTerminalIO.DOWN) {
+ else if (allowedKeySet.contains(TerminalKey.DOWN) && input == BasicTerminalIO.DOWN) {
screenBuffer.moveCursorDown();
}
- else if (input == BasicTerminalIO.LEFT) {
+ else if (allowedKeySet.contains(TerminalKey.LEFT) && input == BasicTerminalIO.LEFT) {
screenBuffer.moveCursorLeft();
}
- else if (input == BasicTerminalIO.RIGHT) {
+ else if (allowedKeySet.contains(TerminalKey.RIGHT) && input == BasicTerminalIO.RIGHT) {
screenBuffer.moveCursorRight();
}
- else if (TerminalUtil.isBackspaceCharacter(inputCharacter)) {
+ else if (allowedKeySet.contains(TerminalKey.BACKSPACE) && TerminalUtil.isBackspaceCharacter(inputCharacter)) {
screenBuffer.backspace();
}
- else if (TerminalUtil.isDeleteCharacter(inputCharacter)) {
+ else if (allowedKeySet.contains(TerminalKey.DELETE) && TerminalUtil.isDeleteCharacter(inputCharacter)) {
screenBuffer.delete();
}
- else if (input == BasicTerminalIO.ENTER) {
+ else if (allowedKeySet.contains(TerminalKey.ENTER) && input == BasicTerminalIO.ENTER) {
screenBuffer.enter();
}
}
Added: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/LineTerminalInputHandler.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/LineTerminalInputHandler.java (rev 0)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/LineTerminalInputHandler.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -0,0 +1,12 @@
+package net.sf.mud4j.telnet.shell;
+
+public class LineTerminalInputHandler extends AbstractTerminalInputHandler {
+ /**
+ * Construct a new instance with a ScreenBuffer instance.
+ *
+ * @param screenBuffer ScreenBuffer to use.
+ */
+ public LineTerminalInputHandler(ScreenBuffer screenBuffer) {
+ super(screenBuffer);
+ }
+}
\ No newline at end of file
Property changes on: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/LineTerminalInputHandler.java
___________________________________________________________________
Name: svn:keywords
+ "Author Date Id Revision"
Name: svn:eol-style
+ native
Modified: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetLoginShell.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetLoginShell.java 2007-10-03 04:46:38 UTC (rev 146)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetLoginShell.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -71,7 +71,7 @@
//getTerminalIO().write("Password read was: " + password);
if (username.equals("test") && password.equals("test")) {
getTerminalIO().write("Switching to editor...\n");
- connection.setNextShell("editor");
+ connection.setNextShell("prompt");
}
else {
getTerminalIO().write("Failed logon...Please try again.\n\r");
Added: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetPromptShell.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetPromptShell.java (rev 0)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetPromptShell.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -0,0 +1,113 @@
+/**
+ * Copyright 2006 Matthew Purland (m.p...@gm...)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sf.mud4j.telnet.shell;
+
+import java.io.IOException;
+
+/**
+ *
+ *
+ * @todo Auto-generated doc stub for Mud4jTelnetLoginShell.
+ *
+ * @author Matthew Purland
+ */
+public class Mud4jTelnetPromptShell extends AbstractTelnetShell implements
+ TelnetLoginShell {
+
+ /**
+ * {@inheritDoc}
+ */
+ public static TelnetShell createShell() {
+ return new Mud4jTelnetPromptShell();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getGreeting() {
+ /**
+ * @todo Auto-generated method stub
+ */
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void run() throws IOException {
+
+// // Initialize the shell
+// initialize();
+//
+// String command = null;
+// boolean promptHasExited = false;
+//
+// while (!promptHasExited) {
+// getTerminalIO().write("> ");
+// command = readWord(true);
+//
+// getTerminalIO().write("Command was: " + command + "\n\r");
+//
+// if ("quit".equals(command)) {
+// promptHasExited = true;
+// }
+// }
+
+ try {
+ terminalIO.setSignalling(true);
+
+ // Erase the screen and place home cursor at 0,0
+ terminalIO.eraseScreen();
+ terminalIO.homeCursor();
+
+ ScreenBuffer screenBuffer = new TerminalScreenBuffer(terminalIO, terminalIO.getColumns(), 1);
+ TerminalInputHandler inputHandler = new LineTerminalInputHandler(screenBuffer);
+
+ // Display the greeting
+ if (this instanceof TelnetLoginShell) {
+ TelnetLoginShell loginShell = (TelnetLoginShell) this;
+
+ // terminalIO.write(loginShell.getGreeting());
+ }
+ // terminalIO.write(BasicTerminalIO.CRLF);
+
+ // In order to keep current row we need to monitor
+ // each write to terminalIO.write to monitor
+ // for new lines and add 1 for each new line
+ // already sent
+ // As commented out as above for login shell to get working
+// int currentRow = 1;
+// int currentColumn = 1;
+// StringBuffer currentLineBuffer = new StringBuffer();
+// screenBuffer.put(Integer.valueOf(currentRow), currentLineBuffer);
+ boolean isInterrupted = false;
+
+ while (!isInterrupted) {
+ int input = terminalIO.read();
+
+ inputHandler.handleInput(input, terminalIO);
+ }
+
+ // Flush the output to ensure it is sent immediately
+ terminalIO.flush();
+ }
+ catch (IOException ex) {
+ // TODO need to redo to not squelch exceptions
+ }
+ }
+
+}
Property changes on: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/Mud4jTelnetPromptShell.java
___________________________________________________________________
Name: svn:keywords
+ "Author Date Id Revision"
Name: svn:eol-style
+ native
Modified: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/TerminalInputHandler.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/TerminalInputHandler.java 2007-10-03 04:46:38 UTC (rev 146)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/TerminalInputHandler.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -24,6 +24,16 @@
*/
public interface TerminalInputHandler {
+ public enum TerminalKey {
+ UP,
+ DOWN,
+ LEFT,
+ RIGHT,
+ BACKSPACE,
+ DELETE,
+ ENTER
+ }
+
/**
* Input to be handled by the specified input handler. This may include
* operations on the given terminal.
Modified: trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/TerminalScreenBuffer.java
===================================================================
--- trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/TerminalScreenBuffer.java 2007-10-03 04:46:38 UTC (rev 146)
+++ trunk/mud4j-telnet/src/java/net/sf/mud4j/telnet/shell/TerminalScreenBuffer.java 2007-10-04 21:41:58 UTC (rev 147)
@@ -286,9 +286,13 @@
public void write(char character) {
super.write(character);
+ int xPos = getCursorPosition().x + 1;
+ int yPos = getCursorPosition().y;
+
try {
- terminalIO.write(character);
-
+ if (isValidPosition(xPos, yPos)) {
+ terminalIO.write(character);
+ }
System.out.println(character + " was read.");
}
catch (IOException ex) {
@@ -296,4 +300,14 @@
}
}
+ @Override
+ protected void setCursorPosition(int x, int y) {
+ int lastXPosition = getCursorPosition().x;
+ int lastYPosition = getCursorPosition().y;
+
+ super.setCursorPosition(x, y);
+
+ moveTerminalCursorToCurrentPosition(lastXPosition, lastYPosition);
+ }
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|