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
Properties
TInput input #
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 #
EventRoot<EventArgs> get inputChanged => _inputChangedHandle;
final EventRoot<EventArgs> outputChanged #
EventRoot<EventArgs> get outputChanged => _outputChangedHandle;
final Type runtimeType #
A representation of the runtime type of the object.
external Type get runtimeType;
Operators
bool operator ==(other) #
The equality operator.
The default behavior for all Object
s 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() #
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() #
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) #
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() #
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() #
Returns a string representation of this object.
external String toString();