package com.taover.heartbeat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.taover.heartbeat.bean.ClientInstance; import com.taover.heartbeat.bean.ClientRequest; import com.taover.heartbeat.bean.Instance; import com.taover.util.UtilEncrypt; public class ClientHolderImpl implements ClientHolder{ Map clientMap = new HashMap(); @Override public List getClientInstanceList() { return new ArrayList(clientMap.values()); } @Override public void flushClientStatus(ClientInstance clientInstance) { clientInstance.flush(); } @Override public void registryClientInstance(ClientRequest clientRequest) { if(!this.validClientRequest(clientRequest)) { return; } synchronized (this.clientMap) { ClientInstance client = null; if(clientMap.containsKey(clientRequest.getIdentity())) { client = clientMap.get(clientRequest.getIdentity()); clientMap.put(client.getIdentity(), client); }else { client = new ClientInstance(clientRequest); clientMap.put(client.getIdentity(), client); } client.dealClientRequest(clientRequest); } } private boolean validClientRequest(ClientRequest clientRequest) { long time = clientRequest.getUnixtime(); String seckey = UtilEncrypt.MD5Lower32(clientRequest.getCode()+clientRequest.getFixRateSec()+clientRequest.getMaxWaitSec()+time+Instance.SERVER_ENCRPT_SURFFIX); if(StringUtils.isNotBlank(clientRequest.getCode()) && StringUtils.isNotBlank(clientRequest.getIp()) && clientRequest.getFixRateSec() > 0 && seckey.equals(clientRequest.getSeckey())) { return true; }else { return false; } } }