📄 timesyncclientextension.java
字号:
package org.mortbay.cometd.client.ext;import java.util.Map;import org.cometd.Client;import org.cometd.Extension;import org.cometd.Message;import org.mortbay.util.ajax.JSON;public class TimesyncClientExtension implements Extension{ volatile int _lag; volatile int _offset; public Message rcv(Client from, Message message) { return message; } public Message rcvMeta(Client from, Message message) { Map<String,Object> ext=message.getExt(false); if (ext!=null) { Map<String,Object> sync=(Map<String,Object>)ext.get("timesync"); if (sync!=null) { long now = System.currentTimeMillis(); final long tc=((Number)sync.get("tc")).longValue(); final long ts=((Number)sync.get("ts")).longValue(); final int p=((Number)sync.get("p")).intValue(); final int a=((Number)sync.get("a")).intValue(); int l=(int)(now-tc-p)/2-a; int o=(int)(ts-tc)-l; _lag=(_lag+l)/2; _offset=(_offset+o)/2; } } return message; } public Message send(Client from, Message message) { return message; } public Message sendMeta(Client from, Message message) { Map<String,Object> ext=message.getExt(true); long now = System.currentTimeMillis(); JSON.Literal timesync=new JSON.Literal("{\"tc\":"+now+",\"l\":"+_lag+",\"o\":"+_offset+"}"); ext.put("timesync",timesync); return message; } public int getOffset() { return _offset; } public int getLag() { return _lag; } public long getServerTime() { return System.currentTimeMillis()+_offset; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -