UNPKG

@jsxc/jsxc

Version:

Real-time XMPP chat application with video calls, file transfer and encrypted communication

78 lines (67 loc) 2.91 kB
import Log from '../../util/Log'; import Account from '../../Account'; import PresenceHandler from './handlers/presence'; import MultiUserPresenceHandler from './handlers/multiUser/Presence'; import ChatMessageHandler from './handlers/chatMessage'; import ErrorMessageHandler from './handlers/errorMessage'; import MultiUserChatMessageHandler from './handlers/multiUser/groupChatMessage'; import HeadlineMessageHandler from './handlers/headlineMessage'; import JingleHandler from './handlers/jingle'; import { DiscoInfoHandler, DiscoItemsHandler } from './handlers/disco'; import CapsHandler from './handlers/caps'; import MultiUserDirectInvitationHandler from './handlers/multiUser/DirectInvitation'; import MultiUserXMessageHandler from './handlers/multiUser/XMessage'; import AbstractHandler from './AbstractHandler'; import * as NS from './namespace'; type StropheHandlerOptions = { matchBareFromJid?: boolean; ignoreNamespaceFragment?: boolean; }; interface IStropheConnection { jid: string; addHandler( Handler, namespace?: string, tagName?: string, type?: string, id?: string, from?: string, options?: StropheHandlerOptions ): void; } export default class XMPPHandler { constructor(private account: Account, private connection: IStropheConnection) {} public registerHandler() { this.addHandler(ChatMessageHandler, null, 'message', 'chat'); this.addHandler(ErrorMessageHandler, null, 'message', 'error'); this.addHandler(MultiUserChatMessageHandler, null, 'message', 'groupchat'); this.addHandler(HeadlineMessageHandler, null, 'message', 'headline'); this.addHandler(MultiUserXMessageHandler, 'http://jabber.org/protocol/muc#user', 'message'); this.addHandler(PresenceHandler, null, 'presence'); this.addHandler(MultiUserPresenceHandler, 'http://jabber.org/protocol/muc', 'presence', null, null, null, { ignoreNamespaceFragment: true, }); this.addHandler(JingleHandler, 'urn:xmpp:jingle:1', 'iq', 'set'); this.addHandler(DiscoInfoHandler, NS.get('DISCO_INFO'), 'iq', 'get'); this.addHandler(DiscoItemsHandler, NS.get('DISCO_ITEMS'), 'iq', 'get'); this.addHandler(MultiUserDirectInvitationHandler, 'jabber:x:conference', 'message'); this.addHandler(CapsHandler, CapsHandler.NAMESPACE); // this.connection.conn.addHandler(this.onReceived, null, 'message'); } public addHandler( Handler, namespace?: string, tagName?: string, type?: string, id?: string, from?: string, options?: StropheHandlerOptions ) { let handler = new Handler(this.account); if (!(handler instanceof AbstractHandler)) { Log.warn('Invalid handler'); return; } this.connection.addHandler(stanza => handler.processStanza(stanza), namespace, tagName, type, id, from, options); } }