From 74a3e6db452f27c24d5cc476fb38b482f6b4ce25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filiph=20Sandstr=C3=B6m?= Date: Tue, 20 Dec 2016 17:42:58 +0100 Subject: [PATCH] Add documentation. Add encryption toggle. --- src/createClient.js | 2 ++ src/createServer.js | 52 ++++++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/createClient.js b/src/createClient.js index 3cd58e1..55d8f08 100644 --- a/src/createClient.js +++ b/src/createClient.js @@ -10,6 +10,8 @@ batchProto.addTypes(require("./datatypes/minecraft")); batchProto.addType("insideBatch",["endOfArray",{"type":["buffer",{"countType":"i32"}]}]); function createClient(options) { + return null; //FIXME + assert.ok(options, 'options is required'); var port = options.port || 19132; var host = options.host || 'localhost'; diff --git a/src/createServer.js b/src/createServer.js index da78b6f..e4e103d 100644 --- a/src/createServer.js +++ b/src/createServer.js @@ -20,66 +20,64 @@ batchProto.addType('insideBatch', ['endOfArray', { }]); const PUBLIC_KEY = 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8ELkixyLcwlZryUQcu1TvPOmI2B7vX83ndnWRUaXm74wFfa5f/lwQNTfrLVHa2PmenpGI6JhIMUJaWZrjmMj90NoKNFSNBuKdm8rYiXsfaz3K36x/1U26HpG0ZxK/V1V'; -function createServer(options) { + +// createServer (object, boolean) +// +// Create & launch a MCPE raknet-based server. +// object: raknet options +// encryption: enable/disable encryption +function createServer(options, encryption) { options = options || {}; - var port = options.port != null ? + const port = options.port != null ? options.port : options['server-port'] != null ? options['server-port'] : 19132; - var host = options.host || '0.0.0.0'; + const host = options.host || '0.0.0.0'; options.customPackets = require('../data/protocol'); options.customTypes = require('./datatypes/minecraft'); - var server = raknet.createServer(options); + let server = raknet.createServer(options); server.name = options.name || 'Minecraft Server'; - server.motd = options.motd || 'A Minecraft server'; - server.maxPlayers = options['max-players'] || 20; - server.playerCount = 0; - + server.motd = options.motd || 'A Minecraft server'; //FIXME + server.maxPlayers = options['max-players'] || 20; //FIXME + server.playerCount = 0; //FIXME + server.on('connection', function(client) { - - client.receiveCounter=0; - client.sendCounter=0; - - client.encryptionEnabled = false; + client.receiveCounter = 0; + client.sendCounter = 0; + client.encryptionEnabled = encryption ? encryption : true; let proto = new ProtoDef(); proto.addTypes(require('./datatypes/minecraft')); proto.addTypes(require('../data/protocol').types); client.mcpePacketSerializer = new Serializer(proto, 'mcpe_packet'); - - client.on('mcpe', packet => { - client.emit(packet.name, packet.params) - }); client.writeMCPE = (name, params) => { - if (client.encryptionEnabled) { + if (client.encryptionEnabled) client.mcpePacketSerializer.write({ name, params }); - } - else { + else client.writeEncapsulated('mcpe', { name, params }); - } }; - client.writeBatch = function(packets) { const payload = zlib.deflateSync(batchProto.createPacketBuffer('insideBatch', - packets.map(packet => - client.mcpePacketSerializer.createPacketBuffer(packet)))); + packets.map(packet => client.mcpePacketSerializer.createPacketBuffer(packet)))); client.writeMCPE('batch', { payload: payload }); }; + client.on('mcpe', packet => { + client.emit(packet.name, packet.params) + }); client.on('batch', function(packet) { var buf = zlib.inflateSync(packet.payload); var packets = batchProto.parsePacketBuffer('insideBatch', buf).data; packets.forEach(packet => client.readEncapsulatedPacket(Buffer.concat([new Buffer([0xfe]), packet]))); }); - client.on('game_login', (packet) => { try { const dataProto = new ProtoDef(); @@ -95,6 +93,7 @@ function createServer(options) { }] }]]); + //FIXME: Xbox & Non-Xbox support let body = dataProto.parsePacketBuffer('data_chain', zlib.inflateSync(packet.body)), chain = null, decode = null, @@ -115,8 +114,9 @@ function createServer(options) { skinData: data.SkinData, skinId: data.SkinId }) - } catch(err) { + } catch (err) { console.log(err); + return null; } }); });