/** * @throws RemoteException * @throws UnknownHostException */ public void stabilize() throws RemoteException, UnknownHostException { ChordMessageInterface succ = rmiChord(successor.getIp(), successor.getPort()); Finger x = succ.getPredecessor(); if (ino(x.getId(), i, successor.getId())) { successor = x; } InetAddress ip = InetAddress.getLocalHost(); succ = rmiChord(successor.getIp(), successor.getPort()); succ.notify(new Finger(ip.getHostAddress(), port, i)); }
/** * @param _port * @param id * @throws RemoteException * @throws UnknownHostException */ public Chord(int _port, int id) throws RemoteException, UnknownHostException { finger = new Finger[(1 << M)]; // 1 << M = 2^(M) // TODO: set the fingers in the array to null i = id; port = _port; // TODO: determine the current IP of the machine predecessor = null; InetAddress ip = InetAddress.getLocalHost(); successor = new Finger(ip.getHostAddress(), i, i); Timer timer = new Timer(); timer.scheduleAtFixedRate( new TimerTask() { @Override public void run() { try { stabilize(); } catch (RemoteException | UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } fixFingers(); checkPredecessor(); } }, 500, 500); try { // create the registry and bind the name and object. System.out.println("Starting RMI at port=" + port); registry = LocateRegistry.createRegistry(port); registry.rebind("Chord", this); } catch (RemoteException e) { throw e; } }