001    /*
002     * Copyright (C) 2012 eXo Platform SAS.
003     *
004     * This is free software; you can redistribute it and/or modify it
005     * under the terms of the GNU Lesser General Public License as
006     * published by the Free Software Foundation; either version 2.1 of
007     * the License, or (at your option) any later version.
008     *
009     * This software is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012     * Lesser General Public License for more details.
013     *
014     * You should have received a copy of the GNU Lesser General Public
015     * License along with this software; if not, write to the Free
016     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
017     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
018     */
019    
020    package org.crsh.util;
021    
022    import java.io.Closeable;
023    import java.io.IOException;
024    import java.io.InputStream;
025    import java.io.OutputStream;
026    import java.net.InetSocketAddress;
027    import java.net.Socket;
028    
029    public abstract class AbstractSocketClient implements Closeable {
030    
031      /** . */
032      private int port;
033    
034      /** . */
035      private Socket socket;
036    
037      /** . */
038      private InputStream in;
039    
040      /** . */
041      private OutputStream out;
042    
043      public AbstractSocketClient(int port) {
044        this.port = port;
045      }
046    
047      public final void connect() throws IOException {
048        Socket socket = new Socket();
049        socket.connect(new InetSocketAddress(port));
050        InputStream in = socket.getInputStream();
051        OutputStream out = socket.getOutputStream();
052    
053        //
054        this.socket = socket;
055        this.in = in;
056        this.out = out;
057    
058        //
059        handle(in ,out);
060      }
061    
062      protected abstract void handle(InputStream in, OutputStream out) throws IOException;
063    
064      public final void close() {
065        try {
066          Safe.close(socket);
067          Safe.close(in);
068          Safe.close(out);
069        }
070        finally {
071          this.socket = null;
072          this.in = null;
073          this.out = null;
074        }
075      }
076    }