ClientHolderImpl.java 1.75 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;
import com.taover.heartbeat.bean.Instance;
import com.taover.util.UtilEncrypt;

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) {
		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;	
		}		
	}
}