/* * 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.lang.StringUtils; import org.springframework.context.ApplicationListener; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.messaging.simp.SimpMessageSendingOperations; import org.springframework.web.socket.messaging.SessionConnectEvent; import java.security.Principal; import java.util.Calendar; @Log4j2 public class WebSocketConnectHandler<S> implements ApplicationListener<SessionConnectEvent> { private ActiveWebSocketUserRepository repository; private SimpMessageSendingOperations messagingTemplate; public WebSocketConnectHandler(SimpMessageSendingOperations messagingTemplate, ActiveWebSocketUserRepository repository) { super(); this.messagingTemplate = messagingTemplate; this.repository = repository; } @Override public void onApplicationEvent(SessionConnectEvent event) { if (log.isDebugEnabled()) { log.debug("Caught Web Socket connect event"); } MessageHeaders headers = event.getMessage().getHeaders(); Principal user = SimpMessageHeaderAccessor.getUser(headers); if(user == null) { return; } String id = SimpMessageHeaderAccessor.getSessionId(headers); if (log.isDebugEnabled()) { log.debug("Current web socket session id: " + id); } if (StringUtils.isNotBlank(id)) { repository.save(new ActiveWebSocketUser(id, user.getName(), Calendar.getInstance())); } // messagingTemplate.convertAndSend("/topic/friends/signin", Arrays.asList(user.getName())); } }