Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.primeholding.codish.websocket.eventhandler.impl;
- import com.primeholding.codish.service.cache.PlaygroundCacheService;
- import com.primeholding.codish.websocket.eventhandler.ParticipantEventHandler;
- import com.primeholding.codish.websocket.exception.StompUnauthorizedException;
- import com.primeholding.codish.websocket.model.Participant;
- import com.primeholding.codish.websocket.model.ParticipantType;
- import com.primeholding.codish.websocket.service.ParticipantEventHandlerLocator;
- import lombok.RequiredArgsConstructor;
- import org.modelmapper.ModelMapper;
- import org.springframework.context.event.EventListener;
- import org.springframework.security.authentication.AbstractAuthenticationToken;
- import org.springframework.stereotype.Component;
- import org.springframework.web.socket.messaging.SessionDisconnectEvent;
- import java.security.Principal;
- @Component
- @RequiredArgsConstructor
- public class WebSocketEventHandler {
- private final PlaygroundCacheService playgroundCacheService;
- private final ParticipantEventHandlerLocator participantEventHandlerLocator;
- private final ModelMapper modelMapper;
- @EventListener
- private void onDisconnect(SessionDisconnectEvent disconnectEvent) {
- String sessionId = disconnectEvent.getSessionId();
- String playgroundHashcode = playgroundCacheService.getHashCode(sessionId);
- if (playgroundHashcode.isEmpty()) {
- return;
- }
- Principal token = disconnectEvent.getUser();
- if (!(token instanceof AbstractAuthenticationToken)) {
- throw new StompUnauthorizedException();
- }
- Object principal = ((AbstractAuthenticationToken) token).getPrincipal();
- Participant participant = modelMapper.map(principal, Participant.class);
- ParticipantType participantType = participant.getParticipantType();
- ParticipantEventHandler participantEventHandler = participantEventHandlerLocator.getHandler(participantType);
- participantEventHandler.leave(participant, sessionId, playgroundHashcode);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement