changeset 272:a66d849006f2 gmap2

More work on player position updates.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 14 Apr 2014 02:36:45 +0300
parents 1359bc5c53e0
children f8aa8534b951
files map.js
diffstat 1 files changed, 34 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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;
+      }
     });
   }
 }