summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/sf/antcontrib/antserver/client/Client.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/sf/antcontrib/antserver/client/Client.java')
-rw-r--r--src/main/java/net/sf/antcontrib/antserver/client/Client.java251
1 files changed, 251 insertions, 0 deletions
diff --git a/src/main/java/net/sf/antcontrib/antserver/client/Client.java b/src/main/java/net/sf/antcontrib/antserver/client/Client.java
new file mode 100644
index 0000000..061815f
--- /dev/null
+++ b/src/main/java/net/sf/antcontrib/antserver/client/Client.java
@@ -0,0 +1,251 @@
+/*
+ * Copyright (c) 2001-2004 Ant-Contrib project. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sf.antcontrib.antserver.client;
+
+import java.io.*;
+import java.net.Socket;
+import java.net.SocketException;
+
+import org.apache.tools.ant.Project;
+
+import net.sf.antcontrib.antserver.Command;
+import net.sf.antcontrib.antserver.Response;
+import net.sf.antcontrib.antserver.Util;
+import net.sf.antcontrib.antserver.commands.DisconnectCommand;
+
+
+/****************************************************************************
+ * Place class description here.
+ *
+ * @author <a href='mailto:[email protected]'>Matthew Inger</a>
+ * @author <additional author>
+ *
+ * @since
+ *
+ ****************************************************************************/
+
+
+public class Client
+{
+ private String machine;
+ private int port;
+ private Project project;
+
+
+ public Client(Project project, String machine, int port)
+ {
+ super();
+ this.machine = machine;
+ this.port = port;
+ this.project = project;
+ }
+
+
+ private Socket socket;
+ private OutputStream os;
+ private InputStream is;
+ private ObjectOutputStream oos;
+ private ObjectInputStream ois;
+ private boolean connected;
+
+
+ public void connect()
+ throws IOException
+ {
+ project.log("Opening connection to " + machine + ":" + port,
+ Project.MSG_DEBUG);
+
+ try
+ {
+ socket = new Socket(machine, port);
+ socket.setKeepAlive(true);
+ project.log("Got connection to " + machine + ":" + port,
+ Project.MSG_DEBUG);
+
+ os = socket.getOutputStream();
+ is = socket.getInputStream();
+
+ oos = new ObjectOutputStream(os);
+ ois = new ObjectInputStream(is);
+
+ connected = true;
+ try
+ {
+ // Read the initial response object so that the
+ // object stream is initialized
+ ois.readObject();
+ }
+ catch (ClassNotFoundException e)
+ {
+ ; // gulp
+ }
+ }
+ finally
+ {
+ // If we were unable to connect, close everything
+ if (!connected)
+ {
+
+ try
+ {
+ if (os != null)
+ os.close();
+ os = null;
+ oos = null;
+ }
+ catch (IOException e)
+ {
+
+ }
+
+ try
+ {
+ if (is != null)
+ is.close();
+ is = null;
+ ois = null;
+ }
+ catch (IOException e)
+ {
+
+ }
+
+ try
+ {
+ if (socket != null)
+ socket.close();
+ socket = null;
+ }
+ catch (IOException e)
+ {
+
+ }
+ }
+ }
+
+
+ }
+
+ public void shutdown()
+ {
+ try
+ {
+ if (os != null)
+ os.close();
+ }
+ catch (IOException e)
+ {
+ ; // gulp
+
+ }
+ os = null;
+ oos = null;
+
+ try
+ {
+ if (is != null)
+ is.close();
+ }
+ catch (IOException e)
+ {
+ ; // gulp
+
+ }
+ is = null;
+ ois = null;
+
+ try
+ {
+ socket.close();
+ }
+ catch (IOException e)
+ {
+ ; // gulp
+ }
+ socket = null;
+
+ connected = false;
+ }
+
+
+ public void disconnect()
+ throws IOException
+ {
+ if (!connected)
+ return;
+
+ try {
+ oos.writeObject(DisconnectCommand.DISCONNECT_COMMAND);
+ try
+ {
+ // Read disconnect response
+ ois.readObject();
+ }
+ catch (ClassNotFoundException e)
+ {
+ ; // gulp
+ }
+
+ shutdown();
+ }
+ catch (SocketException e) {
+ ; // connection was closed
+ }
+ catch (EOFException e) {
+ ; // connection was closed
+ }
+ }
+
+
+ public Response sendCommand(Command command)
+ throws IOException
+ {
+ project.log("Sending command: " + command,
+ Project.MSG_DEBUG);
+ oos.writeObject(command);
+
+ if (command.getContentLength() > 0)
+ {
+ Util.transferBytes(command.getContentStream(),
+ command.getContentLength(),
+ os,
+ true);
+ }
+
+ Response response = null;
+
+ try
+ {
+ // Read the response object
+ response = (Response) ois.readObject();
+ project.log("Received Response: " + response,
+ Project.MSG_DEBUG);
+ if (response.getContentLength() != 0)
+ {
+ command.respond(project,
+ response.getContentLength(),
+ is);
+ }
+ }
+ catch (ClassNotFoundException e)
+ {
+ ; // gulp
+ }
+
+ return response;
+ }
+
+}