This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/9.0.x by this push:
new be48ff50e7 Improve error handling
be48ff50e7 is described below
commit be48ff50e7858009d309d930adbbc4bba64500ee
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Dec 6 15:06:09 2023 +0000
Improve error handling
---
webapps/docs/changelog.xml | 8 ++++++++
.../classes/websocket/snake/SnakeAnnotation.java | 23 ++++++++++++++--------
2 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 7e02870dd5..17a855e5b1 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -136,6 +136,14 @@
</scode>
</changelog>
</subsection>
+ <subsection name="Web Applications">
+ <changelog>
+ <fix>
+ Examples. Improve the error handling so snakes associated with a user
+ that drops from the network are removed from the game. (markt)
+ </fix>
+ </changelog>
+ </subsection>
<subsection name="Other">
<changelog>
<update>
diff --git
a/webapps/examples/WEB-INF/classes/websocket/snake/SnakeAnnotation.java
b/webapps/examples/WEB-INF/classes/websocket/snake/SnakeAnnotation.java
index c030dbcabe..d3d9700021 100644
--- a/webapps/examples/WEB-INF/classes/websocket/snake/SnakeAnnotation.java
+++ b/webapps/examples/WEB-INF/classes/websocket/snake/SnakeAnnotation.java
@@ -17,7 +17,7 @@
package websocket.snake;
import java.awt.Color;
-import java.io.EOFException;
+import java.io.IOException;
import java.util.Iterator;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
@@ -115,19 +115,26 @@ public class SnakeAnnotation {
@OnError
- public void onError(Throwable t) throws Throwable {
- // Most likely cause is a user closing their browser. Check to see if
- // the root cause is EOF and if it is ignore it.
- // Protect against infinite loops.
+ public void onError(Throwable t, Session session) throws Throwable {
+ /*
+ * Assume all errors are fatal. Close the session and remove the snake
from the game.
+ */
+ session.close();
+ onClose();
+ /*
+ * Correct action depends on root cause. Protect against infinite
loops while looking for root cause.
+ */
int count = 0;
Throwable root = t;
while (root.getCause() != null && count < 20) {
root = root.getCause();
count ++;
}
- if (root instanceof EOFException) {
- // Assume this is triggered by the user closing their browser and
- // ignore it.
+ if (root instanceof IOException) {
+ /*
+ * User going away can present in different ways depending on
their platform and exactly what went wrong.
+ * Assume that any IO issue is some form of the user going away
and ignore it.
+ */
} else {
throw t;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]