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(); } } }