ssn/src/getFileContents.ts

40 lines
1.2 KiB
TypeScript
Raw Normal View History

2018-06-21 15:44:13 +02:00
import * as http from 'http';
import { Product } from './interfaces/ISettings';
2018-06-21 15:44:13 +02:00
export default function getFileContents(product: string = 'assets_swtor_de_de', from: number, to: number): Promise<Buffer> {
return new Promise((resolve, reject) => {
//Generate URL
const path = `/patch/${product}/${product}_${from}to${to}.solidpkg`;
2018-06-21 15:44:13 +02:00
const request = http.request({
family: 4,
host: 'cdn-patch.swtor.com',
path,
}, (response) => {
if (response.statusCode !== 200) {
return reject(`Expected status code 200 but received ${response.statusCode}`);
}
const headerLength = Number(response.headers['content-length']);
const chunkList: Buffer[] = [];
let totalLength = 0;
response.on('data', (chunk: Buffer) => {
chunkList.push(chunk);
totalLength += chunk.length;
});
response.on('end', () => {
if (totalLength !== headerLength) {
return reject(`Expected length ${headerLength} but received ${totalLength}`);
}
const fileContents = Buffer.concat(chunkList, totalLength);
resolve(fileContents);
});
2018-06-21 15:44:13 +02:00
});
request.on('error', (e) => {
reject(e);
});
request.end();
2018-06-21 15:44:13 +02:00
});
}