New file |
0,0 → 1,72 |
/* |
Copyright (c) 2004-2006, The Dojo Foundation |
All Rights Reserved. |
|
Licensed under the Academic Free License version 2.1 or above OR the |
modified BSD license. For more information on Dojo licensing, see: |
|
http://dojotoolkit.org/community/licensing.shtml |
*/ |
|
dojo.provide("dojo.rpc.RpcService"); |
dojo.require("dojo.io.*"); |
dojo.require("dojo.json"); |
dojo.require("dojo.lang.func"); |
dojo.require("dojo.Deferred"); |
dojo.rpc.RpcService = function (url) { |
if (url) { |
this.connect(url); |
} |
}; |
dojo.lang.extend(dojo.rpc.RpcService, {strictArgChecks:true, serviceUrl:"", parseResults:function (obj) { |
return obj; |
}, errorCallback:function (deferredRequestHandler) { |
return function (type, e) { |
deferredRequestHandler.errback(new Error(e.message)); |
}; |
}, resultCallback:function (deferredRequestHandler) { |
var tf = dojo.lang.hitch(this, function (type, obj, e) { |
if (obj["error"] != null) { |
var err = new Error(obj.error); |
err.id = obj.id; |
deferredRequestHandler.errback(err); |
} else { |
var results = this.parseResults(obj); |
deferredRequestHandler.callback(results); |
} |
}); |
return tf; |
}, generateMethod:function (method, parameters, url) { |
return dojo.lang.hitch(this, function () { |
var deferredRequestHandler = new dojo.Deferred(); |
if ((this.strictArgChecks) && (parameters != null) && (arguments.length != parameters.length)) { |
dojo.raise("Invalid number of parameters for remote method."); |
} else { |
this.bind(method, arguments, deferredRequestHandler, url); |
} |
return deferredRequestHandler; |
}); |
}, processSmd:function (object) { |
dojo.debug("RpcService: Processing returned SMD."); |
if (object.methods) { |
dojo.lang.forEach(object.methods, function (m) { |
if (m && m["name"]) { |
dojo.debug("RpcService: Creating Method: this.", m.name, "()"); |
this[m.name] = this.generateMethod(m.name, m.parameters, m["url"] || m["serviceUrl"] || m["serviceURL"]); |
if (dojo.lang.isFunction(this[m.name])) { |
dojo.debug("RpcService: Successfully created", m.name, "()"); |
} else { |
dojo.debug("RpcService: Failed to create", m.name, "()"); |
} |
} |
}, this); |
} |
this.serviceUrl = object.serviceUrl || object.serviceURL; |
dojo.debug("RpcService: Dojo RpcService is ready for use."); |
}, connect:function (smdUrl) { |
dojo.debug("RpcService: Attempting to load SMD document from:", smdUrl); |
dojo.io.bind({url:smdUrl, mimetype:"text/json", load:dojo.lang.hitch(this, function (type, object, e) { |
return this.processSmd(object); |
}), sync:true}); |
}}); |
|