ログアウトしたユーザがユーザ一覧に残るバグを修正
@@ -195,7 +195,7 @@ | ||
195 | 195 | message[0] = "status"; |
196 | 196 | for (int i = 0; i < users.length; i++) { |
197 | 197 | message[i * 4 + 1] = users[i].getDisplayName(); |
198 | - message[i * 4 + 2] = users[i].isWriting() ? "y" : "n"; | |
198 | + message[i * 4 + 2] = users[i].isWriting() ? "y" : users[i].isAlive() ? "n" : "-"; | |
199 | 199 | message[i * 4 + 3] = users[i].getSessionId(); |
200 | 200 | if(primaryPlugin != null){ |
201 | 201 | message[i * 4 + 4] = primaryPlugin.getUserStatus(users[i]); |
@@ -230,9 +230,9 @@ | ||
230 | 230 | * @param proxy プロキシ |
231 | 231 | * @return |
232 | 232 | */ |
233 | - public boolean removeProxy(ClientProxy proxy) { | |
233 | + public boolean removeProxy(ClientProxy proxy, boolean isAccident) { | |
234 | 234 | if( proxyList.remove(proxy) ){ |
235 | - userManager.logout(proxy.getSessionId()); | |
235 | + userManager.logout(proxy.getSessionId(), isAccident); | |
236 | 236 | sendStatus(); |
237 | 237 | return true; |
238 | 238 | } else { |
@@ -268,7 +268,7 @@ | ||
268 | 268 | |
269 | 269 | if(result == ActionResult.DISCONNECT){ |
270 | 270 | proxyList.remove(proxy); |
271 | - userManager.logout(proxy.getSessionId()); | |
271 | + userManager.logout(proxy.getSessionId(), false); | |
272 | 272 | proxy.sendDisconnect(); |
273 | 273 | sendLog(lines); |
274 | 274 | sendStatus(); |
@@ -21,7 +21,7 @@ | ||
21 | 21 | */ |
22 | 22 | public ActionResult execute(String[] request, ClientProxy proxy) |
23 | 23 | throws IOException { |
24 | - User user = getUserManager().getUserBySessionId(proxy.getSessionId()); | |
24 | + User user = getUserManager().getUser(proxy.getSessionId()); | |
25 | 25 | user.setWriting(request[1].equals("y")); |
26 | 26 | if(request.length == 3){ |
27 | 27 | user.setAlias(request[2]); |
@@ -11,7 +11,7 @@ | ||
11 | 11 | /** |
12 | 12 | * UserManager |
13 | 13 | * |
14 | - * @author 石井孝衛 | |
14 | + * @author koe | |
15 | 15 | * @version $Id$ |
16 | 16 | */ |
17 | 17 | public class UserManager { |
@@ -20,7 +20,7 @@ | ||
20 | 20 | private ArrayList<User> userList = new ArrayList<User>(); |
21 | 21 | |
22 | 22 | public String login(String sessionId, String name){ |
23 | - User user = getUserBySessionId(sessionId); | |
23 | + User user = getUser(sessionId); | |
24 | 24 | if(user == null){ |
25 | 25 | if(!sessionId.equals(masterId)){ |
26 | 26 | sessionId = UUID.randomUUID().toString(); |
@@ -35,16 +35,20 @@ | ||
35 | 35 | } |
36 | 36 | } |
37 | 37 | |
38 | - public void logout(String account){ | |
38 | + public void logout(String sessionId, boolean isAccident){ | |
39 | 39 | for (int i = 0; i < userList.size(); i++) { |
40 | - User user = (User) userList.get(i); | |
41 | - if(user.getName().equals(account)){ | |
42 | - userList.remove(i); | |
40 | + User user = userList.get(i); | |
41 | + if(user.getSessionId().equals(sessionId)){ | |
42 | + if(isAccident){ | |
43 | + user.setAlive(false); | |
44 | + } else { | |
45 | + userList.remove(user); | |
46 | + } | |
43 | 47 | } |
44 | 48 | } |
45 | 49 | } |
46 | 50 | |
47 | - public User getUserBySessionId(String sessionId){ | |
51 | + public User getUser(String sessionId){ | |
48 | 52 | if(sessionId == null || sessionId.length() == 0){ |
49 | 53 | return null; |
50 | 54 | } |
@@ -56,15 +60,6 @@ | ||
56 | 60 | } |
57 | 61 | return null; |
58 | 62 | } |
59 | - | |
60 | - public User getUser(String sessionId){ | |
61 | - for (User user : userList){ | |
62 | - if(user.getSessionId().equals(sessionId)){ | |
63 | - return user; | |
64 | - } | |
65 | - } | |
66 | - return null; | |
67 | - } | |
68 | 63 | |
69 | 64 | public User[] getAllUsers(){ |
70 | 65 | return userList.toArray(new User[userList.size()]); |
@@ -116,4 +116,24 @@ | ||
116 | 116 | public void setAlive(boolean alive) { |
117 | 117 | this.alive = alive; |
118 | 118 | } |
119 | + | |
120 | + /** | |
121 | + * @see java.lang.Object#equals(java.lang.Object) | |
122 | + */ | |
123 | + @Override | |
124 | + public boolean equals(Object obj) { | |
125 | + if(!(obj instanceof User)){ | |
126 | + return false; | |
127 | + } | |
128 | + User user = (User) obj; | |
129 | + return sessionId == user.sessionId || sessionId.equals(user.sessionId); | |
130 | + } | |
131 | + | |
132 | + /** | |
133 | + * @see java.lang.Object#hashCode() | |
134 | + */ | |
135 | + @Override | |
136 | + public int hashCode() { | |
137 | + return sessionId == null ? 0 : sessionId.hashCode(); | |
138 | + } | |
119 | 139 | } |
@@ -139,7 +139,7 @@ | ||
139 | 139 | // log.error("recieveLoop", e); |
140 | 140 | } |
141 | 141 | } |
142 | - server.removeProxy(this); | |
142 | + server.removeProxy(this, true); | |
143 | 143 | try{ |
144 | 144 | destroy(); |
145 | 145 | } catch(IOException e){ |
@@ -182,7 +182,7 @@ | ||
182 | 182 | writer.flush(); |
183 | 183 | } catch (Exception e) { |
184 | 184 | logger.log(Level.SEVERE, request[0], e); |
185 | - server.removeProxy(this); | |
185 | + server.removeProxy(this, true); | |
186 | 186 | return; |
187 | 187 | // log.error(request[0], e); |
188 | 188 | } |
@@ -82,7 +82,7 @@ | ||
82 | 82 | if(columnIndex == 0){ |
83 | 83 | return user.getName(); |
84 | 84 | } else if(columnIndex == 1){ |
85 | - return user.isWriting() ? "φ" : ""; | |
85 | + return user.isWriting() ? "φ" : !user.isActive() ? "×" : ""; | |
86 | 86 | } else { |
87 | 87 | if(user.getStatus().size() == 0){ |
88 | 88 | return ""; |
@@ -97,7 +97,7 @@ | ||
97 | 97 | */ |
98 | 98 | @SuppressWarnings("unchecked") |
99 | 99 | private void initialize() { |
100 | - this.setSize(363, 200); | |
100 | + this.setSize(363, 220); | |
101 | 101 | this.setTitle("接続設定"); |
102 | 102 | this.setContentPane(getJContentPane()); |
103 | 103 | addressList = (List<ServerAddress>) StorageUtils.load("server.xml", ArrayList.class); |
@@ -280,7 +280,7 @@ | ||
280 | 280 | } |
281 | 281 | } |
282 | 282 | sessionList.add(0, session); |
283 | - if(sessionList.size() > 7){ | |
283 | + for(int i = 7; i < sessionList.size(); i++){ | |
284 | 284 | sessionList.remove(7); |
285 | 285 | } |
286 | 286 | StorageUtils.save(sessionList, StorageUtils.SESSION); |
@@ -30,6 +30,10 @@ | ||
30 | 30 | Session session = null; |
31 | 31 | if(sessionList.size() == 0){ |
32 | 32 | session = new Session(); |
33 | + sessionList.add(session); | |
34 | + for(int i = 7; i < sessionList.size(); i++){ | |
35 | + sessionList.remove(7); | |
36 | + } | |
33 | 37 | } else { |
34 | 38 | session = sessionList.get(0); |
35 | 39 | } |
@@ -250,6 +250,7 @@ | ||
250 | 250 | } |
251 | 251 | |
252 | 252 | public void connectionClosed() { |
253 | + showStatus(new UserStatus[0]); | |
253 | 254 | view.setStatus(""); |
254 | 255 | view.setMessage("サーバとの接続を閉じました。"); |
255 | 256 | view.setLoginOK(false); |
@@ -644,7 +645,7 @@ | ||
644 | 645 | session = new Session(); |
645 | 646 | session.setSessionId(UUID.randomUUID().toString()); |
646 | 647 | sessionList.add(0, session); |
647 | - if(sessionList.size() > 7){ | |
648 | + for(int i = 7; i < sessionList.size(); i++){ | |
648 | 649 | sessionList.remove(7); |
649 | 650 | } |
650 | 651 | } |
@@ -23,6 +23,7 @@ | ||
23 | 23 | status[i] = new UserStatus(); |
24 | 24 | status[i].setName(message[i * 4 + 1]); |
25 | 25 | status[i].setWriting(message[i * 4 + 2].equals("y")); |
26 | + status[i].setActive(!message[i * 4 + 2].equals("-")); | |
26 | 27 | status[i].setSessionId(message[i * 4 + 3]); |
27 | 28 | String[] extStatus = message[i * 4 + 4].split(","); |
28 | 29 | for (int j = 0; j < extStatus.length; j++) { |