Dart Documentationbot_asyncSendPortValue<TInput, TOutput>

SendPortValue<TInput, TOutput> class

class SendPortValue<TInput, TOutput> extends FutureValue<TInput, TOutput> {
  final SendPort _sendPort;
  final Func1<TInput, Dynamic> inputSerializer;
  final Func1<Dynamic, TOutput> outputDeserializer;
  Completer<TOutput> _completer;
  Future<TOutput> _innerFuture;

  SendPortValue(this._sendPort, {this.inputSerializer, this.outputDeserializer});

  Future<TOutput> getFuture(TInput value) {
    assert(_completer == null);
    assert(_innerFuture == null);

    _completer = new Completer<TOutput>();

    if(inputSerializer == null) {
      _innerFuture = _sendPort.call(value);
    } else {
      var serializedValue = inputSerializer(value);
      _innerFuture = _sendPort.call(serializedValue);
    }
    // I don't think this is working yet in isolates
    // _future.handleException(_futureException);
    // DARTBUG: http://dartbug.com/3734
    _innerFuture.then(__futureCompleted);

    return _completer.future;
  }

  void __futureCompleted(value) {
    assert(_completer != null);
    assert(_innerFuture != null);
    _innerFuture = null;

    if(value is Map && FutureValueResult.isMyMap(value)) {
      final fvr = new FutureValueResult.fromMap(value);
      _sendValueResultCompleted(fvr);
    } else {
      _complete(value);
    }
  }

  void _sendValueResultCompleted(FutureValueResult<TOutput> value) {
    if(value.isException) {
      _completeException(value.exception);
    } else {
      _complete(value.value);
    }
  }

  void _complete(Dynamic rawValue) {
    final c = _completer;
    _completer = null;

    final value = _deserializer(rawValue);
    c.complete(value);
  }

  void _completeException(exception) {
    final c = _completer;
    _completer = null;
    c.completeException(exception);
  }

  TOutput _deserializer(Dynamic input) {
    if(outputDeserializer == null) {
      return input;
    } else {
      return outputDeserializer(input);
    }
  }
}

Extends

FutureValue<TInput, TOutput> > SendPortValue<TInput, TOutput>

Constructors

new SendPortValue(SendPort _sendPort, [Func1 inputSerializer, Func1 outputDeserializer]) #

SendPortValue(this._sendPort, {this.inputSerializer, this.outputDeserializer});

Properties

final EventRoot error #

inherited from FutureValue
EventRoot get error => _errorHandle;

TInput input #

inherited from FutureValue
TInput get input => _input;
void set input(TInput value) {
  _input = value;
  if(_future == null) {
    _startFuture();
  } else {
    _pending = true;
  }
  _inputChangedHandle.fireEvent(EventArgs.empty);
}

final EventRoot<EventArgs> inputChanged #

inherited from FutureValue
EventRoot<EventArgs> get inputChanged => _inputChangedHandle;

final Func1 inputSerializer #

final Func1<TInput, Dynamic> inputSerializer;

final TOutput output #

inherited from FutureValue
TOutput get output => _output;

final EventRoot<EventArgs> outputChanged #

inherited from FutureValue
EventRoot<EventArgs> get outputChanged => _outputChangedHandle;

final Func1 outputDeserializer #

final Func1<Dynamic, TOutput> outputDeserializer;

final Type runtimeType #

inherited from Object

A representation of the runtime type of the object.

external Type get runtimeType;

Operators

bool operator ==(other) #

inherited from Object

The equality operator.

The default behavior for all Objects is to return true if and only if this and other are the same object.

If a subclass overrides the equality operator it should override the hashCode method as well to maintain consistency.

bool operator ==(other) => identical(this, other);

Methods

new FutureValue() #

inherited from FutureValue
FutureValue() :
  _outputChangedHandle = new EventHandle<EventArgs>(),
  _inputChangedHandle = new EventHandle<EventArgs>(),
  _errorHandle = new EventHandle<Object>();

Future<TOutput> getFuture(TInput value) #

Future<TOutput> getFuture(TInput value) {
  assert(_completer == null);
  assert(_innerFuture == null);

  _completer = new Completer<TOutput>();

  if(inputSerializer == null) {
    _innerFuture = _sendPort.call(value);
  } else {
    var serializedValue = inputSerializer(value);
    _innerFuture = _sendPort.call(serializedValue);
  }
  // I don't think this is working yet in isolates
  // _future.handleException(_futureException);
  // DARTBUG: http://dartbug.com/3734
  _innerFuture.then(__futureCompleted);

  return _completer.future;
}

int hashCode() #

inherited from Object

Get a hash code for this object.

All objects have hash codes. Hash codes are guaranteed to be the same for objects that are equal when compared using the equality operator ==. Other than that there are no guarantees about the hash codes. They will not be consistent between runs and there are no distribution guarantees.

If a subclass overrides hashCode it should override the equality operator as well to maintain consistency.

external int hashCode();

noSuchMethod(String name, List args) #

inherited from Object

noSuchMethod is invoked when users invoke a non-existant method on an object. The name of the method and the arguments of the invocation are passed to noSuchMethod. If noSuchMethod returns a value, that value becomes the result of the original invocation.

The default behavior of noSuchMethod is to throw a noSuchMethodError.

external Dynamic noSuchMethod(String name, List args);

const Object() #

inherited from Object

Creates a new Object instance.

Object instances have no meaningful state, and are only useful through their identity. An Object instance is equal to itself only.

const Object();

new SendPortValue(SendPort _sendPort, [Func1 inputSerializer, Func1 outputDeserializer]) #

SendPortValue(this._sendPort, {this.inputSerializer, this.outputDeserializer});

String toString() #

inherited from Object

Returns a string representation of this object.

external String toString();