Skip to content

Commit

Permalink
move createPacketBuffer and parsePacketData functions to serializer, …
Browse files Browse the repository at this point in the history
…also move protocol's exports to serializer
  • Loading branch information
rom1504 committed May 23, 2015
1 parent 2b1a0f8 commit 1a9e08c
Show file tree
Hide file tree
Showing 14 changed files with 253 additions and 225 deletions.
5 changes: 1 addition & 4 deletions browser.js
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
module.exports = {
Client: require('./dist/client'),
protocol: require('./dist/protocol')
};
module.exports = require('./dist/browser.js');
2 changes: 1 addition & 1 deletion examples/client_chat/client_chat.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var readline = require('readline');
var color = require("ansi-color").set;
var mc = require('../../');
var states = mc.protocol.states;
var states = mc.states;
var util = require('util');

var colors = new Array();
Expand Down
2 changes: 1 addition & 1 deletion examples/client_echo/client_echo.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var mc = require('../../')
, states = mc.protocol.states
, states = mc.states

var client = mc.createClient({
username: process.env.MC_USERNAME,
Expand Down
14 changes: 7 additions & 7 deletions examples/proxy/proxy.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var mc = require('../../');

var states = mc.protocol.states;
var states = mc.states;
function printHelpAndExit(exitCode) {
console.log("usage: node proxy.js [<options>...] <target_srv> <user> [<password>]");
console.log("options:");
Expand Down Expand Up @@ -133,9 +133,9 @@ srv.on('login', function(client) {
targetClient.on('raw', function(buffer, state) {
if(client.state != states.PLAY || state != states.PLAY)
return;
var packetId = mc.protocol.types.varint[0](buffer, 0);
var packetData = mc.protocol.parsePacketData(buffer, state, false, {"packet": 1}).results;
var packetBuff = mc.protocol.createPacketBuffer(packetData.id, packetData.state, packetData, true);
var packetId = mc.types.varint[0](buffer, 0);
var packetData = mc.parsePacketData(buffer, state, false, {"packet": 1}).results;
var packetBuff = mc.createPacketBuffer(packetData.id, packetData.state, packetData, true);
if(buffertools.compare(buffer, packetBuff) != 0) {
console.log("client<-server: Error in packetId " + state + ".0x" + packetId.value.toString(16));
console.log(buffer.toString('hex'));
Expand All @@ -152,9 +152,9 @@ srv.on('login', function(client) {
client.on('raw', function(buffer, state) {
if(state != states.PLAY || targetClient.state != states.PLAY)
return;
var packetId = mc.protocol.types.varint[0](buffer, 0);
var packetData = mc.protocol.parsePacketData(buffer, state, true, {"packet": 1}).results;
var packetBuff = mc.protocol.createPacketBuffer(packetData.id, packetData.state, packetData, false);
var packetId = mc.types.varint[0](buffer, 0);
var packetData = mc.parsePacketData(buffer, state, true, {"packet": 1}).results;
var packetBuff = mc.createPacketBuffer(packetData.id, packetData.state, packetData, false);
if(buffertools.compare(buffer, packetBuff) != 0) {
console.log("client->server: Error in packetId " + state + ".0x" + packetId.value.toString(16));
console.log(buffer.toString('hex'));
Expand Down
2 changes: 1 addition & 1 deletion examples/server/server.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var mc = require('../../');
var states = mc.protocol.states;
var states = mc.states;

var options = {
motd: 'Vox Industries',
Expand Down
19 changes: 19 additions & 0 deletions src/browser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
var packets = require("../protocol/protocol");
var readPackets = require("./packets").readPackets;
var packetIndexes = readPackets(packets, states);
var utils = require("./utils");
var serializer = require("./transforms/serializer");

module.exports = {
Client: require('./client'),
protocol: require('./protocol'),
createPacketBuffer: serializer.createPacketBuffer,
parsePacketData: serializer.parsePacketData,
packetFields: packetIndexes.packetFields,
packetNames: packetIndexes.packetNames,
packetIds: packetIndexes.packetIds,
packetStates: packetIndexes.packetStates,
types: serializer.types,
get: serializer.get,
evalCondition: utils.evalCondition,
};
33 changes: 14 additions & 19 deletions src/client.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
var EventEmitter = require('events').EventEmitter
, util = require('util')
, protocol = require('./protocol')
, createPacketBuffer = protocol.createPacketBuffer
, compressPacketBuffer = protocol.compressPacketBuffer
, oldStylePacket = protocol.oldStylePacket
, newStylePacket = protocol.newStylePacket
, parsePacketData = protocol.parsePacketData
, parseNewStylePacket = protocol.parseNewStylePacket
, packetIds = protocol.packetIds
, packetNames = protocol.packetNames
, states = protocol.states
, debug = require('./debug')
, serializer = require('./transforms/serializer')
, compression = require('./transforms/compression')
, framing = require('./transforms/framing')
, crypto = require('crypto')
, states = serializer.states
;

var packets = require("../protocol/protocol");
var readPackets = require("./packets").readPackets;
var packetIndexes = readPackets(packets, states);

module.exports = Client;

function Client(isServer) {
Expand Down Expand Up @@ -56,14 +51,14 @@ function Client(isServer) {

this.on('newListener', function(event, listener) {
var direction = this.isServer ? 'toServer' : 'toClient';
if(protocol.packetStates[direction].hasOwnProperty(event) || event === "packet") {
if(packetIndexes.packetStates[direction].hasOwnProperty(event) || event === "packet") {
if(typeof this.packetsToParse[event] === "undefined") this.packetsToParse[event] = 1;
else this.packetsToParse[event] += 1;
}
});
this.on('removeListener', function(event, listener) {
var direction = this.isServer ? 'toServer' : 'toClient';
if(protocol.packetStates[direction].hasOwnProperty(event) || event === "packet") {
if(packetIndexes.packetStates[direction].hasOwnProperty(event) || event === "packet") {
this.packetsToParse[event] -= 1;
}
});
Expand All @@ -75,19 +70,19 @@ util.inherits(Client, EventEmitter);
Client.prototype.on = function(type, func) {
var direction = this.isServer ? 'toServer' : 'toClient';
if(Array.isArray(type)) {
arguments[0] = protocol.packetNames[type[0]][direction][type[1]];
arguments[0] = packetIndexes.packetNames[type[0]][direction][type[1]];
} else if(typeof type === "number") {
arguments[0] = protocol.packetNames[this.state][direction][type];
arguments[0] = packetIndexes.packetNames[this.state][direction][type];
}
EventEmitter.prototype.on.apply(this, arguments);
};

Client.prototype.onRaw = function(type, func) {
var arg = "raw.";
if(Array.isArray(type)) {
arg += protocol.packetNames[type[0]][direction][type[1]];
arg += packetIndexes.packetNames[type[0]][direction][type[1]];
} else if(typeof type === "number") {
arg += protocol.packetNames[this.state][direction][type];
arg += packetIndexes.packetNames[this.state][direction][type];
} else {
arg += type;
}
Expand Down Expand Up @@ -136,7 +131,7 @@ Client.prototype.setSocket = function(socket) {

this.deserializer.on('data', (parsed) => {
var packet = parsed.results;
var packetName = protocol.packetNames[packet.state][this.isServer ? 'toServer' : 'toClient'][packet.id];
var packetName = packetIndexes.packetNames[packet.state][this.isServer ? 'toServer' : 'toClient'][packet.id];
this.emit('packet', packet);
this.emit(packetName, packet);
this.emit('raw.' + packetName, parsed.buffer, packet.state);
Expand Down Expand Up @@ -185,8 +180,8 @@ Client.prototype.write = function(packetId, params) {
packetId = packetId[1];
}
if(typeof packetId === "string")
packetId = protocol.packetIds[this.state][this.isServer ? "toClient" : "toServer"][packetId];
var packetName = protocol.packetNames[this.state][this.isServer ? "toClient" : "toServer"][packetId];
packetId = packetIndexes.packetIds[this.state][this.isServer ? "toClient" : "toServer"][packetId];
var packetName = packetIndexes.packetNames[this.state][this.isServer ? "toClient" : "toServer"][packetId];
debug("writing packetId " + this.state + "." + packetName + " (0x" + packetId.toString(16) + ")");
debug(params);
this.serializer.write({ packetId, params });
Expand Down
31 changes: 25 additions & 6 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var assert = require('assert')
, crypto = require('crypto')
, bufferEqual = require('buffer-equal')
, protocol = require('./protocol')
, Client = require('./client')
, dns = require('dns')
, net = require('net')
Expand All @@ -10,8 +9,10 @@ var assert = require('assert')
, getSession = Yggdrasil.getSession
, validateSession = Yggdrasil.validateSession
, joinServer = Yggdrasil.joinServer
, states = protocol.states
, serializer = require("./transforms/serializer")
, states = serializer.states
, debug = require("./debug")
, utils = require("./utils")
;

var ursa;
Expand All @@ -23,14 +24,32 @@ try {
ursa = require("ursa-purejs");
}

var version = 47;
var minecraftVersion = '1.8.1';

var packets = require("../protocol/protocol");
var readPackets = require("./packets").readPackets;
var packetIndexes = readPackets(packets, states);

module.exports = {
createClient: createClient,
createServer: createServer,
Client: Client,
Server: Server,
states: states,
createPacketBuffer: serializer.createPacketBuffer,
parsePacketData: serializer.parsePacketData,
packetFields: packetIndexes.packetFields,
packetNames: packetIndexes.packetNames,
packetIds: packetIndexes.packetIds,
packetStates: packetIndexes.packetStates,
types: serializer.types,
get: serializer.get,
evalCondition: utils.evalCondition,
ping: require('./ping'),
protocol: protocol,
yggdrasil: Yggdrasil,
version: version,
minecraftVersion: minecraftVersion
};

function createServer(options) {
Expand Down Expand Up @@ -108,8 +127,8 @@ function createServer(options) {
function onPing(packet) {
var response = {
"version": {
"name": protocol.minecraftVersion,
"protocol": protocol.version
"name": minecraftVersion,
"protocol": version
},
"players": {
"max": server.maxPlayers,
Expand Down Expand Up @@ -291,7 +310,7 @@ function createClient(options) {

function onConnect() {
client.write(0x00, {
protocolVersion: protocol.version,
protocolVersion: version,
serverHost: host,
serverPort: port,
nextState: 2
Expand Down
3 changes: 1 addition & 2 deletions src/ping.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var net = require('net')
, Client = require('./client')
, protocol = require('./protocol')
, states = protocol.states
, states = require('./transforms/serializer').states
;

module.exports = ping;
Expand Down
Loading

0 comments on commit 1a9e08c

Please sign in to comment.