# HG changeset patch # User Matti Hamalainen # Date 1397433660 -10800 # Node ID f8aa8534b9510020d38bf958c684381092843fae # Parent a66d849006f2f73e1909b1bcc38a014e17a7d230 More work .. fixed error handling somewhat. diff -r a66d849006f2 -r f8aa8534b951 map.js --- a/map.js Mon Apr 14 02:36:45 2014 +0300 +++ b/map.js Mon Apr 14 03:01:00 2014 +0300 @@ -10,7 +10,7 @@ var pmapPlrPrevPos = {"x": 8192, "y": 8192}; var pmapPlrMarker, pmapPlrToken, pmapPlrName; -var pmapUpdateTime, pmapUpdateDelay, pmapUpdateFails = 0; +var pmapUpdateDelay, pmapUpdateFails = 0; function pmapMinMax(vval, vmin, vmax) @@ -130,9 +130,8 @@ pmapPlrToken = args.token; pmapPlrName = args.name; - pmapUpdateTime = Date.now(); - pmapUpdateDelay = 0; - pmapUpdatePID = setInterval("pmapUpdatePlayerPosition()", 500); + pmapUpdateDelay = 1000; + pmapScheduleNextUpdate(); } } @@ -196,10 +195,9 @@ } -function pmapStopPlayerUpdate(msg) +function pmapScheduleNextUpdate() { - clearInterval(pmapUpdatePID); - alert("An error occured: "+ msg); + setTimeout("pmapUpdatePlayerPosition()", pmapUpdateDelay); } @@ -213,52 +211,49 @@ function pmapUpdatePlayerPosition() { - if (Date.now() - pmapUpdateTime >= pmapUpdateDelay) + XDownloadUrl("http://tnsp.org/gmapng/playerpos.php?name="+pmapPlrName+"&token="+pmapPlrToken, + function(data, responseCode) { - pmapUpdateTime = Date.now(); - XDownloadUrl("http://tnsp.org/gmapng/playerpos.php?name="+pmapPlrName+"&token="+pmapPlrToken, - function(data, responseCode) + // Check response for type + pmapUpdateFails = 0; + if (typeof(data) == "string") { - // Check response for type - pmapUpdateFails = 0; - if (typeof(data) == "string") + // Check response + if (dmatches = data.match(/^Error: (.*)$/)) { - // Check response - if (dmatches = data.match(/^Error: (.*)$/)) + alert("An error occured: "+ dmatches[1]); + return false; + } + else + if (dmatches = data.match(/{[A-Za-z0-9\'\":, ]+}/)) + { + var pos = JSON.parse(dmatches[0]); + if (typeof(pos) == "object" && (pos.x != pmapPlrPrevPos.x || pos.y != pmapPlrPrevPos.y)) { - pmapStopPlayerUpdate(dmatches[1]); - return; + pmapPlrMarker.setPosition(pmapMapCoordsToLatLng(new google.maps.Point(pos.x * 2 + 1, pos.y * 2 + 1), 7)); + pmap.panTo(pmapMapCoordsToLatLng(new google.maps.Point(pos.x, pos.y), 6)); + pmapPlrPrevPos = pos; + pmapUpdateDelay = 500; } else - if (dmatches = data.match(/{[A-Za-z0-9\'\":, ]+}/)) - { - var pos = JSON.parse(dmatches[0]); - if (typeof(pos) == "object" && (pos.x != pmapPlrPrevPos.x || pos.y != pmapPlrPrevPos.y)) - { - pmapPlrMarker.setPosition(pmapMapCoordsToLatLng(new google.maps.Point(pos.x * 2 + 1, pos.y * 2 + 1), 7)); - pmap.panTo(pmapMapCoordsToLatLng(new google.maps.Point(pos.x, pos.y), 6)); - pmapPlrPrevPos = pos; - pmapUpdateDelay = 500; - } - else - // Position not changed, increase update delay - pmapIncreaseUpdateDelay(500); - } - else - // Not a position update, increase update delay - pmapIncreaseUpdateDelay(1000); + // Position not changed, increase update delay + pmapIncreaseUpdateDelay(500); } else - pmapUpdateDelay = 10000; - }, - function() - { + // Not a position update, increase update delay + pmapIncreaseUpdateDelay(1000); + } + else pmapUpdateDelay = 10000; - if (pmapUpdateFails++ > 5) - { - pmapStopPlayerUpdate("Server failed to respond"); - return; - } - }); - } + + pmapScheduleNextUpdate(); + }, + function() + { + pmapUpdateDelay = 10000; + if (pmapUpdateFails++ > 5) + alert("An error occured: Server failed to respond."); + else + pmapScheduleNextUpdate(); + }); }