Ich habe mir mal den Umstand gemacht um einen Team-Patcher aufzubauen welcher über NodeJS läuft.
Kann ohne Probleme in eine .exe umgewandelt werden.
Der Client kommt auf eurem Webspace/Domain in den Ordner "patcher".
- const http = require('http');
- const fs = require('fs');
- const path = require('path');
- const ProgressBar = require('progress');
- const websiteUrl = 'https://EUREWEBSITE.com/';
- const targetFolder = 'patcher';
- const filelistUrl = 'https://EUREWEBSITE.com/patcher.txt';
- function downloadFile(url, destination) {
- return new Promise((resolve, reject) => {
- const fileStream = fs.createWriteStream(destination);
- http.get(url, (response) => {
- if (response.statusCode !== 200) {
- reject(`HTTP error! Status: ${response.statusCode}`);
- return;
- }
- const progressBar = new ProgressBar(`[:bar] :percent :etas`, {
- width: 20,
- total: parseInt(response.headers['content-length'], 10),
- });
- response.on('data', (chunk) => {
- progressBar.tick(chunk.length);
- fileStream.write(chunk);
- });
- response.on('end', () => {
- fileStream.end();
- resolve();
- });
- response.on('error', (error) => {
- reject(error);
- });
- });
- });
- }
- async function createDirectoryIfNotExists(directoryPath) {
- try {
- await fs.promises.access(directoryPath, fs.constants.F_OK);
- } catch (error) {
- if (error.code === 'ENOENT') {
- await fs.promises.mkdir(directoryPath, { recursive: true });
- } else {
- throw error;
- }
- }
- }
- async function main() {
- try {
- await createDirectoryIfNotExists(targetFolder);
- const filelistFilePath = path.join(targetFolder, 'patcher.txt');
- await downloadFile(filelistUrl, filelistFilePath);
- const filelistContent = fs.readFileSync(filelistFilePath, 'utf-8');
- const fileList = filelistContent.split('\n');
- for (const fileName of fileList) {
- if (fileName) {
- const fileUrl = `${websiteUrl}patcher/${fileName}`;
- const filePath = path.join(targetFolder, fileName);
- try {
- await createDirectoryIfNotExists(path.dirname(filePath));
- await downloadFile(fileUrl, filePath);
- console.log(`Datei/Ordner ${fileName} wurde heruntergeladen.`);
- } catch (error) {
- console.error(`Fehler beim Herunterladen von ${fileName}:`, error);
- }
- }
- }
- console.log('Download abgeschlossen.');
- } catch (error) {
- console.error('Fehler beim Herunterladen von Inhalten:', error);
- }
- }
- main();
Dies ist unsere patcher.js um die aktuellen Dateien runterzuladen.
Diese Datei kann in eine .exe umgewandelt werden und dann einfach an die Teamler geschickt werden.
Um die patcher.txt zu erstellen habe Ich ein Script für mich geschrieben
const fs = require('fs');
const path = require('path');
function listFilesAndFolders(dir) {
const items = fs.readdirSync(dir, { withFileTypes: true });
const result = [];
for (const item of items) {
const itemPath = path.join(dir, item.name);
if (item.isDirectory()) {
const subItems = listFilesAndFolders(itemPath);
subItems.forEach((subItem) => result.push(path.join(item.name, subItem)));
} else {
result.push(item.name);
}
}
return result;
}
function createPatcherTextFile() {
const patcherDir = path.join(process.cwd(), 'patcher'); // Pfad zum /patcher/ Ordner
const fileList = listFilesAndFolders(patcherDir); // Verzeichnisinhalt von /patcher/
const patcherTxtContent = fileList.join('\n');
fs.writeFileSync('patcher.txt', patcherTxtContent, 'utf-8');
console.log('patcher.txt wurde erstellt.');
}
createPatcherTextFile();
Hier wird aus dem "patcher" Pfad auf dem Server alles gelesen und gespeichert.
Die patcher.txt wird im "dir" erstellt.
Mit freundlichen Grüßen