1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.cometd.ext;
16
17 import java.util.HashMap;
18 import java.util.Map;
19
20 import org.cometd.Bayeux;
21 import org.cometd.Extension;
22 import org.cometd.Message;
23
24
25 public class TimesyncExtension implements Extension
26 {
27 public TimesyncExtension()
28 {
29 }
30
31 public Message rcv(Message message)
32 {
33 return message;
34 }
35
36 public Message rcvMeta(Message message)
37 {
38 Map<String,Object> ext=(Map<String,Object>)message.get(Bayeux.EXT_FIELD);
39 if (ext!=null)
40 {
41 Map<String,Object> sync=(Map<String,Object>)ext.get("timesync");
42 if (sync!=null)
43 sync.put("ts",new Long(System.currentTimeMillis()));
44 }
45 return message;
46 }
47
48 public Message send(Message message)
49 {
50 return message;
51 }
52
53 public Message sendMeta(Message message)
54 {
55 Message associated = message.getAssociated();
56 if (associated!=null)
57 {
58 Map<String,Object> ext=(Map<String,Object>)associated.get(Bayeux.EXT_FIELD);
59 if (ext!=null)
60 {
61 Map<String,Object> sync=(Map<String,Object>)ext.get("timesync");
62
63 if (sync!=null)
64 {
65 final long ts=((Long)sync.get("ts")).longValue();
66 final long p=System.currentTimeMillis()-ts;
67 sync.put("p",new Long(p));
68
69 ext=(Map<String,Object>)message.get(Bayeux.EXT_FIELD);
70 if (ext==null)
71 {
72 ext=new HashMap<String, Object>();
73 message.put(Bayeux.EXT_FIELD,ext);
74 }
75 ext.put("timesync",sync);
76 }
77 }
78 }
79 return message;
80 }
81 }