mirror of
https://github.com/danbulant/flying-squid
synced 2026-07-05 03:00:46 +00:00
emit events instead of directly logging, add longjohn, add chat plugins
This commit is contained in:
parent
8a4d7a7b9a
commit
c3f0645771
8 changed files with 156 additions and 72 deletions
52
doc/api.md
52
doc/api.md
|
|
@ -31,15 +31,26 @@
|
||||||
- [serv.players](#servplayers)
|
- [serv.players](#servplayers)
|
||||||
- [serv.uuidToPlayer](#servuuidtoplayer)
|
- [serv.uuidToPlayer](#servuuidtoplayer)
|
||||||
- [serv.world](#servworld)
|
- [serv.world](#servworld)
|
||||||
|
- [Events](#events)
|
||||||
|
- ["error" (error)](#error-error)
|
||||||
|
- ["listening" (port)](#listening-port)
|
||||||
- [Methods](#methods)
|
- [Methods](#methods)
|
||||||
- [serv.createLog()](#servcreatelog)
|
- [serv.createLog()](#servcreatelog)
|
||||||
- [serv.log(message)](#servlogmessage)
|
- [serv.log(message)](#servlogmessage)
|
||||||
|
- [serv.broadcast(message[,color])](#servbroadcastmessagecolor)
|
||||||
- [Player](#player)
|
- [Player](#player)
|
||||||
- [Properties](#properties-1)
|
- [Properties](#properties-1)
|
||||||
- [player.entity](#playerentity)
|
- [player.entity](#playerentity)
|
||||||
|
- [Events](#events-1)
|
||||||
|
- ["connected"](#connected)
|
||||||
|
- ["spawned"](#spawned)
|
||||||
|
- ["disconnected"](#disconnected)
|
||||||
|
- ["error" (error)](#error-error-1)
|
||||||
|
- ["chat" (message)](#chat-message)
|
||||||
- [Methods](#methods-1)
|
- [Methods](#methods-1)
|
||||||
- [player.login()](#playerlogin)
|
- [player.login()](#playerlogin)
|
||||||
- [player.others()](#playerothers)
|
- [player.others()](#playerothers)
|
||||||
|
- [player.chat(message)](#playerchatmessage)
|
||||||
- [Low level properties](#low-level-properties)
|
- [Low level properties](#low-level-properties)
|
||||||
- [player._client](#player_client)
|
- [player._client](#player_client)
|
||||||
- [Low level methods](#low-level-methods)
|
- [Low level methods](#low-level-methods)
|
||||||
|
|
@ -157,16 +168,30 @@ Object uuid to players
|
||||||
|
|
||||||
The map
|
The map
|
||||||
|
|
||||||
|
### Events
|
||||||
|
|
||||||
|
#### "error" (error)
|
||||||
|
|
||||||
|
Fires when there is an error.
|
||||||
|
|
||||||
|
#### "listening" (port)
|
||||||
|
|
||||||
|
Fires when the server is listening.
|
||||||
|
|
||||||
### Methods
|
### Methods
|
||||||
|
|
||||||
#### serv.createLog()
|
#### serv.createLog()
|
||||||
|
|
||||||
create the log file
|
creates the log file
|
||||||
|
|
||||||
#### serv.log(message)
|
#### serv.log(message)
|
||||||
|
|
||||||
logs a `message`
|
logs a `message`
|
||||||
|
|
||||||
|
#### serv.broadcast(message[,color])
|
||||||
|
|
||||||
|
broadcasts `message` to all the players with the optional `color`.
|
||||||
|
|
||||||
|
|
||||||
## Player
|
## Player
|
||||||
|
|
||||||
|
|
@ -176,6 +201,27 @@ logs a `message`
|
||||||
|
|
||||||
The entity of the player, of type `CraftyJS.Entity`
|
The entity of the player, of type `CraftyJS.Entity`
|
||||||
|
|
||||||
|
### Events
|
||||||
|
|
||||||
|
#### "connected"
|
||||||
|
|
||||||
|
Fires when the player is connected
|
||||||
|
|
||||||
|
#### "spawned"
|
||||||
|
|
||||||
|
Fires when the player is spawned
|
||||||
|
|
||||||
|
#### "disconnected"
|
||||||
|
|
||||||
|
Fires when the player disconnected
|
||||||
|
|
||||||
|
#### "error" (error)
|
||||||
|
|
||||||
|
Fires when there is an error.
|
||||||
|
|
||||||
|
#### "chat" (message)
|
||||||
|
|
||||||
|
Fires when the player says `message`.
|
||||||
|
|
||||||
### Methods
|
### Methods
|
||||||
|
|
||||||
|
|
@ -187,6 +233,10 @@ login
|
||||||
|
|
||||||
return the other players than `player`
|
return the other players than `player`
|
||||||
|
|
||||||
|
#### player.chat(message)
|
||||||
|
|
||||||
|
sends `message` to the player
|
||||||
|
|
||||||
### Low level properties
|
### Low level properties
|
||||||
|
|
||||||
#### player._client
|
#### player._client
|
||||||
|
|
|
||||||
10
index.js
10
index.js
|
|
@ -5,6 +5,8 @@ var path = require('path');
|
||||||
var requireIndex = require('requireindex');
|
var requireIndex = require('requireindex');
|
||||||
var serverPlugins = requireIndex(path.join(__dirname, 'lib', 'serverPlugins'));
|
var serverPlugins = requireIndex(path.join(__dirname, 'lib', 'serverPlugins'));
|
||||||
var playerPlugins = requireIndex(path.join(__dirname, 'lib', 'playerPlugins'));
|
var playerPlugins = requireIndex(path.join(__dirname, 'lib', 'playerPlugins'));
|
||||||
|
var Player=require("./lib/player");
|
||||||
|
require("longjohn");
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
createMCServer:createMCServer
|
createMCServer:createMCServer
|
||||||
|
|
@ -36,17 +38,15 @@ MCServer.prototype.connect = function(options) {
|
||||||
}
|
}
|
||||||
|
|
||||||
self._server.on('error', function(error) {
|
self._server.on('error', function(error) {
|
||||||
console.log('[ERR] ', error.stack);
|
self.emit('error',error);
|
||||||
self.log('[ERR]: Server:', error.stack);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
self._server.on('listening', function() {
|
self._server.on('listening', function() {
|
||||||
console.log('[INFO]: Server listening on port', self._server.socketServer.address().port);
|
self.emit('listening',self._server.socketServer.address().port);
|
||||||
self.log('[INFO]: Server listening on port', self._server.socketServer.address().port);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
self._server.on('login', function (client) {
|
self._server.on('login', function (client) {
|
||||||
var player={};
|
var player=new Player();
|
||||||
player._client=client;
|
player._client=client;
|
||||||
for(var pluginName in playerPlugins) {
|
for(var pluginName in playerPlugins) {
|
||||||
playerPlugins[pluginName](self, player, options);
|
playerPlugins[pluginName](self, player, options);
|
||||||
|
|
|
||||||
12
lib/player.js
Normal file
12
lib/player.js
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
var util = require('util');
|
||||||
|
var EventEmitter = require('events').EventEmitter;
|
||||||
|
|
||||||
|
module.exports = Player;
|
||||||
|
|
||||||
|
function Player()
|
||||||
|
{
|
||||||
|
EventEmitter.call(this);
|
||||||
|
this._client=null;
|
||||||
|
this._entity=null;
|
||||||
|
}
|
||||||
|
util.inherits(Player, EventEmitter);
|
||||||
15
lib/playerPlugins/chat.js
Normal file
15
lib/playerPlugins/chat.js
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
module.exports=inject;
|
||||||
|
|
||||||
|
function inject(serv,player)
|
||||||
|
{
|
||||||
|
player._client.on('chat', function (data) {
|
||||||
|
serv.broadcast('<' + player._client.username + '>' + ' ' + data.message);
|
||||||
|
player.emit("chat",data.message);
|
||||||
|
});
|
||||||
|
|
||||||
|
function chat(message) {
|
||||||
|
player._client.write('chat', { message: JSON.stringify(message), position: 0 });
|
||||||
|
}
|
||||||
|
|
||||||
|
player.chat=chat;
|
||||||
|
}
|
||||||
33
lib/playerPlugins/log.js
Normal file
33
lib/playerPlugins/log.js
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
module.exports=inject;
|
||||||
|
|
||||||
|
function inject(serv,player)
|
||||||
|
{
|
||||||
|
|
||||||
|
player.on("connected",function(){
|
||||||
|
var addr = player._client.socket.remoteAddress + ':' + player._client.socket.remotePort;
|
||||||
|
console.log("[INFO]: " + player._client.username + ' connected', '(' + addr + ')');
|
||||||
|
serv.log("[INFO]: " + player._client.username + ' connected', '(' + addr + ')');
|
||||||
|
});
|
||||||
|
|
||||||
|
player.on("spawned",function(){
|
||||||
|
console.log("[INFO]: position written, player spawning...");
|
||||||
|
serv.log("[INFO]: position written, player spawning...");
|
||||||
|
});
|
||||||
|
|
||||||
|
player.on("disconnected",function(){
|
||||||
|
console.log("[INFO]: " + player._client.username + ' disconnected', '(' + addr + ')');
|
||||||
|
serv.log("[INFO]: " + player._client.username + ' disconnected', '(' + addr + ')');
|
||||||
|
});
|
||||||
|
|
||||||
|
player.on("error",function(error){
|
||||||
|
console.log('[ERR] ' + error.stack);
|
||||||
|
serv.log('[ERR]: Client: ' + error.stack);
|
||||||
|
});
|
||||||
|
|
||||||
|
player.on("chat",function(message){
|
||||||
|
message = '<' + player._client.username + '>' + ' ' + message;
|
||||||
|
console.log("[INFO] " + message);
|
||||||
|
serv.log("[INFO] " + message);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -72,16 +72,6 @@ function inject(serv,player)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function announceLogin()
|
|
||||||
{
|
|
||||||
player._client.on('chat', function (data) {
|
|
||||||
var message = '<' + client.username + '>' + ' ' + data.message;
|
|
||||||
playerChat(message, client.username);
|
|
||||||
console.log("[INFO] " + message);
|
|
||||||
serv.log("[INFO] " + message);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function fillTabList()
|
function fillTabList()
|
||||||
{
|
{
|
||||||
player._writeOthers('player_info',{
|
player._writeOthers('player_info',{
|
||||||
|
|
@ -146,48 +136,10 @@ function inject(serv,player)
|
||||||
|
|
||||||
function announceJoin()
|
function announceJoin()
|
||||||
{
|
{
|
||||||
broadcast(player._client.username + ' joined the game.', "yellow");
|
serv.broadcast(player._client.username + ' joined the game.', "yellow");
|
||||||
var addr = player._client.socket.remoteAddress + ':' + player._client.socket.remotePort;
|
player.emit("connected");
|
||||||
console.log("[INFO]: " + player._client.username + ' connected', '(' + addr + ')');
|
|
||||||
serv.log("[INFO]: " + player._client.username + ' connected', '(' + addr + ')');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function playerChat(message, exclude, username) {
|
|
||||||
var client;
|
|
||||||
//translate = username ? 'chat.type.text' : 'chat.type.text';
|
|
||||||
username = username || '';
|
|
||||||
for(var clientId in server.clients) {
|
|
||||||
if(!serv._server.clients.hasOwnProperty(clientId)) continue;
|
|
||||||
|
|
||||||
client = serv._server.clients[clientId];
|
|
||||||
if(client !== exclude) {
|
|
||||||
var msg = {
|
|
||||||
"text": username + message
|
|
||||||
};
|
|
||||||
client.write('chat', { message: JSON.stringify(msg), position: 0 });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function broadcast(message, color) {
|
|
||||||
var client;
|
|
||||||
for(var clientId in serv._server.clients) {
|
|
||||||
if(!serv._server.clients.hasOwnProperty(clientId)) continue;
|
|
||||||
|
|
||||||
client = serv._server.clients[clientId];
|
|
||||||
var msg = {
|
|
||||||
"text": message,
|
|
||||||
"color": color
|
|
||||||
};
|
|
||||||
client.write('chat', { message: JSON.stringify(msg), position: 0 });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function login()
|
function login()
|
||||||
{
|
{
|
||||||
if (serv.uuidToPlayer[player._client.uuid]) {
|
if (serv.uuidToPlayer[player._client.uuid]) {
|
||||||
|
|
@ -199,29 +151,24 @@ function inject(serv,player)
|
||||||
sendMap();
|
sendMap();
|
||||||
sendInitialPosition();
|
sendInitialPosition();
|
||||||
|
|
||||||
console.log("[INFO]: position written, player spawning...");
|
player.emit("spawned");
|
||||||
serv.log("[INFO]: position written, player spawning...");
|
|
||||||
|
|
||||||
updateTime();
|
updateTime();
|
||||||
updateGameState();
|
updateGameState();
|
||||||
announceLogin();
|
|
||||||
fillTabList();
|
fillTabList();
|
||||||
spawn();
|
spawn();
|
||||||
|
|
||||||
announceJoin();
|
announceJoin();
|
||||||
|
|
||||||
|
|
||||||
var addr = player._client.socket.remoteAddress + ':' + player._client.socket.remotePort;
|
|
||||||
player._client.on('end', function () {
|
player._client.on('end', function () {
|
||||||
broadcast(player._client.username + ' joined the game.', "yellow");
|
serv.broadcast(player._client.username + ' quit the game.', "yellow");
|
||||||
console.log("[INFO]: " + player._client.username + ' disconnected', '(' + addr + ')');
|
player.emit('disconnect');
|
||||||
serv.log("[INFO]: " + player._client.username + ' disconnected', '(' + addr + ')');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
player._client.on('error', function (error) {
|
player._client.on('error', function (error) {
|
||||||
console.log('[ERR] ' + error.stack);
|
player.emit('error',error);
|
||||||
serv.log('[ERR]: Client: ' + error.stack);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
16
lib/serverPlugins/chat.js
Normal file
16
lib/serverPlugins/chat.js
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
module.exports=inject;
|
||||||
|
|
||||||
|
function inject(serv)
|
||||||
|
{
|
||||||
|
function broadcast(message, color) {
|
||||||
|
serv.players.forEach(function(player){
|
||||||
|
var msg = {
|
||||||
|
"text": message,
|
||||||
|
"color": color
|
||||||
|
};
|
||||||
|
player.chat(msg);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
serv.broadcast=broadcast;
|
||||||
|
}
|
||||||
|
|
@ -1,12 +1,21 @@
|
||||||
module.exports=inject;
|
|
||||||
|
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var timeStarted = Math.floor(new Date() / 1000).toString();
|
var timeStarted = Math.floor(new Date() / 1000).toString();
|
||||||
|
|
||||||
function inject(serv,settings) {
|
|
||||||
|
|
||||||
serv.log=log;
|
module.exports=inject;
|
||||||
serv.createLog=createLog;
|
|
||||||
|
function inject(serv,settings)
|
||||||
|
{
|
||||||
|
serv.on("error",function(error){
|
||||||
|
console.log('[ERR] ', error.stack);
|
||||||
|
log('[ERR]: Server:', error.stack);
|
||||||
|
});
|
||||||
|
|
||||||
|
serv.on("listening",function(port){
|
||||||
|
console.log('[INFO]: Server listening on port', port);
|
||||||
|
log('[INFO]: Server listening on port', port);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
function log(message) {
|
function log(message) {
|
||||||
if (settings.logging == true) {
|
if (settings.logging == true) {
|
||||||
|
|
@ -15,10 +24,12 @@ function inject(serv,settings) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function createLog() {
|
function createLog() {
|
||||||
fs.writeFile("logs/" + timeStarted + ".log", "[INFO]: Started logging...\n", function (err, data) {
|
fs.writeFile("logs/" + timeStarted + ".log", "[INFO]: Started logging...\n", function (err, data) {
|
||||||
if (err) return console.log(err);
|
if (err) return console.log(err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
serv.log=log;
|
||||||
|
serv.createLog=createLog;
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue