package fm.liu.timo.server.session.handler; import org.pmw.tinylog.Logger; import fm.liu.timo.heartbeat.Heartbeat; import fm.liu.timo.heartbeat.Heartbeat.HeartbeatStatus; import fm.liu.timo.net.connection.BackendConnection; public class HeartbeatInitHandler extends OKResultHandler { private static final String INIT = "CREATE TABLE IF NOT EXISTS timo_heartbeat(id TINYINT UNSIGNED NOT NULL,last_heartbeat_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,master_record BIGINT,PRIMARY KEY(id))"; private HeartbeatInitStatus status = HeartbeatInitStatus.UNINITED; private Heartbeat heartbeat; enum HeartbeatInitStatus { UNINITED, INITED, FINISHED } public HeartbeatInitHandler(Heartbeat heartbeat) { this.heartbeat = heartbeat; } @Override protected void success(BackendConnection con) { switch (status) { case UNINITED: status = HeartbeatInitStatus.INITED; con.query(INIT, this); break; case INITED: status = HeartbeatInitStatus.FINISHED; heartbeat.updateStatus(HeartbeatStatus.OK); heartbeat.updateConnection(con); break; default: break; } } @Override protected void failed(String reason) { Logger.warn("datasource {} init heartbeat failed due to {}.", heartbeat.getSource().getConfig().getID(), reason); } }