Remote callbacks functionality in gadgets.rpc
---------------------------------------------

                 Key: SHINDIG-442
                 URL: https://issues.apache.org/jira/browse/SHINDIG-442
             Project: Shindig
          Issue Type: Improvement
          Components: Features (Javascript)
            Reporter: John Hjelmstad
            Assignee: John Hjelmstad
            Priority: Minor
         Attachments: rpc.remotecallbacks.patch

At present, passing a function as an argument to a gadgets.rpc service handler 
has undefined behavior (in practice, it probably stringifies the function in 
some odd ways).

In order to support asynchronous callback of multiple methods, I propose 
automatically wrapping function parameters in "remote callbacks". This would 
allow something like the following:

Service definition (as by container):
function myServiceHandler(foo, onSuccess, onError) {
  var result = doSomethingWithFoo(foo);
  if (resultIsError(result)) {
    onError(result);
  } else {
    onSuccess(result);
  }
}
gadgets.rpc.register('my-service', myServiceHandler);

Service use (as by gadget):
gadgets.rpc.call('..', 'my-service', null, foo, function(result) { /* success 
code */ }, function(result) { /* error code */ });

This allows intuitive definition of services using callbacks, and intuitive use 
of them in turn.

This proposal is in many ways complementary to SHINDIG-441, as that proposal 
provides an async way to call the single "default" callback mechanism in 
gadgets.rpc. That there are two is somewhat confusing - there's an argument 
that having only one would be better, but since there's already a default I 
feel it's worthwhile to consider defining ad hoc versions.

Pros:
- Intuitive use of function arguments
- Provides flexible asynchronous callback functionality to gadgets.rpc without 
changing any existing functionality

Cons:
- Somewhat conflated with "default" callback mechanism
- Need to figure out memory-management policies for dynamically-generated 
remote callbacks.

Regarding the latter, I propose later adding an optional API to mark remote 
callbacks with how long they last: oneTimeUse, timeoutInMs, etc.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to