/********************************************************** * Doctoral Program in Science and Information Technology * Department of Informatics Engineering * University of Coimbra ********************************************************** * Large Scale Concurrent Systems * * Pedro Alexandre Mesquita Santos Martins - pamm@dei.uc.pt * Nuno Manuel dos Santos Antunes - nmsa@dei.uc.pt **********************************************************/ package org.graphdht.openchord; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.net.Socket; import java.util.Map; import org.graphdht.dht.HTService; import static org.graphdht.openchord.DHTConstants.*; /** * Now this is the only copy of the file... * * * @author nuno */ public class DHTConnector implements HTService<Long, Serializable>, Serializable { public static void main(String[] args) { DHTConnector dc = new DHTConnector("127.0.0.1", DHTConstants.GDHT_OPENCHORD_SERVER_ADD + DHTConstants.GDHT_OPENCHORD_I_PORT); dc.connect(); long key = 10000; dc.put(key, "cenass1"); Serializable get = dc.get(key); System.out.println("get = " + get); dc.put(key, "cenass2"); dc.put(key, "cenass3"); get = dc.get(key); System.out.println("get = " + get); } /** * * * */ private final String host; private final int port; private Socket socket; private ObjectInputStream is; private ObjectOutputStream os; public DHTConnector() { this("10.3.3.191", DHTConstants.GDHT_OPENCHORD_SERVER_ADD + DHTConstants.GDHT_OPENCHORD_I_PORT); } public DHTConnector(String host, int port) { this.host = host; this.port = port; } public boolean connect() { try { this.socket = new Socket(host, port); this.os = new ObjectOutputStream(socket.getOutputStream()); this.is = new ObjectInputStream(socket.getInputStream()); System.out.println("Connected to Open Chord at " + host + ":" + port); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public void release() { try { this.socket.close(); this.socket = null; this.is = null; this.os = null; } catch (Exception ex) { } } public void oneway(Message m) { try { os.writeObject(m); } catch (Exception ex) { System.out.println("Reconnecting..."); //TODO: Better exception handling code... release(); connect(); } } @Override public Serializable get(Long key) { try { os.writeObject(new Message(GET, key, null)); byte[] read = (byte[]) is.readObject(); return (Serializable) DHTConstants.toObject(read); } catch (Exception ex) { System.out.println("Reconnecting..."); //TODO: Better exception handling code... release(); connect(); } return null; } @Override public void put(Long key, Serializable value) { oneway(new Message(PUT, key, toByteArray(value))); } @Override public void remove(Long key) { oneway(new Message(REMOVE, key, null)); } @Override public void putAll(Map<Long, Serializable> m) { throw new UnsupportedOperationException("Not supported yet."); } @Override public Iterable<Serializable> getAllValues() { throw new UnsupportedOperationException("Not supported yet."); } @Override public void shutdown() { this.release(); } }