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.
		
		
		
		
		
			
		
			
	
	
		
			82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											11 years ago
										 | /* vim: ts=4:sw=4:expandtab | ||
|  |  * | ||
|  |  * This program is free software: you can redistribute it and/or modify | ||
|  |  * it under the terms of the GNU Lesser General Public License as published by | ||
|  |  * the Free Software Foundation, either version 3 of the License, or | ||
|  |  * (at your option) any later version. | ||
|  |  * | ||
|  |  * This program is distributed in the hope that it will be useful, | ||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||
|  |  * GNU Lesser General Public License for more details. | ||
|  |  * | ||
|  |  * You should have received a copy of the GNU Lesser General Public License | ||
|  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||
|  |  */ | ||
|  | ;(function(){ | ||
|  |     'use strict'; | ||
|  | 
 | ||
|  |     /* | ||
|  |      * var socket = textsecure.websocket(url); | ||
|  |      * | ||
|  |      * Returns an adamantium-reinforced super socket, capable of sending | ||
|  |      * app-level keep alives and automatically reconnecting. | ||
|  |      * | ||
|  |      */ | ||
|  | 
 | ||
|  |     window.textsecure.websocket = function (url) { | ||
| 
											11 years ago
										 |         var socketWrapper = { | ||
|  |             onmessage    : function() {}, | ||
|  |             ondisconnect : function() {}, | ||
|  |         }; | ||
| 
											11 years ago
										 |         var socket; | ||
|  |         var keepAliveTimer; | ||
|  |         var reconnectSemaphore = 0; | ||
|  |         var reconnectTimeout = 1000; | ||
|  | 
 | ||
|  |         function resetKeepAliveTimer() { | ||
|  |             clearTimeout(keepAliveTimer); | ||
|  |             keepAliveTimer = setTimeout(function() { | ||
| 
											11 years ago
										 |                 socket.send( | ||
|  |                     new textsecure.protobuf.WebSocketMessage({ | ||
|  |                         type: textsecure.protobuf.WebSocketMessage.Type.REQUEST, | ||
|  |                         request: { verb: 'GET', path: '/v1/keepalive' } | ||
|  |                     }).encode().toArrayBuffer() | ||
|  |                 ); | ||
|  | 
 | ||
| 
											11 years ago
										 |                 resetKeepAliveTimer(); | ||
| 
											11 years ago
										 |             }, 15000); | ||
| 
											11 years ago
										 |         }; | ||
|  | 
 | ||
|  |         function reconnect(e) { | ||
|  |             reconnectSemaphore--; | ||
|  |             setTimeout(connect, reconnectTimeout); | ||
|  |             socketWrapper.ondisconnect(e); | ||
|  |         }; | ||
|  | 
 | ||
| 
											11 years ago
										 |         function connect() { | ||
| 
											11 years ago
										 |             clearTimeout(keepAliveTimer); | ||
|  |             if (++reconnectSemaphore <= 0) { return; } | ||
|  | 
 | ||
|  |             if (socket) { socket.close(); } | ||
|  |             socket = new WebSocket(url); | ||
|  | 
 | ||
|  |             socket.onerror = reconnect; | ||
|  |             socket.onclose = reconnect; | ||
|  |             socket.onopen  = resetKeepAliveTimer; | ||
|  | 
 | ||
|  |             socket.onmessage = function(response) { | ||
|  |                 socketWrapper.onmessage(response); | ||
|  |                 resetKeepAliveTimer(); | ||
|  |             }; | ||
|  | 
 | ||
|  |             socketWrapper.send = function(msg) { | ||
|  |                 socket.send(msg); | ||
|  |             } | ||
| 
											11 years ago
										 |         } | ||
| 
											11 years ago
										 | 
 | ||
|  |         connect(); | ||
|  |         return socketWrapper; | ||
|  |     }; | ||
|  | })(); |