Dart API Referencedart:htmlReceivePortSync

ReceivePortSync class

class ReceivePortSync {

 static Map<int, ReceivePortSync> _portMap;
 static int _portIdCount;
 static int _cachedIsolateId;

 num _portId;
 Function _callback;
 StreamSubscription _portSubscription;

 ReceivePortSync() {
   if (_portIdCount == null) {
     _portIdCount = 0;
     _portMap = new Map<int, ReceivePortSync>();
   }
   _portId = _portIdCount++;
   _portMap[_portId] = this;
 }

 static int get _isolateId {
   // TODO(vsm): Make this coherent with existing isolate code.
   if (_cachedIsolateId == null) {
     _cachedIsolateId = _getNewIsolateId();
   }
   return _cachedIsolateId;
 }

 static String _getListenerName(isolateId, portId) =>
     'dart-port-$isolateId-$portId';
 String get _listenerName => _getListenerName(_isolateId, _portId);

 void receive(callback(var message)) {
   _callback = callback;
   if (_portSubscription == null) {
     _portSubscription = window.on[_listenerName].listen((Event e) {
       var data = json.parse(_getPortSyncEventData(e));
       var replyTo = data[0];
       var message = _deserialize(data[1]);
       var result = _callback(message);
       _dispatchEvent(replyTo, _serialize(result));
     });
   }
 }

 void close() {
   _portMap.remove(_portId);
   if (_portSubscription != null) _portSubscription.cancel();
 }

 SendPortSync toSendPort() {
   return new _LocalSendPortSync._internal(this);
 }

 static SendPortSync _lookup(int isolateId, int portId) {
   if (isolateId == _isolateId) {
     return _portMap[portId].toSendPort();
   } else {
     return new _RemoteSendPortSync(isolateId, portId);
   }
 }
}

Constructors

new ReceivePortSync() #

ReceivePortSync() {
 if (_portIdCount == null) {
   _portIdCount = 0;
   _portMap = new Map<int, ReceivePortSync>();
 }
 _portId = _portIdCount++;
 _portMap[_portId] = this;
}

Methods

void close() #

void close() {
 _portMap.remove(_portId);
 if (_portSubscription != null) _portSubscription.cancel();
}

void receive(callback(message)) #

void receive(callback(var message)) {
 _callback = callback;
 if (_portSubscription == null) {
   _portSubscription = window.on[_listenerName].listen((Event e) {
     var data = json.parse(_getPortSyncEventData(e));
     var replyTo = data[0];
     var message = _deserialize(data[1]);
     var result = _callback(message);
     _dispatchEvent(replyTo, _serialize(result));
   });
 }
}

SendPortSync toSendPort() #

SendPortSync toSendPort() {
 return new _LocalSendPortSync._internal(this);
}