UNPKG

@babblevoice/babble-drachtio-presence

Version:

A presence agent which will work with other modules in this family.

87 lines (73 loc) 2 kB
/* Our store of UAS subscriptions. */ const bysubscribed = new Map() const byfqcallid = new Map() /** Add subscription to our store. @param { object } subscription The subscription object. @param { object } subscription.uri Who the subscriber is subscribing to @param { string } subscription.uri.user @param { string } subscription.uri.host */ module.exports.set = ( subscription ) => { const user = subscription.uri.user + "@" + subscription.uri.host let ourusermap if( bysubscribed.has( user ) ) { ourusermap = bysubscribed.get( user ) } else { ourusermap = new Map() bysubscribed.set( user, ourusermap ) } ourusermap.set( subscription.uuid, subscription ) byfqcallid.set( subscription._fqcallid, subscription ) } /** @param { string } user - user@host | fq id obtained from subscription.getexpires( req ) @return { Map | object | false } a map of subscriptions for this user */ module.exports.get = ( user ) => { if( bysubscribed.has( user ) ) { return bysubscribed.get( user ) } if( byfqcallid.has( user ) ) { return byfqcallid.get( user ) } return false } /** Return a list of subscriptions by user @return { Array } Array of fq users */ module.exports.getsubs = () => { return Array.from( bysubscribed.keys() ) } /** Delete subscription from our store. @param { object } subscription The subscription object. */ module.exports.delete = ( subscription ) => { const user = subscription.uri.user + "@" + subscription.uri.host if( !bysubscribed.has( user ) ) return const ourmap = bysubscribed.get( user ) if( !ourmap.has( subscription.uuid ) ) return ourmap.delete( subscription.uuid ) if( 0 === ourmap.size ) bysubscribed.delete( user ) byfqcallid.delete( subscription._fqcallid ) } /* For test purposes */ module.exports.stats = () => { return { "bysubscribed": bysubscribed.size, "bycallid": byfqcallid.size } } /* For test purposes */ module.exports.clear = () => { bysubscribed.clear() byfqcallid.clear() }