strolch-plc/plc-rest/src/main/java/li/strolch/plc/rest/ws/WebSocketEndpoint.java

36 lines
1.1 KiB
Java

package li.strolch.plc.rest.ws;
import java.util.concurrent.ConcurrentHashMap;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import li.strolch.agent.api.StrolchAgent;
import li.strolch.rest.RestfulStrolchComponent;
@ServerEndpoint("/websocket/plc/observer")
public class WebSocketEndpoint {
private final ConcurrentHashMap<Session, PlcWebSocketClient> clientMap = new ConcurrentHashMap<>();
@OnOpen
public void onOpen(Session session, EndpointConfig config) {
StrolchAgent agent = RestfulStrolchComponent.getInstance().getAgent();
PlcWebSocketClient updateClient = new PlcWebSocketClient(agent, session, config);
this.clientMap.put(session, updateClient);
session.addMessageHandler(updateClient);
}
@OnClose
public void onClose(Session session, CloseReason closeReason) {
PlcWebSocketClient webSocketClient = this.clientMap.remove(session);
if (webSocketClient != null)
webSocketClient.close(closeReason);
}
@OnError
public void onError(Session session, Throwable t) {
PlcWebSocketClient webSocketClient = this.clientMap.get(session);
if (webSocketClient != null)
webSocketClient.onError(t);
}
}