/*
* Copyright (c) 2015. Bearchoke
*/
package com.bearchoke.platform.server.common.web.websocket;
import com.bearchoke.platform.domain.user.document.ActiveWebSocketUser;
import com.bearchoke.platform.domain.user.repositories.ActiveWebSocketUserRepository;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationListener;
import org.springframework.messaging.simp.SimpMessageSendingOperations;
import org.springframework.web.socket.messaging.SessionDisconnectEvent;
@Log4j2
public class WebSocketDisconnectHandler<S> implements ApplicationListener<SessionDisconnectEvent> {
private ActiveWebSocketUserRepository repository;
private SimpMessageSendingOperations messagingTemplate;
public WebSocketDisconnectHandler(SimpMessageSendingOperations messagingTemplate, ActiveWebSocketUserRepository repository) {
super();
this.messagingTemplate = messagingTemplate;
this.repository = repository;
}
@Override
public void onApplicationEvent(SessionDisconnectEvent event) {
if (log.isDebugEnabled()) {
log.debug("Caught Web Socket disconnect event");
}
String id = event.getSessionId();
if (StringUtils.isBlank(id)) {
return;
}
if (log.isDebugEnabled()) {
log.debug("Current web socket session id: " + id);
}
ActiveWebSocketUser user = repository.findUserBySessionId(id);
if (user == null) {
return;
}
repository.delete(user.getId());
// messagingTemplate.convertAndSend("/topic/friends/signout", Arrays.asList(user.getUsername()));
}
}