package com.meidusa.amoeba.manager.client; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.SelectionKey; import java.nio.channels.SocketChannel; import java.util.concurrent.TimeUnit; import org.apache.log4j.Level; import com.meidusa.amoeba.heartbeat.HeartbeatDelayed; import com.meidusa.amoeba.heartbeat.HeartbeatManager; import com.meidusa.amoeba.heartbeat.Status; import com.meidusa.amoeba.net.Connection; import com.meidusa.amoeba.net.ConnectionFactory; import com.meidusa.amoeba.net.ConnectionManager; import com.meidusa.amoeba.service.Service; import com.meidusa.amoeba.util.Initialisable; import com.meidusa.amoeba.util.InitialisationException; public class SingletoneRemoteConfigProvider implements Initialisable ,Service{ private ConnectionManager manager; private ConnectionFactory connectionFactory; private String ipAddress; private int port; private Connection connection; private HeartbeatDelayed heartbeatDelayed = new HeartbeatDelayed(2, TimeUnit.SECONDS){ @Override public Status doCheck() { return null; } @Override public String getName() { return "Amoeba Managed Server Heartbeat"; } }; @Override public void init() throws InitialisationException { try { SocketChannel channel = SocketChannel.open(new InetSocketAddress(ipAddress,port)); connection = connectionFactory.createConnection(channel, System.currentTimeMillis()); connection.setMessageHandler(new RemoteConfigMessageHandler()); this.manager.postRegisterNetEventHandler(connection, SelectionKey.OP_READ); HeartbeatManager.addHeartbeat(heartbeatDelayed); } catch (IOException e) { throw new InitialisationException("cannot create connect to host="+ipAddress+":"+port,e); } } @Override public void shutdown() { if(heartbeatDelayed != null){ HeartbeatManager.removeHeartbeat(heartbeatDelayed); } connection.postClose(null); } @Override public void start() { } @Override public int getShutdownPriority() { // TODO Auto-generated method stub return 0; } @Override public void appendReport(StringBuilder buffer, long now, long sinceLast, boolean reset, Level level) { // TODO Auto-generated method stub } @Override public int getPriority() { return 0; } }