blob: b355714833bf5dcae0be9ce5dd1b8c6aaeb27d97 [file] [log] [blame]
/*
* weinre is available under *either* the terms of the modified BSD license *or* the
* MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
*
* Copyright (c) 2010, 2011 IBM Corporation
*/
requireClass ./Ex
//-----------------------------------------------------------------------------
class Callback
throw new Ex(arguments, "this class is not intended to be instantiated")
//-----------------------------------------------------------------------------
init
var CallbackTable = {}
var CallbackIndex = 1
var ConnectorId = "???"
//-----------------------------------------------------------------------------
static method setConnectorId(connectorId)
ConnectorId = "" + connectorId
//-----------------------------------------------------------------------------
static method register(callback)
if (typeof callback == "function") callback = [null, callback]
if (typeof callback.slice != "function") throw new Ex(arguments, "callback must be an array or function")
var receiver = callback[0]
var func = callback[1]
var data = callback.slice(2)
if (typeof func == "string") func = receiver.func
if (typeof func != "function") throw new Ex(arguments, "callback function was null or not found")
var index = ConnectorId + "::" + CallbackIndex
CallbackIndex++
if (CallbackIndex >= 65536 * 65536) CallbackIndex = 1
CallbackTable[index] = [receiver, func, data]
return index
//-----------------------------------------------------------------------------
static method deregister(index)
delete CallbackTable[index]
//-----------------------------------------------------------------------------
static method invoke(index, args)
var callback = CallbackTable[index]
if (!callback) throw new Ex(arguments, "callback " + index + " not registered or already invoked")
var receiver = callback[0]
var func = callback[1]
var args = callback[2].concat(args)
try {
func.apply(receiver,args)
}
catch (e) {
var funcName = func.name
if (!funcName) funcName = "<unnamed>"
require("./Weinre").logError(arguments.callee.signature + " exception invoking callback: " + funcName + "(" + args.join(",") + "): " + e)
}
finally {
Callback.deregister(index)
}