| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of html; | 5 part of html; |
| 6 | 6 |
| 7 _serialize(var message) { | 7 _serialize(var message) { |
| 8 return new _JsSerializer().traverse(message); | 8 return new _JsSerializer().traverse(message); |
| 9 } | 9 } |
| 10 | 10 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 | 65 |
| 66 num _id; | 66 num _id; |
| 67 _JsSendPortSync(this._id); | 67 _JsSendPortSync(this._id); |
| 68 | 68 |
| 69 callSync(var message) { | 69 callSync(var message) { |
| 70 var serialized = _serialize(message); | 70 var serialized = _serialize(message); |
| 71 var result = _callPortSync(_id, serialized); | 71 var result = _callPortSync(_id, serialized); |
| 72 return _deserialize(result); | 72 return _deserialize(result); |
| 73 } | 73 } |
| 74 | 74 |
| 75 bool operator==(var other) { |
| 76 return (other is _JsSendPortSync) && (_id == other._id); |
| 77 } |
| 78 |
| 79 int get hashCode => _id; |
| 75 } | 80 } |
| 76 | 81 |
| 77 // TODO(vsm): Differentiate between Dart2Js and Dartium isolates. | 82 // TODO(vsm): Differentiate between Dart2Js and Dartium isolates. |
| 78 // The receiver is a different Dart isolate, compiled to JS. | 83 // The receiver is a different Dart isolate, compiled to JS. |
| 79 class _RemoteSendPortSync implements SendPortSync { | 84 class _RemoteSendPortSync implements SendPortSync { |
| 80 | 85 |
| 81 int _isolateId; | 86 int _isolateId; |
| 82 int _portId; | 87 int _portId; |
| 83 _RemoteSendPortSync(this._isolateId, this._portId); | 88 _RemoteSendPortSync(this._isolateId, this._portId); |
| 84 | 89 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 95 var source = '$target-result'; | 100 var source = '$target-result'; |
| 96 var result = null; | 101 var result = null; |
| 97 var listener = (Event e) { | 102 var listener = (Event e) { |
| 98 result = json.parse(_getPortSyncEventData(e)); | 103 result = json.parse(_getPortSyncEventData(e)); |
| 99 }; | 104 }; |
| 100 window.on[source].add(listener); | 105 window.on[source].add(listener); |
| 101 _dispatchEvent(target, [source, message]); | 106 _dispatchEvent(target, [source, message]); |
| 102 window.on[source].remove(listener); | 107 window.on[source].remove(listener); |
| 103 return result; | 108 return result; |
| 104 } | 109 } |
| 110 |
| 111 bool operator==(var other) { |
| 112 return (other is _RemoteSendPortSync) && (_isolateId == other._isolateId) |
| 113 && (_portId == other._portId); |
| 114 } |
| 115 |
| 116 int get hashCode => _isolateId >> 16 + _portId; |
| 105 } | 117 } |
| 106 | 118 |
| 107 // The receiver is in the same Dart isolate, compiled to JS. | 119 // The receiver is in the same Dart isolate, compiled to JS. |
| 108 class _LocalSendPortSync implements SendPortSync { | 120 class _LocalSendPortSync implements SendPortSync { |
| 109 | 121 |
| 110 ReceivePortSync _receivePort; | 122 ReceivePortSync _receivePort; |
| 111 | 123 |
| 112 _LocalSendPortSync._internal(this._receivePort); | 124 _LocalSendPortSync._internal(this._receivePort); |
| 113 | 125 |
| 114 callSync(var message) { | 126 callSync(var message) { |
| 115 // TODO(vsm): Do a more efficient deep copy. | 127 // TODO(vsm): Do a more efficient deep copy. |
| 116 var copy = _deserialize(_serialize(message)); | 128 var copy = _deserialize(_serialize(message)); |
| 117 var result = _receivePort._callback(copy); | 129 var result = _receivePort._callback(copy); |
| 118 return _deserialize(_serialize(result)); | 130 return _deserialize(_serialize(result)); |
| 119 } | 131 } |
| 132 |
| 133 bool operator==(var other) { |
| 134 return (other is _LocalSendPortSync) |
| 135 && (_receivePort == other._receivePort); |
| 136 } |
| 137 |
| 138 int get hashCode => _receivePort.hashCode; |
| 120 } | 139 } |
| 121 | 140 |
| 122 // TODO(vsm): Move this to dart:isolate. This will take some | 141 // TODO(vsm): Move this to dart:isolate. This will take some |
| 123 // refactoring as there are dependences here on the DOM. Users | 142 // refactoring as there are dependences here on the DOM. Users |
| 124 // interact with this class (or interface if we change it) directly - | 143 // interact with this class (or interface if we change it) directly - |
| 125 // new ReceivePortSync. I think most of the DOM logic could be | 144 // new ReceivePortSync. I think most of the DOM logic could be |
| 126 // delayed until the corresponding SendPort is registered on the | 145 // delayed until the corresponding SendPort is registered on the |
| 127 // window. | 146 // window. |
| 128 | 147 |
| 129 // A Dart ReceivePortSync (tagged 'dart' when serialized) is | 148 // A Dart ReceivePortSync (tagged 'dart' when serialized) is |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 } | 215 } |
| 197 | 216 |
| 198 get _isolateId => ReceivePortSync._isolateId; | 217 get _isolateId => ReceivePortSync._isolateId; |
| 199 | 218 |
| 200 void _dispatchEvent(String receiver, var message) { | 219 void _dispatchEvent(String receiver, var message) { |
| 201 var event = new CustomEvent(receiver, false, false, json.stringify(message)); | 220 var event = new CustomEvent(receiver, false, false, json.stringify(message)); |
| 202 window.$dom_dispatchEvent(event); | 221 window.$dom_dispatchEvent(event); |
| 203 } | 222 } |
| 204 | 223 |
| 205 String _getPortSyncEventData(CustomEvent event) => event.detail; | 224 String _getPortSyncEventData(CustomEvent event) => event.detail; |
| OLD | NEW |