Создание нескольких чатов в AbstractWebSocketHandler при ловке через WebSocketConfigurer

У меня есть WebSocket который получает сообщение и отправляет его всем подписанным пользователям

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    private final MessageRepo messageRepo;

    @Autowired
    public WebSocketConfig(MessageRepo messageRepo) {
        this.messageRepo = messageRepo;
    }

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(WebSocketHandler.getWebSocketHandler(messageRepo),"/messages-update");
    }


}


public class WebSocketHandler extends AbstractWebSocketHandler {

    private static WebSocketHandler webSocketHandler;
    private MessageRepo messageRepo;
    private JsonAdapter<SendMessage> adapter;
   // private JsonAdapter<Message> adapterMessage;
    private Set<WebSocketSession> clients;

    public WebSocketHandler(MessageRepo messageRepo) {
        this.messageRepo = messageRepo;

        Moshi moshi = new Moshi.Builder()
                .add(new DataAdapter())
                .build();
        adapter = moshi.adapter(SendMessage.class);
        clients = new HashSet<>();
    }

        public static WebSocketHandler getWebSocketHandler(MessageRepo messageRepo)
        {
            if (webSocketHandler == null)
            {
               webSocketHandler = new WebSocketHandler(messageRepo);
            }
            return webSocketHandler;
        }
    
        @Override
        public void afterConnectionEstablished(WebSocketSession session) throws Exception {
            super.afterConnectionEstablished(session);
                clients.add(session);
        }
    
        @Override
        public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
            super.afterConnectionClosed(session, status);
                clients.remove(session);
        }
    
        @Override
        protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            SendMessage messagePayload = adapter.fromJson(message.getPayload());
            if (messagePayload == null) return;
            Message messageModel = messagePayload.getMessage();
            synchronized (this) {
            if (messagePayload.getSendId() == 1) {
                    messageModel.setDateTime(LocalDateTime.now());
                    messageRepo.save(messageModel);
                    send(messagePayload);
                }
            else if (messagePayload.getSendId() == 2) {
                   messageRepo.save(messageModel);
                }
            else if (messagePayload.getSendId() == 3) {
                  messageRepo.delete(messageModel);
                }
                send(messagePayload);
            }
        }
    
        void send(SendMessage message)
        {
            clients.forEach(it ->
            {
                try {
                    it.sendMessage(new TextMessage(adapter.toJson(message)));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }
    
        @Override
        public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
            session.sendMessage(new TextMessage(exception.getMessage()));
        }
    }

Так сказать, у меня есть общий чат, но я хочу сделать индивидуальный для определенной группы пользователей, Не использую подход со STORM, потому что приложение под Android, а он его не официальной библиотеки для его поддержки нет


Ответы (0 шт):