35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
const { RpcError } = require('../index').constructors;
|
|
const GZIPPacked = require('./GZIPPacked');
|
|
|
|
class RPCResult {
|
|
static CONSTRUCTOR_ID = 0xf35c6d01;
|
|
|
|
static classType = 'constructor';
|
|
|
|
constructor(reqMsgId, body, error) {
|
|
this.CONSTRUCTOR_ID = 0xf35c6d01;
|
|
this.reqMsgId = reqMsgId;
|
|
this.body = body;
|
|
this.error = error;
|
|
this.classType = 'constructor';
|
|
}
|
|
|
|
static async fromReader(reader) {
|
|
const msgId = reader.readLong();
|
|
const innerCode = reader.readInt(false);
|
|
if (innerCode === RpcError.CONSTRUCTOR_ID) {
|
|
return new RPCResult(msgId, undefined, RpcError.fromReader(reader));
|
|
}
|
|
if (innerCode === GZIPPacked.CONSTRUCTOR_ID) {
|
|
return new RPCResult(msgId, (await GZIPPacked.fromReader(reader)).data);
|
|
}
|
|
reader.seek(-4);
|
|
// This reader.read() will read more than necessary, but it's okay.
|
|
// We could make use of MessageContainer's length here, but since
|
|
// it's not necessary we don't need to care about it.
|
|
return new RPCResult(msgId, reader.read(), undefined);
|
|
}
|
|
}
|
|
|
|
module.exports = RPCResult;
|