rmi 0.0.4 copy "rmi: ^0.0.4" to clipboard
rmi: ^0.0.4 copied to clipboard

Remote Method Invocation without reflection but basd on code generation. This library is the runtime dependency. Additionally add `rmi__generator` as dev dependency.

Remote Method Invocation for dart #

Build Status

This project provides an solution for remote method invocation in dart without the use of reflection. Since reflection is only available on the Dart VM but not on a JS VM, this solution is entirely based on code generation instead.

Getting Started #

Let's say you want to invoke methods of an ExampleClass looking like this:

// in example.dart
part 'example.g.dart';
class ExampleClass implements RmiTarget {
  void someMethod() {
	print('some stuff');
  }

  ExampleClass();
  // required boilerplate for code generation
  @override
  Object invoke(Invocation invocation) =>
      _$ExampleClassInvoker.invoke(invocation, this);
  factory ExampleClass.getRemote(Context context, String uuid) =>
      _$ExampleClassRmi.getRemote(context, uuid);
  Provision provideRemote(Context context) =>
      _$ExampleClassRmi.provideRemote(context, this);
}

And you have the actual object present on machine A:

ExampleClass exampleObject = new ExampleClass();
/// ...setup some network connection, get a Stream and a StreamSink from it
Stream input = ...
StreamSink output = ...
Provision provision = exampleObject.provideRemote(new Context(input, output));
/// provision contains the uuid which identifies the object on this machine

On machine B:

/// Again we have the input and output you get from your network 
/// and additionally you have to provide the uuid from before
Stream input = ...
StreamSink output = ...
String uuid = ... provision.uuid // from above
ExampleClass remoteObject = ExampleClass.getRemote(new Context(input, output), uuid);
remoteObject.someMethod(); // prints 'some stuff' on the other machine

TODO #

  • generator warning when no factory was implemented
  • also for part ...
  • not invocable, not proxied method annotation
  • operators
  • think about object methods, tostring hashcode
  • check lang spec for other members what else could be here
  • Serialize exceptions
  • send stack on exception
  • Add else clause to invoker to provide an error message
  • write doc
  • cleanup exports
  • write install script
  • if static getRemoteis not specified, do not write it for stub constructors simply put a waringing
  • STREAMS!!!!
  • thorw exceptions from invoke
  • Proxy does implement, extend should be possible
  • sosuchmethod...
  • reduce tests to a minimum code
  • warn on rmi non future method
  • warn for contrast metadata
  • class hierarchy metadata
  • pass stream and future null arguments
1
likes
30
pub points
0%
popularity

Publisher

unverified uploader

Remote Method Invocation without reflection but basd on code generation. This library is the runtime dependency. Additionally add `rmi__generator` as dev dependency.

Repository (GitHub)
View/report issues

License

BSD-2-Clause (LICENSE)

Dependencies

json_annotation, json_serialization, uuid

More

Packages that depend on rmi