fix: broken backwards compatibity

This commit is contained in:
Connor Peet 2018-09-14 17:17:01 -07:00
Родитель d5525d3a25
Коммит 216f30e73b
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: CF8FD2EA0DBC61BD
2 изменённых файлов: 31 добавлений и 2 удалений

Просмотреть файл

@ -102,6 +102,29 @@ describe('RPC', () => {
},
}));
it('does not break on an empty/errorful ready reply (back compat)', () =>
testMarbles({
rpcInstance: 'a--de',
remoteContx: '-bc--',
definitions: {
a: { action: Action.IsReady, value: false },
b: expectReady,
c: {
action: Action.Send,
data: makeReply(-1, 0, null),
},
d: {
action: Action.Receive,
subset: {
type: 'reply',
id: -1,
result: null,
},
},
e: { action: Action.IsReady, value: true },
},
}));
it('should reject methods from invalid service IDs', () =>
testMarbles({
rpcInstance: '---',

Просмотреть файл

@ -285,8 +285,14 @@ export class RPC extends EventEmitter {
// calls starting from 0.
if (this.isReadySignal(packet)) {
this.remoteProtocolVersion =
packet.type === 'method' ? packet.params.protocolVersion : packet.result.protocolVersion;
const params: { protocolVersion: string } | undefined =
packet.type === 'method' ? packet.params : packet.result;
if (params && params.protocolVersion) {
this.remoteProtocolVersion = params.protocolVersion;
} else {
this.remoteProtocolVersion = this.remoteProtocolVersion;
}
this.callCounter = 0;
this.reorder.reset(packet.counter);
this.emit('isReady', true);