You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/11/20 14:52:32 UTC
svn commit: r1543816 -
/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatAnnotation.java
Author: markt
Date: Wed Nov 20 13:52:31 2013
New Revision: 1543816
URL: http://svn.apache.org/r1543816
Log:
Implement the restriction required by the JSR356 specification that only one message can be written to a remote endpoint at a time.
Modified:
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatAnnotation.java
Modified: tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatAnnotation.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatAnnotation.java?rev=1543816&r1=1543815&r2=1543816&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatAnnotation.java (original)
+++ tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatAnnotation.java Wed Nov 20 13:52:31 2013
@@ -22,16 +22,22 @@ import java.util.concurrent.CopyOnWriteA
import java.util.concurrent.atomic.AtomicInteger;
import javax.websocket.OnClose;
+import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
+
import util.HTMLFilter;
@ServerEndpoint(value = "/websocket/chat")
public class ChatAnnotation {
+ private static final Log log = LogFactory.getLog(ChatAnnotation.class);
+
private static final String GUEST_PREFIX = "Guest";
private static final AtomicInteger connectionIds = new AtomicInteger(0);
private static final Set<ChatAnnotation> connections =
@@ -72,11 +78,22 @@ public class ChatAnnotation {
}
+
+
+ @OnError
+ public void onError(Throwable t) throws Throwable {
+ log.error("Chat Error: " + t.toString(), t);
+ }
+
+
private static void broadcast(String msg) {
for (ChatAnnotation client : connections) {
try {
- client.session.getBasicRemote().sendText(msg);
+ synchronized (client) {
+ client.session.getBasicRemote().sendText(msg);
+ }
} catch (IOException e) {
+ log.debug("Chat Error: Failed to send message to client", e);
connections.remove(client);
try {
client.session.close();
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org