Newer
Older
WebSocketServerSample / src / main / java / com / example / MiniServerApp04WebSocket04 / resources / WebSocketDemo.java
Kota on 8 Dec 2022 2 KB initial commit
  1. package com.example.MiniServerApp04WebSocket04.resources;
  2. import javax.websocket.*;
  3. import javax.websocket.server.ServerEndpoint;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.Queue;
  7. import java.util.concurrent.ConcurrentLinkedQueue;
  8. import java.util.concurrent.Executors;
  9. import java.util.concurrent.ScheduledExecutorService;
  10. import java.util.concurrent.TimeUnit;
  11.  
  12. /*
  13. 下の3種類のをサンプルで用意しており、このファイルは「1」のサンプル。
  14. 5秒に1回現在時刻をクライアントに送信するサンプルプログラム。
  15. 1.http://localhost:8080/WebSocketDemo,
  16. 2.http://localhost:8080/WebSocketDemoJSON
  17. 3.http://localhost:8080/WebSocketDemoPathParam,
  18. */
  19.  
  20. @ServerEndpoint("/WebSocketDemo")
  21. public class WebSocketDemo {
  22. private static final Queue<Session> sessions = new ConcurrentLinkedQueue<>();
  23.  
  24. static {
  25. ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
  26. service.scheduleWithFixedDelay(WebSocketDemo::broadcast, 5, 5, TimeUnit.SECONDS);
  27. }
  28.  
  29. @OnMessage
  30. public String onMessage(String message) {
  31. System.out.println("WebSocketで受信したメッセージ/ " + message);
  32. return "WebSocketでメッセージを正常に受信しました!";
  33. }
  34.  
  35. @OnError
  36. public void onError(Throwable th) {
  37. System.out.println("WebSocketエラーが発生/ " + th.getMessage());
  38. }
  39.  
  40. @OnOpen
  41. public void onOpen(Session session) {
  42. System.out.println("WebSocketセッション確立");
  43. sessions.add(session);
  44. }
  45.  
  46. @OnClose
  47. public void onClose(Session session) {
  48. System.out.println("WebSocketセッション終了");
  49. sessions.remove(session);
  50. }
  51.  
  52. public static void broadcast() {
  53. Date now = new Date();
  54. SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  55.  
  56. sessions.forEach(session -> {
  57. session.getAsyncRemote().sendText("Broadcast : " + formatter.format(now));
  58. });
  59. }
  60.  
  61. }