+ if not method.restful_async then
+ # Synchronous method
+ t.add """
+ var response = {{{method.name}}}{{{sig}}}
+ http_server.respond response
+ http_server.close
+ return
+"""
+ else
+ # Asynchronous method
+ var task_name = "Task_{mclass}_{method.name}"
+ args.unshift "http_server"
+ args.unshift "request"
+ args.unshift "self"
+
+ t.add """
+ var task = new {{{task_name}}}({{{args.join(", ")}}})
+ self.thread_pool.execute task
+ return
+"""
+
+ var thread_attribs = new Array[String]
+ for param in msig.mparameters do
+ thread_attribs.add """
+ private var out_{{{param.name}}}: {{{param.mtype}}}"""
+ end
+
+ classes.add """
+
+# Generated task to execute {{{mclass}}}::{{{method.name}}}
+class {{{task_name}}}
+ super RestfulTask
+
+ redef type A: {{{mclass}}}
+
+{{{thread_attribs.join("\n")}}}
+
+ redef fun indirect_restful_method
+ do
+ return action.{{{method.name}}}{{{sig}}}
+ end
+end
+"""
+ end
+
+ if isas.not_empty then t.add """
+ end
+"""