package com.ntlab.irisserver.websockets;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
// 5秒に1回HelloWorldを送るデモ
@ServerEndpoint("/hello-websocket")
public class HelloWebSocket {
private static final Queue<Session> sessions = new ConcurrentLinkedQueue<>();
static {
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay(HelloWebSocket::broadcast, 5, 5, TimeUnit.SECONDS);
}
@OnMessage
public String onMessage(String message) {
System.out.println("WebSocketで受信したメッセージ/ " + message);
return "WebSocketでメッセージを正常に受信しました!";
}
@OnError
public void onError(Throwable th) {
System.out.println("WebSocketエラーが発生/ " + th.getMessage());
}
@OnOpen
public void onOpen(Session session) {
System.out.println("WebSocketセッション確立");
sessions.add(session);
}
@OnClose
public void onClose(Session session) {
System.out.println("WebSocketセッション終了");
sessions.remove(session);
}
public static void broadcast() {
Date now = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
// sessions.forEach(session -> {
// session.getAsyncRemote().sendText("HelloWorld! : " + formatter.format(now));
// });
}
}