diff options
| author | Paul Buetow <paul@buetow.org> | 2009-02-08 01:37:25 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2009-02-08 01:37:25 +0000 |
| commit | 69f0e6b0bf0dc0a6c6fe8ccf17c74960697ca10c (patch) | |
| tree | 4b99d266e90f2ac93e46b499b6e02c6dd4bcae18 /client/ServerRequester.java | |
1.0 releasedv0.1
Diffstat (limited to 'client/ServerRequester.java')
| -rw-r--r-- | client/ServerRequester.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/client/ServerRequester.java b/client/ServerRequester.java new file mode 100644 index 0000000..588d528 --- /dev/null +++ b/client/ServerRequester.java @@ -0,0 +1,82 @@ +/** + * + */ +package client; + + +import java.io.*; +import java.net.*; +import java.security.*; +import javax.net.*; +import javax.net.ssl.*; + +import shared.*; +import shared.remotecall.*; + +/** + * This class only has static members. Its used for creating a client socket to connect and + * communicate with the calendar server. + * @author buetow + */ +public class ServerRequester { + /** + * This method creates a new client socket. + * @return Returns a client socket object. + * @throws IOException + */ + private static Socket makeClientSocket() throws IOException { + if (!Config.getBooleanValue("use_ssl")) { + Main.statusMessage("Making non-SSL Socket..."); + return new Socket(Config.getServerAddress(), Config.getIntValue("server_port")); + } + + Main.statusMessage("Making SSL Socket..."); + //Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); + SocketFactory socketFactory = SSLSocketFactory.getDefault(); + return socketFactory.createSocket(Config.getServerAddress(), Config.getIntValue("server_port")); + } + + /** + * Sends a client request to the netcalendar server end receives a server response object. + * @param clientRequest Specifies the client request to send to the calendar server. + * @return Returns the server response. It returns null if no response is available. + */ + public final static ServerResponse sendClientRequest(ClientRequest clientRequest) { + Main.statusMessage("Sending client request to server..."); + + ServerResponse serverResponse = null; + + try { + Socket socket = makeClientSocket(); + socket.setKeepAlive(true); + + // Send the client request to the server + OutputStream outputStream = socket.getOutputStream(); + ObjectOutput objectOutput = new ObjectOutputStream(outputStream); + + objectOutput.writeObject(clientRequest); + objectOutput.flush(); + + // We only want to receive data if the request new events, not if we only send + // changed events! + if (clientRequest.requestsNewEvents()) { + // Recieve the server's response + InputStream inputStream = socket.getInputStream(); + ObjectInput objectInput = new ObjectInputStream(inputStream); + serverResponse = (ServerResponse) objectInput.readObject(); + } + + objectOutput.close(); + socket.close(); + + } catch (Exception e) { + Main.infoMessage("Client error during serialization: " + e.getMessage()); + Main.statusMessage("Error: Client request did not succeed! Server down?"); + return serverResponse; + } + + Main.statusMessage("Last client request succeeded"); + // Returns null if no response is available! + return serverResponse; + } +} |
