Changeset 16 for src/main/java/geniusweb/partiesserver/websocket
- Timestamp:
- 06/22/20 16:08:10 (4 years ago)
- Location:
- src/main/java/geniusweb/partiesserver/websocket
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/main/java/geniusweb/partiesserver/websocket/PartySocket.java
r9 r16 44 44 public class PartySocket implements ConnectionEnd<Inform, Action> { 45 45 private final static ObjectMapper jackson = new ObjectMapper(); 46 private static final int MAX_MESSAGE_SIZE = 20 * 1024 * 1024; 47 46 48 private final Reporter log; 47 49 private final RunningPartiesRepo runningparties; 48 50 private final List<Listener<Inform>> listeners = new CopyOnWriteArrayList<Listener<Inform>>(); 49 private static final int MAX_MESSAGE_SIZE = 20 * 1024 * 1024;51 private final ActiveThreads threads; 50 52 51 53 // should all be final, except that we can only set them when start is … … 66 68 this.runningparties = parties; 67 69 this.log = reporter; 70 this.threads = new ActiveThreads(log); 68 71 } 69 72 … … 128 131 throw new IllegalStateException("Unexpected change of session ID"); 129 132 } 133 if (!threads.isEmpty()) { 134 log.log(Level.WARNING, "Party " + partyID 135 + " is still busy with previous message"); 136 } 130 137 Inform info = jackson.readValue(informmessage, Inform.class); 131 138 RunningParty party = runningparties.get(partyID); … … 135 142 log.log(Level.FINE, "Inform " + partyID + ": " + info); 136 143 try { 144 threads.add(); 137 145 party.inform(info); 146 threads.remove(); 138 147 } catch (Throwable e) { 139 log.log(Level.WARNING, "Party failed on inform.", e); 140 e.printStackTrace(); 141 // severe as someone wants to debug that. Not severe for us 142 // we don't use jackson.writeValueAsString(e) here because 143 // CloseReason has 123 char limit. 144 // The error will be too large to fit and will be truncated 145 // therefore we send a plain string and hope that enough 146 // will arrive at the other side (the protocol) 148 threads.remove(); 149 if (e instanceof ThreadDeath) 150 /* 151 * ThreadDeath always prints stacktrace anwyay, stacktrace 152 * is useless because it contains the thrower's stacktrace 153 * instead of a useful message. 154 */ 155 log.log(Level.WARNING, 156 "Party was killed while handling inform."); 157 else 158 log.log(Level.WARNING, "Party failed on inform.", e); 159 /* 160 * severe as someone wants to debug that. Not severe for us we 161 * don't use jackson.writeValueAsString(e) here because 162 * CloseReason has 123 char limit. The error will be too large 163 * to fit and will be truncated therefore we send a plain string 164 * and hope that enough will arrive at the other side (the 165 * protocol) 166 */ 147 167 session.close(new CloseReason( 148 168 CloseReason.CloseCodes.CLOSED_ABNORMALLY, … … 186 206 public void onClose() throws IOException { 187 207 log.log(Level.INFO, "socket closed to " + partyID); 188 /* 189 * for now just kill the party. Maybe we can do something with reconnect 190 * but that will be complex. 191 */ 208 if (!threads.isEmpty()) { 209 log.log(Level.WARNING, "Party " + partyID 210 + " failed to terminate. Trying to kill the remaining threads."); 211 threads.killall(); 212 } 192 213 runningparties.remove(partyID); 193 214 outstream.stop();
Note:
See TracChangeset
for help on using the changeset viewer.