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