2017-01-25 13 views
0

jhipster 3.12.2でプロジェクトを生成しましたが、dbに保存した後、コントローラからWebSocketを介してアラームメッセージを送信しようとしています。 RestControllerは、jhipsterフロントエンド(新しいエンティティの作成)から呼び出すことも、HTTP POSTを送信するモバイルアプリケーションから呼び出すこともできます。保存した後、コントローラから送信された新しいメッセージを受信して​​いないクライアント

私のクライアント(イオンと角で生成されたモバイルアプリケーション)は何らかの理由で新しいメッセージを受信して​​いません。私のコードに何が問題なのですか?

@RestController 
@RequestMapping("/api") 
public class AlarmResource { 

private final Logger log = LoggerFactory.getLogger(AlarmResource.class); 

@Inject 
private AlarmService alarmService; 

@Inject 
SimpMessageSendingOperations messagingTemplate; 

@PostMapping(value = "/alarms") 
@Timed 
@CrossOrigin 
@Secured({AuthoritiesConstants.ALARM, AuthoritiesConstants.ADMIN, AuthoritiesConstants.EDITOR}) 
public ResponseEntity<Alarm> createAlarm(@RequestBody Alarm alarm) throws URISyntaxException { 
    log.debug("REST request to save Alarm : {}", alarm); 
    if (alarm.getId() != null) { 
     return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert("alarm", "idexists", "A new alarm cannot already have an ID")).body(null); 
    } 
    if(alarm.getTimestamp_ms() == null) { 
     BigDecimal now = new BigDecimal(System.currentTimeMillis()); 
     alarm.setTimestamp_ms(now); 
    } 
    Alarm result = alarmService.save(alarm); 

    System.out.println("Sending ne alarm message"); 
    String dest = "/topic/alarmactivity"; 
    messagingTemplate.convertAndSend(dest, result); 


    return ResponseEntity.created(new URI("/api/alarms/" + result.getId())) 
     .headers(HeaderUtil.createEntityCreationAlert("alarm", result.getId().toString())) 
     .body(result); 
} 

AlarmMessageService:クライアント側で

@Controller 
public class AlarmMessageService { 

private static final Logger log = LoggerFactory.getLogger(AlarmMessageService.class); 


private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 

@SubscribeMapping("/topic/alarmactivity") 
@SendTo("/topic/alarmtracker") 
public Alarm sendAlarm(@Payload Alarm newAlarm, StompHeaderAccessor stompHeaderAccessor, Principal principal) { 
    log.debug("Sending user tracking data {}", newAlarm); 
    return newAlarm; 
} 
} 

とトラッカー-service.js:

(function() { 
'use strict'; 
/* globals SockJS, Stomp */ 

angular 
    .module('exampleApp') 
    .factory('ExAlarmTrackerService', ExAlarmTrackerService); 

ExAlarmTrackerService.$inject = ['$rootScope', '$window', '$localStorage', '$http', 'API_URL','$q', 'AuthServerProvider', '$stomp']; 

function ExAlarmTrackerService ($rootScope, $window, $localStorage, $http, API_URL, $q, AuthServerProvider, $stomp) { 

    var stompClient = null; 
    var subscriber = null; 
    var listener = $q.defer(); 
    var connected = $q.defer(); 
    var alreadyConnectedOnce = false; 

    var service = { 
     connect: connect, 
     disconnect: disconnect, 
     receive: receive, 
     sendActivity: sendActivity, 
     subscribe: subscribe, 
     unsubscribe: unsubscribe 
    }; 

    return service; 

    function connect() { 
     //building absolute path so that websocket doesnt fail when deploying with a context path 
     var loc = $window.location; 
     var url = API_URL + 'websocket/tracker'; 
     var authToken = AuthServerProvider.getToken(); 
     if(authToken){ 
      url += '?access_token=' + authToken; 
     } 
     var socket = new SockJS(url); 
     stompClient = Stomp.over(socket); 
     var stateChangeStart; 
     var headers = {}; 
     stompClient.connect(headers, function() { 
      connected.resolve('success'); 
      //sendActivity(); 
      if (!alreadyConnectedOnce) { 
       stateChangeStart = $rootScope.$on('$stateChangeStart', function() { 
        //sendActivity(); 
        console.log("statechange"); 
       }); 
       alreadyConnectedOnce = true; 
      } 
     }); 
     $rootScope.$on('$destroy', function() { 
      if(angular.isDefined(stateChangeStart) && stateChangeStart !== null){ 
       stateChangeStart(); 
      } 
     }); 
    } 

    function disconnect() { 
     if (stompClient !== null) { 
      stompClient.disconnect(); 
      stompClient = null; 
     } 
    } 

    function receive() { 
     return listener.promise; 
    } 

    function sendActivity() { 
     if (stompClient !== null && stompClient.connected) { 
      stompClient 
       .send('/topic/activity', 
       {}, 
       angular.toJson({'page': $rootScope.toState.name})); 
     } 
    } 

    function subscribe() { 
     connected.promise.then(function() { 
      subscriber = stompClient.subscribe('/topic/alarmtracker', function(data) { 
       listener.notify(angular.fromJson(data.body)); 
      }); 
     }, null, null); 
    } 

    function unsubscribe() { 
     if (subscriber !== null) { 
      subscriber.unsubscribe(); 
     } 
     listener = $q.defer(); 
    } 


} 
})(); 

そして、私のcontroller.js中:

ExAlarmTrackerService.receive().then(null, null, function(activity) { 
    console.log(activity); 
}); 

答えて

0

私の携帯アプリケーションはriに接続していませんでしたghtのパス、それですべてがうまくいったことを修正した後。

関連する問題