Example #1
0
  @Override
  public void onApplicationEvent(ApplicationEvent event) {
    if (event instanceof SessionSubscribeEvent) {

      SessionSubscribeEvent connect = (SessionSubscribeEvent) event;
      StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(connect.getMessage());
      HistoryService service = new HistoryService();
      String dest = headerAccessor.getDestination();
      Long diagramId;
      try {
        diagramId = Long.parseLong(dest.substring(dest.lastIndexOf('/') + 1));
        HistorySession session =
            service.insertSession(
                connect.getUser().getName(), diagramId, headerAccessor.getSubscriptionId());
        HistoryModel model =
            new HistoryModel(
                connect.getUser().getName(),
                session.getDiagram().getName(),
                session.getTimeStart(),
                session.getTimeFinish());
        template.convertAndSend("/topic/diagram/" + diagramId + "/history", model);
      } catch (NumberFormatException ex) {
        return;
      }
    } else if (event instanceof SessionUnsubscribeEvent) {
      SessionUnsubscribeEvent connect = (SessionUnsubscribeEvent) event;
      StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(connect.getMessage());
      HistoryService service = new HistoryService();
      List<HistorySession> sessions =
          service.updateSession(connect.getUser().getName(), headerAccessor.getSubscriptionId());
      for (HistorySession session : sessions) {
        HistoryModel model =
            new HistoryModel(
                connect.getUser().getName(),
                session.getDiagram().getName(),
                session.getTimeStart(),
                session.getTimeFinish());
        template.convertAndSend(
            "/topic/diagram/" + session.getDiagram().getDiagramId() + "/history", model);
      }
    }
  }