DC_auto_refresh

Custom auto-refresh, display ping/delay network info overlay.

目前为 2015-07-24 提交的版本。查看 最新版本

// ==UserScript==
// @name		DC_auto_refresh
// @author		Ladoria
// @version		0.13
// @grant       none
// @description	Custom auto-refresh, display ping/delay network info overlay.
// @match		http://www.dreadcast.net/Main
// @match		http://www.dreadcast.net/Index
// @copyright	2015+, Ladoria
// @namespace InGame
// ==/UserScript==

var reload_asked = Date.now();
var last_request_completed =  Date.now();
var check_delay = 3000; // In ms, x >= 3000. DC's refresh is each ~2950ms
var lag_buster = 10000;
var casual_lag_buster = 10000; // In ms, x >= 2000. Time to activate reconnection routine. Because lag is life, m'k.
var hard_lag_buster = 600000; // In ms, x >= 600000 (10min). Time to activate reconnection routine during hard lagging.
casual_lag_buster += check_delay; // basic anti-lag security
hard_lag_buster += check_delay;
var refresh_time_limit = 120000; // In ms. Time to auto-refresh. (+ lag_buster in script)
var abort_time_fixed = refresh_time_limit / 1000; // In seconds.
var abort_time = abort_time_fixed;
var script_paused = false;
var refresh_interval;
var disconnected = false;

var coockie_prefix = "DC_auto_refreash_"
var show_overlay = true;

var server_date = new Date(); // Hard lagging from 5:00 to 6:00 GTM + 2
var last_request_send = Date.now(); // Last attempt time
var first_request_send = Date.now(); // First of failed attempts time

var alert_messages = new Array();
alert_messages.ask_to_reload = 'Attention, vous semblez avoir été déconnecté. Rechargement de la page dans <span class="seconds"></span> seconde(s) <br><div class="btnTxt abort"><div>Annuler</div></div>&nbsp;&nbsp;<div class="btnTxt reload"><div>Recharger</div></div>';
alert_messages.unconnected = 'Attention, vous semblez toujours déconnecté.&nbsp;&nbsp;<div class="btnTxt hide"><div>OK</div></div>';
alert_messages.connected = '<span class="ok_message">Vous semblez avoir été reconnecté.</span>&nbsp;&nbsp;<div class="btnTxt hide"><div>OK</div></div>';

$(document).ready( function() {
	$('body').append('<style>#auto_refresh  {display: block;position: absolute;top: 31px;width: 100%;z-index:1000000;text-align: center;}#auto_refresh .overlay  {position: absolute;top: 0px;color: white;background-color: rgba(0, 0, 0, 0.5);line-height: 14px;    font-size: 10px;}#auto_refresh .overlay  .toggle {float: right;margin-left: 1px;padding-left: 5px;padding-right: 5px;cursor: pointer;border: 1px solid gray;}#auto_refresh .overlay  .refresh_delay {float: left;width: 100px;color: back;background-color: transparent;border: 1px solid green;}#auto_refresh .overlay  .refresh_delay .lag_seconds {display: none;}#auto_refresh .overlay  .refresh_delay .actual_time {position: absolute;top: 0px;left: 0px;background-color: rgba(0, 255, 0, 0.2);height: 100%;overflow: hidden;}#auto_refresh .alert_container {display: none;}#auto_refresh .alert  {position: relative;display: inline-block;padding: 5px;color: red;background-color: white;text-align: center;font-size: 20px;}#auto_refresh .alert .abort, #auto_refresh .alert .reload, #auto_refresh .alert .hide  {display: inline-block;margin-top: 10px;width: 100px;}#auto_refresh .ok_message{color: green;}</style>');
	$("body").append('<div id="auto_refresh"><div class="overlay"><div class="ping refresh_delay barre_fond"><span class="data">Ping</span> : <span class="seconds"></span> ms.<div class="actual_time barre_etat"></div></div><div class="toggle">&lt;</div></div><div class="alert_container"><div class="alert fakeToolTip"></div><div></div>');
	
	if(undefined != getCookie('global'))
		show_overlay = ('show_overlay' == getCookie('global')) ? true : false;
	
	if(false === show_overlay) {
		$('#auto_refresh .overlay .toggle').html('>');
		$('#auto_refresh .overlay .ping').hide();
	}
	
	function show_alert(message) {
		$('#auto_refresh .alert').html(alert_messages[message]);
		
		if('ask_to_reload' == message) {
			abort_time = abort_time_fixed;
			
			$('#auto_refresh .alert .seconds').html(abort_time);
			refresh_abort_time();
			
			// Abort reload
			// User want to abort, then notify user and pause script
			$('#auto_refresh .alert .abort').on('click', function() {
				script_paused = true;
				
				abort_reload();
				
				show_alert('unconnected');
			});
			
			// Do reload
			$('#auto_refresh .alert .reload').on('click', function() {
				do_reload();
			});
		}
		else if ('connected' == message || 'unconnected' == message) {
			// hide alert
			$('#auto_refresh .alert .hide').on('click', function() {
				hide_alert();
			});
		}
		
		$('#auto_refresh .alert_container').show();
	}
	
	function hide_alert() {
		$('#auto_refresh .alert_container').hide();
	}
	
	// Start refresh countdown
	function refresh_abort_time() {
		$('#auto_refresh .alert .seconds').html(abort_time);
		
		refresh_interval = setInterval( function() {
			if(0 < abort_time)
				abort_time--;
			
			$('#auto_refresh .alert .seconds').html(abort_time);
		}, 1000);
	}
	
	// Stop refresh countdown
	function abort_reload() {
		clearInterval(refresh_interval);
		
		last_request_completed = Date.now();
	}
	
	// Reload window
	function do_reload() {
		// Useless, but lovely
		last_request_completed = Date.now();
		
		window.location.href = 'http://www.dreadcast.net/Main';
	}

	// Countdown to reload window
	setInterval(function() {
		if(true === script_paused) return;
		
		// If no network activity for a while, reload.
		if (Date.now() - last_request_completed >= lag_buster) {
			// If yes/no alert hidden, show it
			if(0 === $('#auto_refresh .alert .abort').length) {
				show_alert('ask_to_reload');
				
				// Delay to refresh
				reload_asked = Date.now();
			}
				
			// If reload failed, waiting for a while and after delay to refresh
			if (Date.now() - reload_asked >= refresh_time_limit) {
				
				do_reload();
			}
		}
	}, 1000);
	
	// Global clock
	setInterval(function() {
		// In case of hard lagging (5:00 -> 5:59)
		lag_buster = (5 == server_date.getHours()) ? hard_lag_buster : casual_lag_buster;
	
		refresh_ping(last_request_send, last_request_completed);
	}, 1000);
	
	// Overlay
	// Refresh Ping (request_send, request)
	function refresh_ping(request_send, request) {
		// If connected, refresh values
		if (false == disconnected) {
			first_request_send = request_send;
		}
		else {
			request = Date.now(); // If disconnected, keep stored data.
			request_send = first_request_send;
		}
		
		
		var ping = ((request - request_send) < 0) // During requesting new Check
			? ping
			: request - request_send;
		
		$('#auto_refresh .overlay .seconds').html(ping);
		
		// Time background-color cheat.
		if (lag_buster < ping) {
			$('#auto_refresh .overlay .refresh_delay').css({'borderColor' : 'red'});
			$('#auto_refresh .overlay .actual_time').css(	{'width' : '0px'},
															{'backgroundColor' : 'rgba(255, 0, 0, 0.2)'});
			$('#auto_refresh .overlay .refresh_delay .data').html('Délai');
		}
	}
	// Refresh delay animation
	function refresh_delay(request_send, request) {
		$('#auto_refresh .overlay .actual_time').stop();
		
		$('#auto_refresh .overlay .refresh_delay').css({'borderColor' : 'green'});
		$('#auto_refresh .overlay .actual_time').css(	{'width' : '0px'},
														{'backgroundColor' : 'rgba(0, 255, 0, 0.2)'});
		$('#auto_refresh .overlay .refresh_delay .data').html('Ping');
		
		$('#auto_refresh .overlay .actual_time').animate(
			{width : $('#auto_refresh .overlay .refresh_delay').width()}
			, check_delay);
	}
	
	// Toggle overlay
	$('#auto_refresh .overlay .toggle').on('click', function() {
		$('#auto_refresh .overlay .ping').toggle();
		
		if (true === show_overlay)
			$('#auto_refresh .overlay .toggle').html('>');
		else
			$('#auto_refresh .overlay .toggle').html('<');
		
		show_overlay = !show_overlay;
		
		saveCookie('global',(true === show_overlay) ? 'show_overlay' : 'hide_overlay');
	});
	
	// Update last request send time
	$(document).ajaxSend( function(a,b,c) {
		if(/Check/.test(c.url)) {
			last_request_send = Date.now();
		}
	});
	
	// Update last request time
	$(document).ajaxComplete( function(a,b,c) {
		if(/Check/.test(c.url)) {
			// Refresh server date
			server_date = new Date(b.getResponseHeader('Date'));
			
			// If request succeeded
			if(b.readyState === 4) {
				// If reconnected again connexion, resume script and notify
				if($('#auto_refresh .alert').is(':Visible') || true === script_paused) {
					show_alert('connected');
				}
				
				script_paused = false;
				disconnected = false;
				
				// Stop reload
				abort_reload();
				
				last_request_completed = Date.now();
				
				refresh_delay(last_request_send, last_request_completed);
			}
			else
				disconnected = true;
		}
	});
});
// handle coockies
function saveCookie(name,val) {
	name = coockie_prefix + name;
	
	if(!navigator.cookieEnabled) return;
		document.cookie = name + '=' + val + ';expires=Wed, 01 Jan 2020 00:00:00 GMT; path=/';
}
function getCookie(var_name) {
	name = coockie_prefix + var_name;
	
	if(!navigator.cookieEnabled) return undefined;
	
	var start = document.cookie.indexOf(name + '=')
	if(start == -1) return undefined;
	start += name.length + 1;
	
	var end = document.cookie.indexOf(';',start);
	if (end == -1) end = document.cookie.lenght;
	
	return document.cookie.substring(start,end);
};
console.log('DC - Auto Refresh started');

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址