ClientInstance.java 2.2 KB
package com.taover.heartbeat.bean;

public class ClientInstance extends ClientRequest implements Instance{
	public int DEFAULT_REFORM_MIN_ERROR_COUNT = 1;
	public int DEFAULT_REFORM_MAX_ERROR_COUNT = 3;
	
	private long lastestServerUnixtime = System.currentTimeMillis()/1000;
	private int lostClientRequestCount = 0;
	private ClientRequest lastestClientRequest;
	
	public ClientInstance(ClientRequest clientRequest) {
		super(clientRequest);
		this.lastestClientRequest = clientRequest;
	}

	@Override
	public void flush() {
		//还未收到请求,则无需刷新失败次数
		if(lastestClientRequest == null) {
			return;
		}
		
		//通过服务器时间,判断是否超时未收到客户端请求
		if(isLatestRequestGreateEqualFixRateSec()) {
			++this.lostClientRequestCount;
		}
	}
	
	private boolean isLatestRequestGreateEqualFixRateSec() {
		return (System.currentTimeMillis()/1000 - this.lastestServerUnixtime) > this.getFixRateSec();
	}

	@Override
	public boolean needReform() {		
		return isLatestRequestGreateEqualFixRateSec() && this.lostClientRequestCount>=DEFAULT_REFORM_MIN_ERROR_COUNT && this.lostClientRequestCount<=DEFAULT_REFORM_MAX_ERROR_COUNT;
	}

	public long getLastestServerUnixtime() {
		return lastestServerUnixtime;
	}

	public void setLastestServerUnixtime(long lastestServerUnixtime) {
		this.lastestServerUnixtime = lastestServerUnixtime;
	}

	public int getLostClientRequestCount() {
		return lostClientRequestCount;
	}

	public void setLostClientRequestCount(int lostClientRequestCount) {
		this.lostClientRequestCount = lostClientRequestCount;
	}

	public ClientRequest getLastestClientRequest() {
		return lastestClientRequest;
	}

	public void setLastestClientRequest(ClientRequest lastestClientRequest) {
		this.lastestClientRequest = lastestClientRequest;
	}

	public void dealClientRequest(ClientRequest clientRequest) {
		if(this.getFixRateSec() != clientRequest.getFixRateSec()) {
			this.setFixRateSec(clientRequest.getFixRateSec());
		}
		if(this.getMaxWaitSec() != clientRequest.getMaxWaitSec()) {
			this.setMaxWaitSec(clientRequest.getMaxWaitSec());
		}
		this.setLastestClientRequest(clientRequest);
		this.lastestServerUnixtime = System.currentTimeMillis()/1000;
		this.lostClientRequestCount = 0;
	}
}