1 6 7 package com.quikj.application.web.talk.feature.proactive.server; 8 9 import java.util.*; 10 import com.quikj.server.web.*; 11 12 16 public class ProactiveUserData 17 { 18 public static final int START = 1; 19 public static final int STOP = 2; 20 21 private static Random random = new Random((new Date()).getTime()); 22 private static ProactiveUserData instance = null; 23 private HashMap sessionMap = new HashMap(); 24 private HashMap sessionChangeMap = new HashMap(); 26 27 private ProactiveUserData() 28 { 29 super(); 30 instance = this; 31 } 32 33 public static ProactiveUserData getInstance() 34 { 35 if (instance == null) 36 { 37 new ProactiveUserData(); 38 } 39 40 return instance; 41 } 42 43 private String getSessionName (UnregisteredIdentifier ident) 44 { 45 return ident.getGroup() + "_" + ident.getUniqueIdentifier(); 46 } 47 48 public UnregisteredInfo createIdentifier(String host, String group) 49 { 50 while (true) 51 { 52 int rand = random.nextInt(); 53 rand = (rand > 0 ? rand: 0 - rand); 54 String host_str = (host.length() >= 20?host.substring(0,20):host); 55 String r = host_str + "~" + (rand % 1000000); 56 57 synchronized(sessionMap) 58 { 59 UnregisteredIdentifier ident = new UnregisteredIdentifier(group, r); 60 if (sessionMap.get(getSessionName(ident)) == null) 61 { 62 UnregisteredInfo info = new UnregisteredInfo(); 63 info.setIdent(ident); 64 sessionMap.put(getSessionName(ident), info); 65 return info; 66 } 67 } 68 } 69 } 70 71 public void removeSessions(Date prior_to) 72 { 73 synchronized (sessionMap) 74 { 75 Set set = sessionMap.keySet(); 76 Iterator iter = set.iterator(); 77 78 while (iter.hasNext() == true) 79 { 80 String session_ident = (String )iter.next(); 81 StringTokenizer tokens = new StringTokenizer(session_ident, "_"); 82 UnregisteredIdentifier ident = new UnregisteredIdentifier(tokens.nextToken(), 83 tokens.nextToken()); 84 UnregisteredInfo info = (UnregisteredInfo)sessionMap.get(getSessionName(ident)); 85 86 if (info.getLastAccessTime().before(prior_to) == true) 87 { 88 iter.remove(); 89 setSessionChangeList(STOP, info.getIdent().getUniqueIdentifier(), 90 info.getIdent().getGroup()); 91 } 92 } 93 } 94 } 95 96 public UnregisteredInfo get(UnregisteredIdentifier key) 97 { 98 synchronized (sessionMap) 99 { 100 return (UnregisteredInfo)sessionMap.get(getSessionName(key)); 101 } 102 } 103 104 public void setNewSessionData(HTTPEndPoint endpoint, String document, UnregisteredInfo info) 105 { 106 109 synchronized (sessionMap) 110 { 111 info.setEndPoint(endpoint); 112 WebInfo web = new WebInfo(document); 113 info.setLastAccessTime(web.getAccessTime()); 114 info.addNewWebAccessInfo(web); 115 info.setPageCount(info.getPageCount() + 1); 116 117 setSessionChangeList(START, info.getIdent().getUniqueIdentifier(), 118 info.getIdent().getGroup()); 119 } 120 } 121 122 public void removeEndpoint(UnregisteredInfo info) 123 { 124 127 synchronized (sessionMap) 128 { 129 info.setEndPoint(null); 130 setSessionChangeList(STOP, info.getIdent().getUniqueIdentifier(), 131 info.getIdent().getGroup()); 132 } 133 } 134 135 private void setSessionChangeList(int type, String ident, String group) 136 { 137 synchronized (sessionMap) 138 { 139 HashMap map = (HashMap)sessionChangeMap.get(group); 140 if (map == null) { 142 map = new HashMap(); 143 sessionChangeMap.put(group, map); 144 } 145 146 map.put(ident, new Integer (type)); 147 } 148 } 149 150 public HashMap listChanges (String group) 151 { 152 synchronized (sessionMap) 153 { 154 HashMap map = (HashMap)sessionChangeMap.get(group); 155 if (map == null) { 157 map = new HashMap(); 158 } 159 160 HashMap new_map = new HashMap(); 162 sessionChangeMap.put (group, new_map); 163 164 return map; 165 } 166 } 167 168 public ArrayList listSessions(String group) 169 { 170 ArrayList list = new ArrayList(); 171 synchronized (sessionMap) 172 { 173 Set set = sessionMap.keySet(); 174 Iterator iter = set.iterator(); 175 176 while (iter.hasNext() == true) 177 { 178 String session_ident = (String )iter.next(); 179 StringTokenizer tokens = new StringTokenizer(session_ident, "_"); 180 UnregisteredIdentifier ident = new UnregisteredIdentifier(tokens.nextToken(), 181 tokens.nextToken()); 182 if (ident.getGroup().equals(group) == true) 183 { 184 list.add(sessionMap.get(getSessionName(ident))); 185 } 186 } 187 } 188 189 return list; 190 } 191 192 public boolean lockSession(String group, String ident) 193 { 194 synchronized (sessionMap) 195 { 196 UnregisteredIdentifier id = new UnregisteredIdentifier(group, ident); 197 UnregisteredInfo info = (UnregisteredInfo)sessionMap.get(getSessionName(id)); 198 if (info == null) 199 { 200 return false; 201 } 202 203 if (info.isHelped() == true) 204 { 205 return false; 206 } 207 208 info.setHelped(true); 209 return true; 210 } 211 } 212 } 213 | Popular Tags |