ClientHolderImpl.java 1.42 KB
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;

public class ClientHolderImpl implements ClientHolder{
	Map<String, ClientInstance> clientMap = new HashMap<String, ClientInstance>();

	@Override
	public List<ClientInstance> getClientInstanceList() {
		return new ArrayList<ClientInstance>(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) {
		if(StringUtils.isNotBlank(clientRequest.getCode()) 
				&& StringUtils.isNotBlank(clientRequest.getIp())
				&& clientRequest.getFixRateSec() > 0) {
			return true;
		}else {
			return false;	
		}		
	}
}