Создать несколько Jabber Client Echo Bot - PullRequest
0 голосов
/ 06 октября 2018

Hai Stackoverflowers, Я пробовал так много способов, чтобы решить мою проблему, и в итоге я получил стек через поток

Язык программирования: Машинопись

мои главные цели: создать клиентский класс столько, сколько я хочу, и может включать и выключать клиент, клиент будет как бот, который отображает текст из списка друзей

Я используюnode-xmpp-client Библиотека: https://github.com/chris-rock/node-xmpp-client

Мой код:

import * as Client from 'node-xmpp-client'; // Jabber Helper

export class TerminalJabber {
  private ter;
  private client;

  constructor(ter: any) {
    this.ter = ter;
    this.client = new Client({
      jid: this.ter.settings.username,
      password: this.ter.settings.password,
    });
  }

  public turnOn(){
    // Turn on Jabber
    this.client.on('online', () => {
      console.log('online');
      const stanza = new Client.Element('presence', { })
         .c('show').t('chat').up()
         .c('status').t('Happily echoing your <message/> stanzas');
      this.client.send(stanza);
    });

    this.client.on('stanza', (stanza) => {
      // Message come here and will echo from here
    });

     // Catch error
     this.client.on('error', (e) => {
       console.log('------>', e);
     });
  }
  // Turn Off Jabber
  public turnOff () {
    // Turn Off Jabber
    this.client.end();
    return true;
  }
}

Проблема в том, Бот может запуститься, ноникогда не будет отключаться, когда я вызываю новый класс и turnOn () и turnOff ().

Как я вызываю мой код: // Hit URL / turnOn /: terId

// Hit URL
app.router.get(/turnOn/:id, turnOnController); // for turn On
app.router.get(/turnOff/:id, turnOfController); // for turn Off

TurnOnController(){
  // Get data from database using id
  const data = Query ~ ;
  const terminal = new TerminalId(data)
  terminal.turnOn();
}

TurnOffController(){
// Get data from database using id
  const data = Query ~ ;
  const terminal = new TerminalID(data)
  terminal.turnOff();
}

Может быть, у вас есть решение моих проблем?Я думал и читал так много постов о xmpp, но я не могу решить эту проблему,

Пожалуйста, помогите

искренне, Спасибо

1 Ответ

0 голосов
/ 06 октября 2018

Вам нужно вызвать метод turnOff для экземпляра terminal, прежде чем создавать новый.Это также означает, что вам необходимо иметь доступ к экземпляру с обоих контроллеров.

var terminals = {};

function turnOnController(){

    var id = getIdSomehow();

    terminal[id] = new TerminalId(data);
    terminal[id].turnOn();

}

function turnOffController(){

    var id = getIdSomehow();

    if (terminal[id])
        terminal[id].turnOff();

}
...