]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/amf_controller.rb
use render proc to write out results, see if that makes things faster
[rails.git] / app / controllers / amf_controller.rb
index 2bd98707a8a5e683ee53534d8599130b74f9a92d..72f1dd74eb9bed75047aa2beacdf6c2cb90baaaf 100644 (file)
@@ -33,27 +33,31 @@ class AmfController < ApplicationController
       bytes=getlong(req)                               #  | get total size in bytes
       args=getvalue(req)                               #  | get response (probably an array)
 
-      ActiveRecord::Base.logger.info("  Message: #{message}")
+      RAILS_DEFAULT_LOGGER.info("  Message: #{message}")
 
       case message
-      when 'getpresets';       results[index]=putdata(index,getpresets)
-      when 'whichways';                results[index]=putdata(index,whichways(args))
-      when 'getway';           results[index]=putdata(index,getway(args))
-      when 'putway';           results[index]=putdata(index,putway(args))
-      when 'deleteway';                results[index]=putdata(index,deleteway(args))
+                 when 'getpresets';    results[index]=putdata(index,getpresets)
+                 when 'whichways';             results[index]=putdata(index,whichways(args))
+                 when 'getway';                results[index]=putdata(index,getway(args))
+                 when 'putway';                results[index]=putdata(index,putway(args))
+                 when 'deleteway';             results[index]=putdata(index,deleteway(args))
       end
     end
 
     # ------------------
     # Write out response
 
+    RAILS_DEFAULT_LOGGER.info("  Response: start")
     response.headers["Content-Type"]="application/x-amf"
     a,b=results.length.divmod(256)
-    ans=0.chr+0.chr+0.chr+0.chr+a.chr+b.chr
-    results.each do |k,v|
-      ans+=v
-    end
-    render :text => ans
+       render :text => proc { |response, output| 
+        output.write 0.chr+0.chr+0.chr+0.chr+a.chr+b.chr
+               results.each do |k,v|
+                 RAILS_DEFAULT_LOGGER.info("  Response: encode #{k}")
+                 output.write(v)
+               end
+       }
+    RAILS_DEFAULT_LOGGER.info("  Response: end")
 
   end
 
@@ -72,6 +76,8 @@ class AmfController < ApplicationController
     presettype=''
     presetcategory=''
 
+    RAILS_DEFAULT_LOGGER.info("  Message: getpresets")
+
     #          File.open("config/potlatch/presets.txt") do |file|
 
     # Temporary patch to get around filepath problem
@@ -175,7 +181,7 @@ EOF
     xmax = args[2].to_f+0.01
     ymax = args[3].to_f+0.01
 
-    ActiveRecord::Base.logger.info("  Bounding Box: #{xmin},#{ymin},#{xmax},#{ymax}")
+    RAILS_DEFAULT_LOGGER.info("  Message: whichways, bbox=#{xmin},#{ymin},#{xmax},#{ymax}")
 
     waylist=WaySegment.find_by_sql("SELECT DISTINCT current_way_segments.id AS wayid"+
        "  FROM current_way_segments,current_segments,current_nodes,current_ways "+
@@ -215,6 +221,8 @@ EOF
     xmin = ymin = 999999
     xmax = ymax = -999999
 
+    RAILS_DEFAULT_LOGGER.info("  Message: getway, id=#{wayid}")
+
     readwayquery(wayid).each {|row|
       xs1=long2coord(row['long1'].to_f,baselong,masterscale); ys1=lat2coord(row['lat1'].to_f,basey,masterscale)
       xs2=long2coord(row['long2'].to_f,baselong,masterscale); ys2=lat2coord(row['lat2'].to_f,basey,masterscale)
@@ -249,6 +257,8 @@ EOF
     ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
     originalway=originalway.to_i
 
+    RAILS_DEFAULT_LOGGER.info("  Message: putway, id=#{originalway}")
+
     # -- 3.    read original way into memory
 
     xc={}; yc={}; tagc={}; seg={}
@@ -414,6 +424,9 @@ EOF
 
   def deleteway(args)
     usertoken,way=args
+
+    RAILS_DEFAULT_LOGGER.info("  Message: deleteway, id=#{way}")
+
     uid=getuserid(usertoken); if !uid then return end
        way=way.to_i