Skip to content

Commit b01bc28

Browse files
author
Hyuntae Son
committed
연결 끊긴 사용자에 대한 예외처리.
1 parent a79ffc8 commit b01bc28

File tree

3 files changed

+68
-28
lines changed

3 files changed

+68
-28
lines changed

omok/gameServer/GameRoom.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,25 @@ public void broadcasting(Protocol data) {
3030
System.out.println("in broadcast : " + data);
3131
LogFrame.print("in broadcast : " + data);
3232

33-
for (GameServer temp : userList.getCollection(number))
34-
if (!(temp.getUserLocation() == ServerInterface.LOBBY))
35-
temp.sendMessage(data);
33+
for (GameServer temp : userList.getCollection(number)) {
34+
if (!(temp.getUserLocation() == ServerInterface.LOBBY)) {
35+
try {
36+
temp.sendMessage(data);
37+
} catch (Exception e) {
38+
userList.subUser( temp );
39+
System.out.println( temp.getName() + "의 연결을 끊었습니다." );
40+
}
41+
}
42+
}
3643
}
3744

3845
public void sendSlip(ChatData data) {
39-
userList.get(data.getReceiver()).sendMessage(data);
46+
try {
47+
userList.get(data.getReceiver()).sendMessage(data);
48+
} catch (Exception e) {
49+
userList.subUser( data.getReceiver() );
50+
System.out.println( "의 연결을 끊었습니다." );
51+
}
4052
}
4153

4254
public int getNumber() {
@@ -110,7 +122,11 @@ public boolean isAllReady() {
110122

111123
public void sendTo(int toGamer, Protocol data) {
112124
GameServer reciver = find(userList.getCollection(number), toGamer);
113-
reciver.sendMessage(data);
125+
try {
126+
reciver.sendMessage(data);
127+
} catch (Exception e) {
128+
e.printStackTrace();
129+
}
114130

115131
}
116132

omok/gameServer/GameServer.java

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.io.IOException;
55
import java.io.ObjectInputStream;
66
import java.io.ObjectOutputStream;
7-
import java.io.StreamCorruptedException;
87
import java.net.Socket;
98
import java.net.SocketException;
109
import java.util.Vector;
@@ -52,17 +51,17 @@ public GameServer(Socket socket, LobbyInterface lobby) {
5251
out = new ObjectOutputStream(socket.getOutputStream());
5352
} catch (IOException e) {
5453
//e.printStackTrace();
55-
System.out.println("--");
54+
System.out.println("-- ["+name+"]");
5655
lobby.subSocket(name);
57-
return;
58-
} finally {
56+
5957
if( this.socket != null) {
6058
try {
6159
this.socket.close();
62-
} catch (IOException e) {
63-
e.printStackTrace();
60+
} catch (IOException e1) {
61+
e1.printStackTrace();
6462
}
6563
}
64+
return;
6665
}
6766

6867
this.start();
@@ -97,15 +96,7 @@ public void run() {
9796
e.printStackTrace();
9897
break;
9998

100-
} finally {
101-
if( this.socket != null) {
102-
try {
103-
this.socket.close();
104-
} catch (IOException e) {
105-
e.printStackTrace();
106-
}
107-
}
108-
}
99+
}
109100

110101
if (data instanceof ChatData)
111102
analysisChatData((ChatData) data);
@@ -129,11 +120,16 @@ else if (data instanceof GameData)
129120

130121
}
131122

132-
protected void sendMessage(Protocol data) {
123+
protected void sendMessage(Protocol data) throws Exception {
133124
try {
134125
out.writeObject(data);
126+
} catch ( NullPointerException e ) {
127+
System.out.println("연결이 끊긴 사용자 입니다.");
128+
throw new Exception("사용자 연결이 끊겼습니다. NullPointerException!! ");
135129
} catch (IOException e) {
136130
e.printStackTrace();
131+
System.out.println("연결이 끊긴 사용자 입니다.");
132+
throw new Exception("사용자 연결이 끊겼습니다. " + e );
137133
}
138134
}
139135

@@ -173,7 +169,12 @@ private void analysisChatData(ChatData data) {
173169
break;
174170

175171
case ChatData.LOGIN_CHECK:
176-
sendMessage(data);
172+
try {
173+
sendMessage(data);
174+
} catch (Exception e) {
175+
// Null 예외처리
176+
e.printStackTrace();
177+
}
177178

178179
case ChatData.EXIT:
179180
/*
@@ -218,7 +219,11 @@ private void analysisChatData(ChatData data) {
218219
list.add(temp.getUserName());
219220

220221
data.setUserList(list);
221-
sendMessage(data);
222+
try {
223+
sendMessage(data);
224+
} catch (Exception e) {
225+
e.printStackTrace();
226+
}
222227

223228
break;
224229

@@ -291,7 +296,11 @@ private void analysisLobbyData(LobbyData data) {
291296
setRoomInstance(room);
292297

293298
data.setRoomNumber(roomNumber);
294-
sendMessage(data);
299+
try {
300+
sendMessage(data);
301+
} catch (Exception e) {
302+
e.printStackTrace();
303+
}
295304

296305
break;
297306

@@ -313,15 +322,22 @@ private void analysisLobbyData(LobbyData data) {
313322
data.setUserList(room.getStringUser());
314323
data.setRoomNumber(roomNumber);
315324

316-
sendMessage(data);
325+
try {
326+
sendMessage(data);
327+
} catch (Exception e) {
328+
e.printStackTrace();
329+
}
317330
room.sendTo(ServerInterface.IN_GAME_ROOMKING, data);
318331
sendUserList();
319332

320333
} else {
321334
room = null;
322335

323-
sendMessage(new ChatData("알림", "이방은 들어갈수 없습니다.",
324-
ChatData.MESSAGE));
336+
try {
337+
sendMessage(new ChatData("알림", "이방은 들어갈수 없습니다.", ChatData.MESSAGE));
338+
} catch (Exception e) {
339+
e.printStackTrace();
340+
}
325341
}
326342

327343
break;

omok/gameServer/Lobby.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,13 @@ public void broadcasting(Protocol data) {
2121

2222
for (GameServer temp : userList.getCollection())
2323
if(temp.getUserLocation() == ServerInterface.LOBBY) {
24+
try {
2425
temp.sendMessage(data);
26+
} catch (Exception e) {
27+
// Null 예외처리
28+
userList.subUser( temp );
29+
System.out.println(temp.getUserName() + "을 연결을 해제 하였습니다.");
30+
}
2531
}
2632
}
2733

@@ -34,9 +40,11 @@ public void sendSlip(ChatData data) {
3440
LogFrame.print("in sendSlip : " + data.getReceiver());
3541
try {
3642
userList.get(data.getReceiver()).sendMessage(data);
37-
} catch(NullPointerException e) {
43+
} catch(Exception e) {
3844
System.out.println("[Throw] Send Slip Exception~!!!");
3945
LogFrame.print("[Throw] Send Slip Exception~!!!");
46+
47+
userList.subUser( data.getReceiver() );
4048
}
4149

4250
}

0 commit comments

Comments
 (0)