package com.snowcattle.game.service.time;
import org.springframework.stereotype.Service;
/**
*
* 一般来说,{@link System#currentTimeMillis()} 的调用代价较高,而多数情况下在某一时刻的缓冲时间是可以满足要求的.
* 在管理器采用由{@link #isCacheTime()}控制的策略,即如果为true就缓冲时间,此时调用{@link #now}取得由
* {@link #update()}更新的时间;否则取得系统的实时时间
*
*
*/
@Service
public class SystemTimeService implements TimeService {
/** 偏移量 */
private long offset = 0;
private Time time;
/**
* 构建一个由cacheTime指定的时间管理里
*
* @param cacheTime
*/
public SystemTimeService() {
time = new Time();
time.init();
}
/**
* 更新时间,如果当前的TimeManqager是启用了缓冲策略,则需要在较短的间隔内定调用该方法更新被缓冲的时间
*/
public void update() {
time.update();
}
/**
* 获取当前的更新时间,如果{@link #isCacheTime()}为true,即使用缓冲的时间,}
*
* @return
*/
@Override
public long now() {
return time.startTime + time.currTime;
}
@Override
public boolean timeUp(long sometime) {
if (this.now() > sometime) {
return true;
}
return false;
}
@Override
public long getInterval(long sometime) {
return sometime - this.now();
}
/**
* 获取时间偏移量, 单位: 毫秒
*
* @return
*/
public long getOffset() {
return this.offset;
}
/**
* 设置时间偏移量, <font color='#990000'>为GM命令使用! 用以修改游戏服务器时间</font>
*
* @param value 时间偏移量, 单位: 毫秒
*/
public void setOffset(long value) {
this.offset = value;
}
}