// ========================================================================
// Copyright 2006 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
package org.mortbay.cometd.ext;
import java.util.HashMap;
import java.util.Map;
import org.cometd.Bayeux;
import org.cometd.Extension;
import org.cometd.Message;
public class TimesyncExtension implements Extension
{
public TimesyncExtension()
{
}
public Message rcv(Message message)
{
return message;
}
public Message rcvMeta(Message message)
{
Map<String,Object> ext=(Map<String,Object>)message.get(Bayeux.EXT_FIELD);
if (ext!=null)
{
Map<String,Object> sync=(Map<String,Object>)ext.get("timesync");
if (sync!=null)
sync.put("ts",new Long(System.currentTimeMillis()));
}
return message;
}
public Message send(Message message)
{
return message;
}
public Message sendMeta(Message message)
{
Message associated = message.getAssociated();
if (associated!=null)
{
Map<String,Object> ext=(Map<String,Object>)associated.get(Bayeux.EXT_FIELD);
if (ext!=null)
{
Map<String,Object> sync=(Map<String,Object>)ext.get("timesync");
if (sync!=null)
{
final long ts=((Long)sync.get("ts")).longValue();
final long p=System.currentTimeMillis()-ts;
sync.put("p",new Long(p));
ext=(Map<String,Object>)message.get(Bayeux.EXT_FIELD);
if (ext==null)
{
ext=new HashMap<String, Object>();
message.put(Bayeux.EXT_FIELD,ext);
}
ext.put("timesync",sync);
}
}
}
return message;
}
}