• R/O
  • SSH
  • HTTPS

chaplet: 提交


Commit MetaInfo

修訂38 (tree)
時間2007-07-12 22:57:54
作者koe

Log Message

ログアウトしたユーザがユーザ一覧に残るバグを修正

Change Summary

差異

--- chaplet/trunk/src/core/jp/sf/chaplet/core/server/ChatServer.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/server/ChatServer.java (revision 38)
@@ -195,7 +195,7 @@
195195 message[0] = "status";
196196 for (int i = 0; i < users.length; i++) {
197197 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" : "-";
199199 message[i * 4 + 3] = users[i].getSessionId();
200200 if(primaryPlugin != null){
201201 message[i * 4 + 4] = primaryPlugin.getUserStatus(users[i]);
@@ -230,9 +230,9 @@
230230 * @param proxy プロキシ
231231 * @return
232232 */
233- public boolean removeProxy(ClientProxy proxy) {
233+ public boolean removeProxy(ClientProxy proxy, boolean isAccident) {
234234 if( proxyList.remove(proxy) ){
235- userManager.logout(proxy.getSessionId());
235+ userManager.logout(proxy.getSessionId(), isAccident);
236236 sendStatus();
237237 return true;
238238 } else {
@@ -268,7 +268,7 @@
268268
269269 if(result == ActionResult.DISCONNECT){
270270 proxyList.remove(proxy);
271- userManager.logout(proxy.getSessionId());
271+ userManager.logout(proxy.getSessionId(), false);
272272 proxy.sendDisconnect();
273273 sendLog(lines);
274274 sendStatus();
--- chaplet/trunk/src/core/jp/sf/chaplet/core/server/WritingServerAction.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/server/WritingServerAction.java (revision 38)
@@ -21,7 +21,7 @@
2121 */
2222 public ActionResult execute(String[] request, ClientProxy proxy)
2323 throws IOException {
24- User user = getUserManager().getUserBySessionId(proxy.getSessionId());
24+ User user = getUserManager().getUser(proxy.getSessionId());
2525 user.setWriting(request[1].equals("y"));
2626 if(request.length == 3){
2727 user.setAlias(request[2]);
--- chaplet/trunk/src/core/jp/sf/chaplet/core/server/UserManager.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/server/UserManager.java (revision 38)
@@ -11,7 +11,7 @@
1111 /**
1212 * UserManager
1313 *
14- * @author 石井孝衛
14+ * @author koe
1515 * @version $Id$
1616 */
1717 public class UserManager {
@@ -20,7 +20,7 @@
2020 private ArrayList<User> userList = new ArrayList<User>();
2121
2222 public String login(String sessionId, String name){
23- User user = getUserBySessionId(sessionId);
23+ User user = getUser(sessionId);
2424 if(user == null){
2525 if(!sessionId.equals(masterId)){
2626 sessionId = UUID.randomUUID().toString();
@@ -35,16 +35,20 @@
3535 }
3636 }
3737
38- public void logout(String account){
38+ public void logout(String sessionId, boolean isAccident){
3939 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+ }
4347 }
4448 }
4549 }
4650
47- public User getUserBySessionId(String sessionId){
51+ public User getUser(String sessionId){
4852 if(sessionId == null || sessionId.length() == 0){
4953 return null;
5054 }
@@ -56,15 +60,6 @@
5660 }
5761 return null;
5862 }
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- }
6863
6964 public User[] getAllUsers(){
7065 return userList.toArray(new User[userList.size()]);
--- chaplet/trunk/src/core/jp/sf/chaplet/core/server/User.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/server/User.java (revision 38)
@@ -116,4 +116,24 @@
116116 public void setAlive(boolean alive) {
117117 this.alive = alive;
118118 }
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+ }
119139 }
--- chaplet/trunk/src/core/jp/sf/chaplet/core/server/ClientProxy.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/server/ClientProxy.java (revision 38)
@@ -139,7 +139,7 @@
139139 // log.error("recieveLoop", e);
140140 }
141141 }
142- server.removeProxy(this);
142+ server.removeProxy(this, true);
143143 try{
144144 destroy();
145145 } catch(IOException e){
@@ -182,7 +182,7 @@
182182 writer.flush();
183183 } catch (Exception e) {
184184 logger.log(Level.SEVERE, request[0], e);
185- server.removeProxy(this);
185+ server.removeProxy(this, true);
186186 return;
187187 // log.error(request[0], e);
188188 }
--- chaplet/trunk/src/core/jp/sf/chaplet/core/ui/UserTableModel.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/ui/UserTableModel.java (revision 38)
@@ -82,7 +82,7 @@
8282 if(columnIndex == 0){
8383 return user.getName();
8484 } else if(columnIndex == 1){
85- return user.isWriting() ? "φ" : "";
85+ return user.isWriting() ? "φ" : !user.isActive() ? "×" : "";
8686 } else {
8787 if(user.getStatus().size() == 0){
8888 return "";
--- chaplet/trunk/src/core/jp/sf/chaplet/core/ui/ConnectDialog.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/ui/ConnectDialog.java (revision 38)
@@ -97,7 +97,7 @@
9797 */
9898 @SuppressWarnings("unchecked")
9999 private void initialize() {
100- this.setSize(363, 200);
100+ this.setSize(363, 220);
101101 this.setTitle("接続設定");
102102 this.setContentPane(getJContentPane());
103103 addressList = (List<ServerAddress>) StorageUtils.load("server.xml", ArrayList.class);
@@ -280,7 +280,7 @@
280280 }
281281 }
282282 sessionList.add(0, session);
283- if(sessionList.size() > 7){
283+ for(int i = 7; i < sessionList.size(); i++){
284284 sessionList.remove(7);
285285 }
286286 StorageUtils.save(sessionList, StorageUtils.SESSION);
--- chaplet/trunk/src/core/jp/sf/chaplet/core/client/LoginAction.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/client/LoginAction.java (revision 38)
@@ -30,6 +30,10 @@
3030 Session session = null;
3131 if(sessionList.size() == 0){
3232 session = new Session();
33+ sessionList.add(session);
34+ for(int i = 7; i < sessionList.size(); i++){
35+ sessionList.remove(7);
36+ }
3337 } else {
3438 session = sessionList.get(0);
3539 }
--- chaplet/trunk/src/core/jp/sf/chaplet/core/client/ChatClient.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/client/ChatClient.java (revision 38)
@@ -250,6 +250,7 @@
250250 }
251251
252252 public void connectionClosed() {
253+ showStatus(new UserStatus[0]);
253254 view.setStatus("");
254255 view.setMessage("サーバとの接続を閉じました。");
255256 view.setLoginOK(false);
@@ -644,7 +645,7 @@
644645 session = new Session();
645646 session.setSessionId(UUID.randomUUID().toString());
646647 sessionList.add(0, session);
647- if(sessionList.size() > 7){
648+ for(int i = 7; i < sessionList.size(); i++){
648649 sessionList.remove(7);
649650 }
650651 }
--- chaplet/trunk/src/core/jp/sf/chaplet/core/client/StatusAction.java (revision 37)
+++ chaplet/trunk/src/core/jp/sf/chaplet/core/client/StatusAction.java (revision 38)
@@ -23,6 +23,7 @@
2323 status[i] = new UserStatus();
2424 status[i].setName(message[i * 4 + 1]);
2525 status[i].setWriting(message[i * 4 + 2].equals("y"));
26+ status[i].setActive(!message[i * 4 + 2].equals("-"));
2627 status[i].setSessionId(message[i * 4 + 3]);
2728 String[] extStatus = message[i * 4 + 4].split(",");
2829 for (int j = 0; j < extStatus.length; j++) {
Show on old repository browser