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        return client.getWidth();
025      }
026    
027      public String getProperty(String name) {
028        return null;
029      }
030    
031      public String readLine(String msg, boolean echo) {
032        try {
033          client.out.writeObject(ServerMessage.READLINE);
034          client.out.writeObject(msg);
035          client.out.writeObject(echo);
036          client.out.flush();
037          return (String)client.in.readObject();
038        }
039        catch (Exception e) {
040          return null;
041        }
042      }
043    
044      public void end(ShellResponse response) {
045        try {
046          client.current = null;
047          client.out.writeObject(ServerMessage.END);
048          client.out.writeObject(response);
049          client.out.flush();
050        }
051        catch (IOException ignore) {
052          //
053        }
054        finally {
055          if (response instanceof ShellResponse.Close) {
056            client.close();
057          }
058        }
059      }
060    }