# HG changeset patch # User Matti Hamalainen # Date 1397432205 -10800 # Node ID a66d849006f2f73e1909b1bcc38a014e17a7d230 # Parent 1359bc5c53e0b3e68bca526c4ded567111a5b2c9 More work on player position updates. diff -r 1359bc5c53e0 -r a66d849006f2 map.js --- a/map.js Sun Apr 13 23:48:18 2014 +0300 +++ b/map.js Mon Apr 14 02:36:45 2014 +0300 @@ -10,7 +10,7 @@ var pmapPlrPrevPos = {"x": 8192, "y": 8192}; var pmapPlrMarker, pmapPlrToken, pmapPlrName; -var pmapUpdateTime, pmapUpdateDelay; +var pmapUpdateTime, pmapUpdateDelay, pmapUpdateFails = 0; function pmapMinMax(vval, vmin, vmax) @@ -196,6 +196,21 @@ } +function pmapStopPlayerUpdate(msg) +{ + clearInterval(pmapUpdatePID); + alert("An error occured: "+ msg); +} + + +function pmapIncreaseUpdateDelay(v) +{ + pmapUpdateDelay += v; + if (pmapUpdateDelay > 5000) + pmapUpdateDelay = 5000; +} + + function pmapUpdatePlayerPosition() { if (Date.now() - pmapUpdateTime >= pmapUpdateDelay) @@ -204,17 +219,20 @@ XDownloadUrl("http://tnsp.org/gmapng/playerpos.php?name="+pmapPlrName+"&token="+pmapPlrToken, function(data, responseCode) { + // Check response for type + pmapUpdateFails = 0; if (typeof(data) == "string") { - if (data.match(/error/i)) + // Check response + if (dmatches = data.match(/^Error: (.*)$/)) { - // In case of an error, stop updating - clearInterval(pmapUpdatePID); + pmapStopPlayerUpdate(dmatches[1]); + return; } else - if (data != "") + if (dmatches = data.match(/{[A-Za-z0-9\'\":, ]+}/)) { - var pos = JSON.parse(data); + 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)); @@ -223,9 +241,12 @@ pmapUpdateDelay = 500; } else - if (pmapUpdateDelay < 5000) - pmapUpdateDelay += 500; + // Position not changed, increase update delay + pmapIncreaseUpdateDelay(500); } + else + // Not a position update, increase update delay + pmapIncreaseUpdateDelay(1000); } else pmapUpdateDelay = 10000; @@ -233,6 +254,11 @@ function() { pmapUpdateDelay = 10000; + if (pmapUpdateFails++ > 5) + { + pmapStopPlayerUpdate("Server failed to respond"); + return; + } }); } }