diff --git a/app/client/services/buffer.js b/app/client/services/buffer.js index a77d4ce..a3cd2f2 100644 --- a/app/client/services/buffer.js +++ b/app/client/services/buffer.js @@ -2,15 +2,43 @@ * Buffer Service */ -module.exports = function() { +module.exports = function(socket) { + socket.on('buffer:info', function(string) { + $('#buffer').append('> ' + string + '
\n'); + $('#buffer').scrollTop($('#buffer').prop('scrollHeight')); + }); + + socket.on('buffer:success', function(string) { + $('#buffer').append('> ' + string + '
\n'); + $('#buffer').scrollTop($('#buffer').prop('scrollHeight')); + }); + + socket.on('buffer:error', function(string) { + $('#buffer').append('> ' + error + '
') + $('#buffer').scrollTop($('#buffer').prop('scrollHeight')); + }); + + socket.on('bot:message', function(string) { + $('#buffer').append(string + '
'); + $('#buffer').scrollTop($('#buffer').prop('scrollHeight')); + }); + + socket.on('reconnect', function() { + $('#buffer').append('> Connected to chat server established
') + $('#buffer').scrollTop($('#buffer').prop('scrollHeight')); + }); + + socket.on('disconnect', function() { + $('#buffer').append('> Connection to chat server has been lost. Reconnecting...
') + $('#buffer').scrollTop($('#buffer').prop('scrollHeight')); + }); + + // service exposes this return { append: function(string) { $('#buffer').append(string + '
\n'); - }, - error: function(error) { - $('#buffer').append('' + error.errorMessage + '
') + $('#buffer').scrollTop($('#buffer').prop('scrollHeight')); } } - }; diff --git a/app/server/bot/events/index.js b/app/server/bot/events/index.js new file mode 100644 index 0000000..0150d74 --- /dev/null +++ b/app/server/bot/events/index.js @@ -0,0 +1,56 @@ +module.exports = function(socket) { + + var bot = socket.mcbot; + + // login event + bot.on('login', function() { + socket.emit('buffer:success', 'Successfully logged in as ' + bot.username + ' with entity id ' + bot.entity.id); + socket.emit('bot:login') + }); + + // spawn event + bot.on('spawn', function() { + var pos = bot.entity.position; + socket.emit('buffer:info', 'Spawned at X:' + pos.x + ', Y:' + pos.y + ', Z:' + pos.z); + }); + + // message event + bot.on('message', function(message) { + + // empty buffer + var buffer = ''; + + if (message.extra) { + + // for each piece of text + message.extra.forEach(function(data) { + var text = data.text; // get the text + if (text) { // if text is available + text = text.replace(/§k/ig, ''); // remove crazy format + text = text.replace(/§l/ig, ''); // remove bold format + buffer += text; // add the text to the buffer + } + }); + + } else if (message.text) { + buffer += message.text; + } else { + return; + } + + if (buffer.length === 0) { + return; + } + + // format the buffer with the correct coloring + buffer = buffer.replace(/§([0-9abcdef])([^§]*)/ig, function replace(regex, color, msg) { + return ''+msg+''; + }); + + // send line back to the client + socket.emit('bot:message', buffer); + console.log(buffer); + + }); + +}; \ No newline at end of file diff --git a/app/server/bot/index.js b/app/server/bot/index.js new file mode 100644 index 0000000..a0f60a6 --- /dev/null +++ b/app/server/bot/index.js @@ -0,0 +1,5 @@ +module.exports = function(socket) { + + require('./events')(socket); + +}; diff --git a/app/server/bot.js b/app/server/bot_working.js similarity index 100% rename from app/server/bot.js rename to app/server/bot_working.js diff --git a/app/server/index.js b/app/server/index.js index 7996e1c..6597547 100755 --- a/app/server/index.js +++ b/app/server/index.js @@ -34,5 +34,5 @@ app.use('/', express.static(path.join(__dirname, '../../public'))); // initialize http and socket servers server.listen(3000, function() { - console.log('> Server running on port 3000') + console.log('\033c> Server running on port 3000\n'); }); diff --git a/app/server/sockets/events/connection.js b/app/server/sockets/events/connection.js new file mode 100644 index 0000000..7d6fff0 --- /dev/null +++ b/app/server/sockets/events/connection.js @@ -0,0 +1,33 @@ +var mineflayer = require('mineflayer'); + +module.exports = function(socket) { + + socket.on('server:connect', function(data, response) { + + if (socket.mcbot) { + socket.mcbot.end(); + } + + // create mineflayer bot + socket.mcbot = mineflayer.createBot({ + host: data.hostname, + port: data.port, + username: data.username, + password: data.password + }); + + // prepare for errors + socket.mcbot.on('error', function(error) { + socket.emit('buffer:error', error); + }); + + // bind bot events + require('../../bot')(socket); + + // debug + console.log('login > ' + data.hostname + ':' + data.port + ' - ' + ' Username: ' + data.username); + socket.emit('buffer:info', 'Connecting to server ' + data.hostname + ':' + data.port); + + }); + +}; diff --git a/app/server/sockets/events/disconnection.js b/app/server/sockets/events/disconnection.js new file mode 100644 index 0000000..93107a0 --- /dev/null +++ b/app/server/sockets/events/disconnection.js @@ -0,0 +1,9 @@ +module.exports = function(socket) { + + socket.on('disconnect', function() { + if (socket.mcbot) { + socket.mcbot.end(); + } + }); + +}; \ No newline at end of file diff --git a/app/server/sockets/index.js b/app/server/sockets/index.js index 50bf010..ed2c823 100755 --- a/app/server/sockets/index.js +++ b/app/server/sockets/index.js @@ -5,22 +5,9 @@ module.exports = function(io) { io.on('connection', function(socket) { - socket.on('server:connect', function(data, response) { - socket.mcbot = mineflayer.createBot({ - host: data.hostname, - port: data.port, - username: data.username, - password: data.password - }); - socket.mcbot.on('error', function(error) { - console.log(error); - socket.emit('bot:error', error); - }); - }); - - socket.on('disconnect', function() { - socket.mcbot = null; - }); + // bind all events to the socket + require('./events/connection')(socket); + require('./events/disconnection')(socket); }); diff --git a/public/css/style.css b/public/css/style.css index 7960f22..e09192f 100755 --- a/public/css/style.css +++ b/public/css/style.css @@ -1,3 +1,10 @@ +body, html { + width: 100%; + height: 100%; + margin: 0; + overflow: hidden; +} + body { padding-top: 80px; } @@ -10,6 +17,8 @@ body { right: 0; color: #D6D6D6; padding: 0 20px; + overflow: scroll; + padding-bottom: 10px; } #chat { position: absolute; diff --git a/public/templates/windows/nav.html b/public/templates/windows/nav.html index 287eeb3..2891387 100644 --- a/public/templates/windows/nav.html +++ b/public/templates/windows/nav.html @@ -1,7 +1,7 @@