import { Injectable } from '@angular/core'; declare let $:any; @Injectable() export class CometdService { cometd_instance; cometd_listener; cometd_subcription; callback:any; constructor() { } setStatusChangedCallback(callback){ this.callback = callback; } public run_cometd(self){ if(this.callback==undefined){ return; } this.cometd_instance = new $.Cometd(); //第一步 //配置須要監聽的cometd服務器地址,具體決定於你須要監聽的cometd消息。 let cometdURL = location.protocol + "//" + location.host +"/cometd/cometd.msg"; this.cometd_instance.configure({ url: cometdURL, logLevel: 'info', connectTimeout: 3000 }); //第二步 //添加握手後回調方法,握手成功的話,添加事件訂閱處理 this.cometd_listener = this.cometd_instance.addListener('/meta/handshake', (message: any) => { if (message.successful) { console.log('cometd,topo addListener successful'); this.cometd_instance.batch(() => { this.subscribeStatusChanged(this.callback,self); }); } }); //握手 this.cometd_instance.handshake(); } //第三步 //訂閱關心的事件,此處是/statusChange/xxx,具體決定於服務器端發送的值。 private subscribeStatusChanged(callback,self) { this.cometd_subcription = this.cometd_instance.subscribe('/statusChange/xxx', (message: any) => { console.log('get message: ', JSON.stringify(message)); callback.call(self, message); }); } // private close(){ public close(){ if (this.cometd_subcription) { this.cometd_instance.unsubscribe(this.cometd_subcription); this.cometd_subcription = null; } if (this.cometd_listener) { this.cometd_instance.removeListener(this.cometd_listener); this.cometd_listener = null; } if (this.cometd_instance) { //this.cometd_instance.reload(); this.cometd_instance.getTransport().abort(); this.cometd_instance.disconnect(); } } }