001 package org.crsh.shell.impl.remoting;
002
003 import org.crsh.shell.ShellProcess;
004 import org.crsh.shell.ShellProcessContext;
005 import org.crsh.shell.ShellResponse;
006
007 import java.io.IOException;
008
009 /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */
010 class ClientProcessContext implements ShellProcessContext {
011
012 /** . */
013 final ClientAutomaton client;
014
015 /** . */
016 final ShellProcess process;
017
018 ClientProcessContext(ClientAutomaton client, ShellProcess process) {
019 this.client = client;
020 this.process = process;
021 }
022
023 public int getWidth() {
024 try {
025 client.out.writeObject(ServerMessage.GET_WIDTH);
026 client.out.flush();
027 return (Integer)client.in.readObject();
028 }
029 catch (Exception e) {
030 return 80;
031 }
032 }
033
034 public String getProperty(String name) {
035 return null;
036 }
037
038 public String readLine(String msg, boolean echo) {
039 try {
040 client.out.writeObject(ServerMessage.READLINE);
041 client.out.writeObject(msg);
042 client.out.writeObject(echo);
043 client.out.flush();
044 return (String)client.in.readObject();
045 }
046 catch (Exception e) {
047 return null;
048 }
049 }
050
051 public void end(ShellResponse response) {
052 try {
053 client.current = null;
054 client.out.writeObject(ServerMessage.END);
055 client.out.writeObject(response);
056 client.out.flush();
057 }
058 catch (IOException ignore) {
059 //
060 }
061 finally {
062 if (response instanceof ShellResponse.Close) {
063 client.close();
064 }
065 }
066 }
067 }