Skip to content

Commit f107ad2

Browse files
committed
Merge pull request #210 from marschall/ConcurrentModificationException
Clean up Whiteboard Sample
2 parents b0236e8 + 15ed0fa commit f107ad2

File tree

3 files changed

+32
-14
lines changed

3 files changed

+32
-14
lines changed

websocket/whiteboard/src/main/java/org/javaee7/websocket/whiteboard/FigureDecoder.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
package org.javaee7.websocket.whiteboard;
4141

4242
import java.io.StringReader;
43+
import java.lang.invoke.MethodHandles;
44+
import java.util.logging.Logger;
45+
4346
import javax.json.Json;
4447
import javax.json.JsonException;
4548
import javax.json.JsonObject;
@@ -51,9 +54,12 @@
5154
* @author Arun Gupta
5255
*/
5356
public class FigureDecoder implements Decoder.Text<Figure> {
57+
58+
private static final Logger LOGGER = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
59+
5460
@Override
5561
public Figure decode(String string) throws DecodeException {
56-
System.out.println("decoding: " + string);
62+
LOGGER.info("decoding: " + string);
5763
JsonObject jsonObject = Json.createReader(new StringReader(string)).readObject();
5864
return new Figure(jsonObject);
5965
}
@@ -71,11 +77,11 @@ public boolean willDecode(String string) {
7177

7278
@Override
7379
public void init(EndpointConfig ec) {
74-
System.out.println("init");
80+
LOGGER.info("init");
7581
}
7682

7783
@Override
7884
public void destroy() {
79-
System.out.println("desroy");
85+
LOGGER.info("destroy");
8086
}
8187
}

websocket/whiteboard/src/main/java/org/javaee7/websocket/whiteboard/FigureEncoder.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
*/
4040
package org.javaee7.websocket.whiteboard;
4141

42+
import java.lang.invoke.MethodHandles;
43+
import java.util.logging.Logger;
44+
4245
import javax.websocket.EncodeException;
4346
import javax.websocket.Encoder;
4447
import javax.websocket.EndpointConfig;
@@ -47,18 +50,21 @@
4750
* @author Arun Gupta
4851
*/
4952
public class FigureEncoder implements Encoder.Text<Figure> {
53+
54+
private static final Logger LOGGER = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
55+
5056
@Override
5157
public String encode(Figure figure) throws EncodeException {
5258
return figure.getJson().toString();
5359
}
5460

5561
@Override
5662
public void init(EndpointConfig ec) {
57-
System.out.println("init");
63+
LOGGER.info("init");
5864
}
5965

6066
@Override
6167
public void destroy() {
62-
System.out.println("desroy");
68+
LOGGER.info("destroy");
6369
}
6470
}

websocket/whiteboard/src/main/java/org/javaee7/websocket/whiteboard/Whiteboard.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@
4040
package org.javaee7.websocket.whiteboard;
4141

4242
import java.io.IOException;
43+
import java.lang.invoke.MethodHandles;
4344
import java.nio.ByteBuffer;
44-
import java.util.Collections;
45-
import java.util.HashSet;
46-
import java.util.Set;
45+
import java.util.concurrent.ConcurrentHashMap;
46+
import java.util.concurrent.ConcurrentMap;
47+
import java.util.logging.Logger;
48+
4749
import javax.websocket.EncodeException;
4850
import javax.websocket.OnClose;
4951
import javax.websocket.OnMessage;
@@ -59,11 +61,15 @@
5961
decoders = {FigureDecoder.class})
6062
public class Whiteboard {
6163

62-
private static final Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>());
64+
private static final Logger LOGGER = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
65+
66+
private static final Object PRESENT = new Object();
67+
68+
private static final ConcurrentMap<Session, Object> peers = new ConcurrentHashMap<>();
6369

6470
@OnOpen
6571
public void onOpen(Session peer) {
66-
peers.add(peer);
72+
peers.put(peer, PRESENT);
6773
}
6874

6975
@OnClose
@@ -73,8 +79,8 @@ public void onClose(Session peer) {
7379

7480
@OnMessage
7581
public void broadcastFigure(Figure figure, Session session) throws IOException, EncodeException {
76-
System.out.println("boradcastFigure: " + figure);
77-
for (Session peer : peers) {
82+
LOGGER.info("boradcastFigure: " + figure);
83+
for (Session peer : peers.keySet()) {
7884
if (!peer.equals(session)) {
7985
peer.getBasicRemote().sendObject(figure);
8086
}
@@ -83,8 +89,8 @@ public void broadcastFigure(Figure figure, Session session) throws IOException,
8389

8490
@OnMessage
8591
public void broadcastSnapshot(ByteBuffer data, Session session) throws IOException {
86-
System.out.println("broadcastBinary: " + data);
87-
for (Session peer : peers) {
92+
LOGGER.info("broadcastBinary: " + data);
93+
for (Session peer : peers.keySet()) {
8894
if (!peer.equals(session)) {
8995
peer.getBasicRemote().sendBinary(data);
9096
}

0 commit comments

Comments
 (0)