You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			99 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
| /* global window: false */
 | |
| /* global callWorker: false */
 | |
| /* global textsecure: false */
 | |
| /* global Event: false */
 | |
| /* global dcodeIO: false */
 | |
| /* global lokiPublicChatAPI: false */
 | |
| 
 | |
| /* eslint-disable more/no-then */
 | |
| /* eslint-disable no-unreachable */
 | |
| 
 | |
| let openGroupBound = false;
 | |
| 
 | |
| function MessageReceiver() {
 | |
|   this.pending = Promise.resolve();
 | |
| 
 | |
|   // only do this once to prevent duplicates
 | |
|   if (lokiPublicChatAPI) {
 | |
|     window.log.info('Binding open group events handler', openGroupBound);
 | |
|     if (!openGroupBound) {
 | |
|       openGroupBound = true;
 | |
|     }
 | |
|   } else {
 | |
|     window.log.warn('Can not handle open group data, API is not available');
 | |
|   }
 | |
| }
 | |
| 
 | |
| MessageReceiver.stringToArrayBuffer = string =>
 | |
|   Promise.resolve(dcodeIO.ByteBuffer.wrap(string, 'binary').toArrayBuffer());
 | |
| MessageReceiver.arrayBufferToString = arrayBuffer =>
 | |
|   Promise.resolve(dcodeIO.ByteBuffer.wrap(arrayBuffer).toString('binary'));
 | |
| MessageReceiver.arrayBufferToStringBase64 = arrayBuffer =>
 | |
|   callWorker('arrayBufferToStringBase64', arrayBuffer);
 | |
| 
 | |
| MessageReceiver.prototype = new textsecure.EventTarget();
 | |
| MessageReceiver.prototype.extend({
 | |
|   constructor: MessageReceiver,
 | |
|   connect() {
 | |
|     if (this.calledClose) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     if (this.hasConnected) {
 | |
|       const ev = new Event('reconnect');
 | |
|       this.dispatchEvent(ev);
 | |
|     }
 | |
| 
 | |
|     this.hasConnected = true;
 | |
| 
 | |
|     // start polling all open group rooms you have registered
 | |
|     // if not registered yet, they'll get started when they're created
 | |
|     if (lokiPublicChatAPI) {
 | |
|       lokiPublicChatAPI.open();
 | |
|     }
 | |
| 
 | |
|     // Ensures that an immediate 'empty' event from the websocket will fire only after
 | |
|     //   all cached envelopes are processed.
 | |
|     this.incoming = [this.pending];
 | |
|   },
 | |
|   stopProcessing() {
 | |
|     window.log.info('MessageReceiver: stopProcessing requested');
 | |
|     this.stoppingProcessing = true;
 | |
|     return this.close();
 | |
|   },
 | |
|   shutdown() {},
 | |
|   async close() {
 | |
|     window.log.info('MessageReceiver.close()');
 | |
|     this.calledClose = true;
 | |
| 
 | |
|     // stop polling all open group rooms
 | |
|     if (lokiPublicChatAPI) {
 | |
|       await lokiPublicChatAPI.close();
 | |
|     }
 | |
|   },
 | |
|   onopen() {},
 | |
|   onerror() {},
 | |
|   onclose() {},
 | |
| });
 | |
| 
 | |
| window.textsecure = window.textsecure || {};
 | |
| 
 | |
| textsecure.MessageReceiver = function MessageReceiverWrapper() {
 | |
|   const messageReceiver = new MessageReceiver();
 | |
|   this.addEventListener = messageReceiver.addEventListener.bind(messageReceiver);
 | |
|   this.removeEventListener = messageReceiver.removeEventListener.bind(messageReceiver);
 | |
|   this.close = messageReceiver.close.bind(messageReceiver);
 | |
| 
 | |
|   this.stopProcessing = messageReceiver.stopProcessing.bind(messageReceiver);
 | |
| 
 | |
|   messageReceiver.connect();
 | |
| };
 | |
| 
 | |
| textsecure.MessageReceiver.prototype = {
 | |
|   constructor: textsecure.MessageReceiver,
 | |
| };
 | |
| 
 | |
| textsecure.MessageReceiver.stringToArrayBuffer = MessageReceiver.stringToArrayBuffer;
 | |
| textsecure.MessageReceiver.arrayBufferToString = MessageReceiver.arrayBufferToString;
 | |
| textsecure.MessageReceiver.arrayBufferToStringBase64 = MessageReceiver.arrayBufferToStringBase64;
 |