/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package bftsmart.reconfiguration; import java.security.PrivateKey; import bftsmart.tom.ServiceProxy; import bftsmart.tom.core.messages.TOMMessageType; import bftsmart.tom.util.TOMUtil; /** * * @author eduardo */ public class Reconfiguration { private ReconfigureRequest request; private ServiceProxy proxy; private int id; public Reconfiguration(int id) { this.id = id; //proxy = new ServiceProxy(id); //request = new ReconfigureRequest(id); } public void connect(){ if(proxy == null){ proxy = new ServiceProxy(id); } } public void addServer(int id, String ip, int port){ this.setReconfiguration(ServerViewManager.ADD_SERVER, id + ":" + ip + ":" + port); } public void removeServer(int id){ this.setReconfiguration(ServerViewManager.REMOVE_SERVER, String.valueOf(id)); } public void setF(int f){ this.setReconfiguration(ServerViewManager.CHANGE_F,String.valueOf(f)); } public void setReconfiguration(int prop, String value){ if(request == null){ //request = new ReconfigureRequest(proxy.getViewManager().getStaticConf().getProcessId()); request = new ReconfigureRequest(id); } request.setProperty(prop, value); } public ReconfigureReply execute(){ byte[] signature = TOMUtil.signMessage(proxy.getViewManager().getStaticConf().getRSAPrivateKey(), request.toString().getBytes()); request.setSignature(signature); byte[] reply = proxy.invoke(TOMUtil.getBytes(request), TOMMessageType.RECONFIG); request = null; return (ReconfigureReply)TOMUtil.getObject(reply); } protected StatusReply askStatus(int id) { request = new ReconfigureRequest(id); PrivateKey key = proxy.getViewManager().getStaticConf().getRSAPrivateKey(); byte[] reqBytes = request.toString().getBytes(); byte[] signature = TOMUtil.signMessage(key, reqBytes); request.setSignature(signature); StatusReplyListener listener = new StatusReplyListener(); proxy.invokeAsynchronous(TOMUtil.getBytes(request), listener, new int[] {id}); StatusReply status = listener.getResponse(); return status; } public void close(){ proxy.close(); proxy = null; } }