001package arcommon.net;
002
003import java.io.BufferedReader;
004import java.io.IOException;
005import java.io.InputStreamReader;
006import java.io.PrintWriter;
007import java.net.Socket;
008
009public class LineConnection {
010
011    private PrintWriter out;
012    private BufferedReader in;
013    private Socket clientSocket;
014    private boolean connected;
015    
016    public LineConnection(Socket pclientSocket) throws IOException {
017        setClientSocket(pclientSocket);
018    }
019
020    protected LineConnection() {
021        ;
022    }
023    
024    protected void setClientSocket(Socket pclientSocket) throws IOException {
025        clientSocket = pclientSocket;
026        out = new PrintWriter(clientSocket.getOutputStream(), true);
027        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
028        connected = true;
029    }
030    
031    public String readLine() {
032        try {
033            String line = in.readLine();
034            if (line == null) {
035                connected = false;
036            }
037            return line;
038        } catch (IOException e) {
039            connected = false;
040            return "";
041        }
042    }
043
044    public char[] readChars(int length) {
045        char[] buffer = new char[length];
046        try {
047            in.read(buffer);
048        } catch (IOException e) {
049            connected = false;
050            return null;
051        }
052        return buffer;
053    }
054    
055    public boolean isConnected() {
056        return connected;
057    }
058    
059    public synchronized void sendLine(String line) {
060        out.write(line + "\n");
061        out.flush();
062    }
063    
064    public void close() {
065        connected = false;
066        if (clientSocket != null) {
067            try {
068                clientSocket.close();
069            } catch (IOException e) {
070                throw new RuntimeException(e);
071            }
072        }
073    }
074}