Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 60909 invoked from network); 18 Sep 2007 23:06:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 Sep 2007 23:06:18 -0000 Received: (qmail 62221 invoked by uid 500); 18 Sep 2007 23:06:10 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 62213 invoked by uid 500); 18 Sep 2007 23:06:10 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 62202 invoked by uid 99); 18 Sep 2007 23:06:10 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Sep 2007 16:06:10 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Sep 2007 23:06:09 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id B9BD21A9832; Tue, 18 Sep 2007 16:05:49 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r577100 - in /geronimo/sandbox/gshell/trunk/gshell-remote: gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/ gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/ gshell-remote-common/src/main/java... Date: Tue, 18 Sep 2007 23:05:48 -0000 To: scm@geronimo.apache.org From: jdillon@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20070918230549.B9BD21A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jdillon Date: Tue Sep 18 16:05:47 2007 New Revision: 577100 URL: http://svn.apache.org/viewvc?rev=577100&view=rev Log: Adding RemoteShell interface, renamed RemoteShell class to DefaultRemoteShell Moved stream handling to ProtocolHandler Changed SessionInputStream.write() to take a WriteStreamMessage Dropped the stream name muck for now (maybe bring it back after its all working) Dropped MessageVisitorAdapter just use MessageVisitorSupport Added: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/RemoteShell.java - copied, changed from r577083, geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/DefaultRemoteShell.java (contents, props changed) - copied, changed from r577083, geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RemoteShell.java Removed: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitorAdapter.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RemoteShell.java Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageCodecFactory.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitor.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitorSupport.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/WriteStreamMessage.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionInputStream.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionOutputStream.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/ProtocolHandler.java geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerMessageVisitor.java Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java Tue Sep 18 16:05:47 2007 @@ -27,6 +27,7 @@ import org.apache.geronimo.gshell.command.IO; import org.apache.geronimo.gshell.console.Console; import org.apache.geronimo.gshell.console.JLineConsole; +import org.apache.geronimo.gshell.remote.RemoteShell; import org.apache.geronimo.gshell.remote.stream.StreamFeeder; import org.apache.geronimo.gshell.shell.Environment; import org.apache.geronimo.gshell.shell.InteractiveShell; @@ -40,7 +41,7 @@ * @version $Rev$ $Date$ */ public class RemoteShellProxy - implements InteractiveShell + implements RemoteShell, InteractiveShell { private Logger log = LoggerFactory.getLogger(getClass()); @@ -79,7 +80,7 @@ public Environment getEnvironment() { ensureOpened(); - + throw new Error("TODO"); } Copied: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/RemoteShell.java (from r577083, geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java) URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/RemoteShell.java?p2=geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/RemoteShell.java&p1=geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java&r1=577083&r2=577100&rev=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-client/src/main/java/org/apache/geronimo/gshell/remote/client/RemoteShellProxy.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/RemoteShell.java Tue Sep 18 16:05:47 2007 @@ -17,230 +17,19 @@ * under the License. */ -package org.apache.geronimo.gshell.remote.client; +package org.apache.geronimo.gshell.remote; -import java.util.concurrent.atomic.AtomicReference; - -import jline.Terminal; -import org.apache.geronimo.gshell.ExitNotification; -import org.apache.geronimo.gshell.ansi.Renderer; -import org.apache.geronimo.gshell.command.IO; -import org.apache.geronimo.gshell.console.Console; -import org.apache.geronimo.gshell.console.JLineConsole; -import org.apache.geronimo.gshell.remote.stream.StreamFeeder; -import org.apache.geronimo.gshell.shell.Environment; -import org.apache.geronimo.gshell.shell.InteractiveShell; -import org.apache.geronimo.gshell.shell.ShellInfo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.geronimo.gshell.shell.Shell; /** - * Provides a shell interface which will proxy to a remote shell instance. + * Common interface for remote shell support. * * @version $Rev$ $Date$ */ -public class RemoteShellProxy - implements InteractiveShell +public interface RemoteShell + extends Shell { - private Logger log = LoggerFactory.getLogger(getClass()); - - private RshClient client; - - private IO io; - - private Terminal terminal; - - private StreamFeeder outputFeeder; - - private boolean opened; - - public RemoteShellProxy(final RshClient client, final IO io, final Terminal terminal) throws Exception { - assert client != null; - assert io != null; - assert terminal != null; - - this.client = client; - this.io = io; - this.terminal = terminal; - - // - // TODO: send over some client-side details, like the terminal features, etc, as well, verbosity too) - // If any problem or denial occurs, throw an exception, once created the proxy is considered valid. - // - - client.openShell(); - - // Copy the client's input stream to our outputstream so users see command output - outputFeeder = new StreamFeeder(client.getInputStream(), io.outputStream); - outputFeeder.createThread().start(); - - this.opened = true; - } - - public Environment getEnvironment() { - ensureOpened(); - - throw new Error("TODO"); - } - - public ShellInfo getShellInfo() { - ensureOpened(); - - throw new Error("TODO"); - } - - private void ensureOpened() { - if (!opened) { - throw new IllegalStateException("Remote shell proxy has been closed"); - } - } - - public boolean isOpened() { - return opened; - } - - public void close() { - try { - outputFeeder.close(); - - client.closeShell(); - } - catch (Exception e) { - log.error("Failure occured while closing remote shell; ignoring", e); - } - - opened = false; - - log.info("Closed"); - } - - // - // Command Execution - // - - public Object execute(final String line) throws Exception { - ensureOpened(); - - return client.execute(line); - } - - public Object execute(final Object... args) throws Exception { - ensureOpened(); - - return client.execute((Object[])args); - } - - public Object execute(final String path, final Object[] args) throws Exception { - ensureOpened(); - - return client.execute(path, args); - } - - // - // Interactive Shell - // - - public void run(final Object... args) throws Exception { - assert args != null; - - ensureOpened(); - - log.debug("Starting interactive console; args: {}", args); - - // - // FIXME: We need a hook into the session state here so that we can abort the console muck when the session closes - // - - // - // TODO: Request server to load... - // - // loadUserScript(branding.getInteractiveScriptName()); - - final AtomicReference exitNotifHolder = new AtomicReference(); - final AtomicReference lastResultHolder = new AtomicReference(); - - Console.Executor executor = new Console.Executor() { - public Result execute(final String line) throws Exception { - assert line != null; - - try { - Object result = RemoteShellProxy.this.execute(line); - - lastResultHolder.set(result); - } - catch (ExitNotification n) { - exitNotifHolder.set(n); - - return Result.STOP; - } - - return Result.CONTINUE; - } - }; - - JLineConsole console = new JLineConsole(executor, io, terminal); - - console.setPrompter(new Console.Prompter() { - Renderer renderer = new Renderer(); - - public String prompt() { - // - // FIXME: - // - - String userName = "user"; // shellInfo.getUserName(); - String hostName = "remote"; // shellInfo.getLocalHost().getHostName(); - String path = "/"; - - return renderer.render("@|bold " + userName + "|@" + hostName + ":@|bold " + path + "|> "); - } - }); - - console.setErrorHandler(new Console.ErrorHandler() { - public Result handleError(final Throwable error) { - assert error != null; - - // - // FIXME: - // - - log.error("FIXME: " + error, error); - - - return Result.CONTINUE; - } - }); - - // - // TODO: What are we to do with history here? Really should be history on the server... - // - - /* - // Hook up a nice history file (we gotta hold on to the history object at some point so the 'history' command can get to it) - History history = new History(); - console.setHistory(history); - console.setHistoryFile(new File(branding.getUserDirectory(), branding.getHistoryFileName())); - */ - - // Unless the user wants us to shut up, then display a nice welcome banner - /* - if (!io.isQuiet()) { - io.out.println(branding.getWelcomeBanner()); - } - */ - - // Check if there are args, and run them and then enter interactive - if (args.length != 0) { - execute(args); - } - - // And then spin up the console and go for a jog - console.run(); + boolean isOpened(); - // If any exit notification occured while running, then puke it up - ExitNotification n = exitNotifHolder.get(); - if (n != null) { - throw n; - } - } + void close(); } Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageCodecFactory.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageCodecFactory.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageCodecFactory.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageCodecFactory.java Tue Sep 18 16:05:47 2007 @@ -111,7 +111,7 @@ msg.writeExternal(buff); buff.flip(); - + out.write(buff); } Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitor.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitor.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitor.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitor.java Tue Sep 18 16:05:47 2007 @@ -33,6 +33,4 @@ void visitCloseShell(CloseShellMessage msg) throws Exception; void visitExecute(ExecuteMessage msg) throws Exception; - - void visitWriteStream(WriteStreamMessage msg) throws Exception; } Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitorSupport.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitorSupport.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitorSupport.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/MessageVisitorSupport.java Tue Sep 18 16:05:47 2007 @@ -34,9 +34,21 @@ * @version $Rev$ $Date$ */ public abstract class MessageVisitorSupport - extends MessageVisitorAdapter + implements MessageVisitor { - protected Logger log = LoggerFactory.getLogger(getClass()); + protected final Logger log = LoggerFactory.getLogger(getClass()); + + // + // MessageVisitor + // + + public void visitEcho(EchoMessage msg) throws Exception {} + + public void visitOpenShell(OpenShellMessage msg) throws Exception {} + + public void visitCloseShell(CloseShellMessage msg) throws Exception {} + + public void visitExecute(ExecuteMessage msg) throws Exception {} // // Stream Access @@ -65,33 +77,5 @@ return out; - } - - // - // MessageVisitor - // - - public void visitWriteStream(final WriteStreamMessage msg) throws Exception { - assert msg != null; - - log.debug("Writing stream: {}", msg); - - IoSession session = msg.getSession(); - - // Look up the bound stream in the session context - String key = Transport.STREAM_BASENAME + msg.getName(); - Object stream = session.getAttribute(key); - - // For now lets not toss any exceptions or send back any fault messages - if (stream == null) { - log.error("Stream is not registered: {}", key); - } - else if (!(stream instanceof SessionInputStream)) { - log.error("Stream is not for input: {}", key); - } - else { - SessionInputStream in = (SessionInputStream)stream; - in.write(msg.getBuffer()); - } } } Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/WriteStreamMessage.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/WriteStreamMessage.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/WriteStreamMessage.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/message/WriteStreamMessage.java Tue Sep 18 16:05:47 2007 @@ -29,15 +29,11 @@ public class WriteStreamMessage extends MessageSupport { - private String name; - private ByteBuffer buffer; - public WriteStreamMessage(final String name, final ByteBuffer buffer) { + public WriteStreamMessage(final ByteBuffer buffer) { super(MessageType.WRITE_STREAM); - this.name = name; - if (buffer != null) { ByteBuffer tmp = ByteBuffer.allocate(buffer.remaining()); @@ -49,15 +45,7 @@ } public WriteStreamMessage() { - this(null, null); - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; + this(null); } public ByteBuffer getBuffer() { @@ -73,8 +61,6 @@ super.readExternal(in); - name = readString(in); - buffer = readBuffer(in); } @@ -83,14 +69,6 @@ super.writeExternal(out); - writeString(out, name); - writeBuffer(out, buffer); - } - - public void process(final MessageVisitor visitor) throws Exception { - assert visitor != null; - - visitor.visitWriteStream(this); } } Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionInputStream.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionInputStream.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionInputStream.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionInputStream.java Tue Sep 18 16:05:47 2007 @@ -156,11 +156,15 @@ released = true; } - public void write(final ByteBuffer src) { + public void write(final WriteStreamMessage msg) { + assert msg != null; + synchronized (mutex) { if (closed) { return; } + + ByteBuffer src = msg.getBuffer(); log.debug("Filling {} byte(s) into stream from: {}", src.remaining(), src); Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionOutputStream.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionOutputStream.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionOutputStream.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/stream/SessionOutputStream.java Tue Sep 18 16:05:47 2007 @@ -72,10 +72,10 @@ private synchronized void write(final ByteBuffer buff) throws IOException { ensureOpened(); - log.trace("Writing stream from: {}", buff); + log.debug("Writing stream from: {}", buff); + + WriteStreamMessage msg = new WriteStreamMessage(buff); - WriteStreamMessage msg = new WriteStreamMessage("IN", buff); - lastWriteFuture = session.write(msg); } @@ -101,7 +101,7 @@ return; } - log.trace("Flushing stream..."); + log.debug("Flushing stream..."); lastWriteFuture.awaitUninterruptibly(); @@ -109,6 +109,6 @@ throw new IOException("The bytes could not be written to the session"); } - log.trace("Flushed"); + log.debug("Flushed"); } } Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/ProtocolHandler.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/ProtocolHandler.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/ProtocolHandler.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-common/src/main/java/org/apache/geronimo/gshell/remote/transport/ProtocolHandler.java Tue Sep 18 16:05:47 2007 @@ -19,12 +19,10 @@ package org.apache.geronimo.gshell.remote.transport; -import java.io.InputStream; -import java.io.OutputStream; - import org.apache.geronimo.gshell.remote.message.Message; import org.apache.geronimo.gshell.remote.message.MessageResponseInspector; import org.apache.geronimo.gshell.remote.message.MessageVisitor; +import org.apache.geronimo.gshell.remote.message.WriteStreamMessage; import org.apache.geronimo.gshell.remote.stream.SessionInputStream; import org.apache.geronimo.gshell.remote.stream.SessionOutputStream; import org.apache.mina.common.IdleStatus; @@ -74,7 +72,7 @@ // Stream Access // - private void setInputStream(final IoSession session, final InputStream in) { + private void setInputStream(final IoSession session, final SessionInputStream in) { assert session != null; assert in != null; @@ -89,10 +87,10 @@ log.debug("Bound input stream: {}", in); } - private InputStream getInputStream(final IoSession session) { + private SessionInputStream getInputStream(final IoSession session) { assert session != null; - InputStream in = (InputStream) session.getAttribute(Transport.INPUT_STREAM); + SessionInputStream in = (SessionInputStream) session.getAttribute(Transport.INPUT_STREAM); if (in == null) { throw new IllegalStateException("Input stream not bound"); @@ -101,13 +99,13 @@ return in; } - private InputStream removeInputStream(final IoSession session) { + private SessionInputStream removeInputStream(final IoSession session) { assert session != null; - return (InputStream) session.removeAttribute(Transport.INPUT_STREAM); + return (SessionInputStream) session.removeAttribute(Transport.INPUT_STREAM); } - private void setOutputStream(final IoSession session, final OutputStream out) { + private void setOutputStream(final IoSession session, final SessionOutputStream out) { assert session != null; assert out != null; @@ -122,10 +120,10 @@ log.debug("Bound output stream: {}", out); } - private OutputStream getOutputStream(final IoSession session) { + private SessionOutputStream getOutputStream(final IoSession session) { assert session != null; - OutputStream out = (OutputStream) session.getAttribute(Transport.OUTPUT_STREAM); + SessionOutputStream out = (SessionOutputStream) session.getAttribute(Transport.OUTPUT_STREAM); if (out == null) { throw new IllegalStateException("Output stream not bound"); @@ -135,10 +133,10 @@ return out; } - private OutputStream removeOutputStream(final IoSession session) { + private SessionOutputStream removeOutputStream(final IoSession session) { assert session != null; - return (OutputStream) session.removeAttribute(Transport.OUTPUT_STREAM); + return (SessionOutputStream) session.removeAttribute(Transport.OUTPUT_STREAM); } // @@ -192,7 +190,7 @@ // // TODO: Need to handle Exception muck, and send faul messages back to clients // - + if (obj instanceof Message) { // // This is the main protocol action, set the session, freeze the message and @@ -201,9 +199,19 @@ Message msg = (Message)obj; - if (visitor != null) { - msg.setSession(session); - msg.freeze(); + msg.setSession(session); + msg.freeze(); + + if (msg instanceof WriteStreamMessage) { + // + // HACK: See if this fucking works... + // + + SessionInputStream in = getInputStream(session); + + in.write((WriteStreamMessage)msg); + } + else if (visitor != null) { msg.process(visitor); } else { Copied: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/DefaultRemoteShell.java (from r577083, geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RemoteShell.java) URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/DefaultRemoteShell.java?p2=geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/DefaultRemoteShell.java&p1=geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RemoteShell.java&r1=577083&r2=577100&rev=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RemoteShell.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/DefaultRemoteShell.java Tue Sep 18 16:05:47 2007 @@ -25,8 +25,8 @@ import org.apache.geronimo.gshell.branding.Branding; import org.apache.geronimo.gshell.command.CommandExecutor; +import org.apache.geronimo.gshell.remote.RemoteShell; import org.apache.geronimo.gshell.shell.Environment; -import org.apache.geronimo.gshell.shell.Shell; import org.apache.geronimo.gshell.shell.ShellInfo; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.InstantiationStrategy; @@ -43,11 +43,9 @@ * @version $Rev$ $Date$ */ @Component(role=RemoteShell.class, instantiationStrategy=InstantiationStrategy.PER_LOOKUP) -public class RemoteShell - implements Shell, Initializable +public class DefaultRemoteShell + implements RemoteShell, Initializable { - public static final String SESSION_KEY = RemoteShell.class.getName(); - private final Logger log = LoggerFactory.getLogger(getClass()); @Requirement Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/DefaultRemoteShell.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/DefaultRemoteShell.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/DefaultRemoteShell.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerMessageVisitor.java URL: http://svn.apache.org/viewvc/geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerMessageVisitor.java?rev=577100&r1=577099&r2=577100&view=diff ============================================================================== --- geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerMessageVisitor.java (original) +++ geronimo/sandbox/gshell/trunk/gshell-remote/gshell-remote-server/src/main/java/org/apache/geronimo/gshell/remote/server/RshServerMessageVisitor.java Tue Sep 18 16:05:47 2007 @@ -27,6 +27,7 @@ import org.apache.geronimo.gshell.common.Notification; import org.apache.geronimo.gshell.lookup.EnvironmentLookup; import org.apache.geronimo.gshell.lookup.IOLookup; +import org.apache.geronimo.gshell.remote.RemoteShell; import org.apache.geronimo.gshell.remote.message.CloseShellMessage; import org.apache.geronimo.gshell.remote.message.EchoMessage; import org.apache.geronimo.gshell.remote.message.ExecuteMessage; @@ -105,7 +106,7 @@ private RemoteShell getRemoteShell(final IoSession session) { assert session != null; - RemoteShell shell = (RemoteShell) session.getAttribute(RemoteShell.SESSION_KEY); + RemoteShell shell = (RemoteShell) session.getAttribute(RemoteShell.class.getName()); if (shell == null) { throw new IllegalStateException("Remote shell not bound"); @@ -119,7 +120,7 @@ assert shell != null; // Make sure that no session already exists - Object obj = session.getAttribute(RemoteShell.SESSION_KEY); + Object obj = session.getAttribute(RemoteShell.class.getName()); if (obj != null) { throw new IllegalStateException("Remote shell already bound"); @@ -131,14 +132,14 @@ private void unsetRemoteShell(final IoSession session) { assert session != null; - Object obj = session.getAttribute(RemoteShell.SESSION_KEY); + Object obj = session.getAttribute(RemoteShell.class.getName()); // Complain if no remote shell has been bound if (obj != null) { log.warn("Ignoring request to unset remote shell; no shell is bound"); } else { - session.removeAttribute(RemoteShell.SESSION_KEY); + session.removeAttribute(RemoteShell.class.getName()); } }