);
}
- var localPortId; // TODO remove
- var nativeParam = {
- localMessagePortName: args.localMessagePortName
- };
-
- var result = native_.callSync(
- 'MessagePortManagerRequestLocalMessagePort',
- nativeParam
- );
+ // call C++ layer only if port does not already exist
+ if (!ports[args.localMessagePortName]) {
+ var nativeParam = {
+ localMessagePortName: args.localMessagePortName
+ };
+
+ var result = native_.callSync(
+ 'MessagePortManagerRequestLocalMessagePort',
+ nativeParam
+ );
- if (native_.isSuccess(result)) {
- var returnObject = new LocalMessagePort(args.localMessagePortName, false);
- ports[nativeParam.localMessagePortName] = native_.getResultObject(result);
- } else {
- throw native_.getErrorObject(result);
+ if (native_.isSuccess(result)) {
+ var id = native_.getResultObject(result);
+ ports[nativeParam.localMessagePortName] = new LocalMessagePort(args.localMessagePortName, false, id);
+ } else {
+ throw native_.getErrorObject(result);
+ }
}
- return returnObject;
+ return args.localMessagePortName;
};
MessagePortManager.prototype.requestTrustedLocalMessagePort = function(
);
}
- var nativeParam = {
- localMessagePortName: args.localMessagePortName
- };
+ // call C++ layer only if port does not already exist
+ if (!ports[args.localMessagePortName]) {
+ var nativeParam = {
+ localMessagePortName: args.localMessagePortName
+ };
- var result = native_.callSync(
- 'MessagePortManagerRequestTrustedLocalMessagePort',
- nativeParam
- );
+ var result = native_.callSync(
+ 'MessagePortManagerRequestTrustedLocalMessagePort',
+ nativeParam
+ );
- if (native_.isSuccess(result)) {
- var returnObject = new LocalMessagePort(args.localMessagePortName, true);
- ports[nativeParam.localMessagePortName] = native_.getResultObject(result);
- } else {
- throw native_.getErrorObject(result);
+ if (native_.isSuccess(result)) {
+ var id = native_.getResultObject(result);
+ ports[nativeParam.localMessagePortName] = new LocalMessagePort(args.localMessagePortName, true, id);
+ } else {
+ throw native_.getErrorObject(result);
+ }
}
- return returnObject;
+ return ports[args.localMessagePortName];
};
MessagePortManager.prototype.requestRemoteMessagePort = function(
return returnObject;
};
-function LocalMessagePort(messagePortName, isTrusted) {
+function LocalMessagePort(messagePortName, isTrusted, id) {
Object.defineProperties(this, {
messagePortName: { value: messagePortName, writable: false, enumerable: true },
- isTrusted: { value: !!isTrusted, writable: false, enumerable: true }
+ isTrusted: { value: !!isTrusted, writable: false, enumerable: true },
+ _id: { value: id, writable: false, enumerable: false }
});
}
native_.addListener(LOCAL_MESSAGE_PORT_LISTENER_ID, MessagePortChangeCallback);
- var portId = ports[this.messagePortName];
+ var portId = ports[this.messagePortName]._id;
if (!callbacks.hasOwnProperty(portId)) callbacks[portId] = [];
]);
var toDelete;
- var listeners = callbacks[ports[this.messagePortName]];
+ var listeners = callbacks[ports[this.messagePortName]._id];
for (var key in listeners) {
var listenerId = listeners[key][1];
data: filteredData,
trusted: this.isTrusted,
localPortId: args.localMessagePort
- ? ports[args.localMessagePort.messagePortName]
+ ? ports[args.localMessagePort.messagePortName]._id
: -1
};