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;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								})();
							 |