mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-18 05:51:12 +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.uuidToPlayer](#servuuidtoplayer)
|
||||
- [serv.world](#servworld)
|
||||
- [Events](#events)
|
||||
- ["error" (error)](#error-error)
|
||||
- ["listening" (port)](#listening-port)
|
||||
- [Methods](#methods)
|
||||
- [serv.createLog()](#servcreatelog)
|
||||
- [serv.log(message)](#servlogmessage)
|
||||
- [serv.broadcast(message[,color])](#servbroadcastmessagecolor)
|
||||
- [Player](#player)
|
||||
- [Properties](#properties-1)
|
||||
- [player.entity](#playerentity)
|
||||
- [Events](#events-1)
|
||||
- ["connected"](#connected)
|
||||
- ["spawned"](#spawned)
|
||||
- ["disconnected"](#disconnected)
|
||||
- ["error" (error)](#error-error-1)
|
||||
- ["chat" (message)](#chat-message)
|
||||
- [Methods](#methods-1)
|
||||
- [player.login()](#playerlogin)
|
||||
- [player.others()](#playerothers)
|
||||
- [player.chat(message)](#playerchatmessage)
|
||||
- [Low level properties](#low-level-properties)
|
||||
- [player._client](#player_client)
|
||||
- [Low level methods](#low-level-methods)
|
||||
|
|
@ -157,16 +168,30 @@ Object uuid to players
|
|||
|
||||
The map
|
||||
|
||||
### Events
|
||||
|
||||
#### "error" (error)
|
||||
|
||||
Fires when there is an error.
|
||||
|
||||
#### "listening" (port)
|
||||
|
||||
Fires when the server is listening.
|
||||
|
||||
### Methods
|
||||
|
||||
#### serv.createLog()
|
||||
|
||||
create the log file
|
||||
creates the log file
|
||||
|
||||
#### serv.log(message)
|
||||
|
||||
logs a `message`
|
||||
|
||||
#### serv.broadcast(message[,color])
|
||||
|
||||
broadcasts `message` to all the players with the optional `color`.
|
||||
|
||||
|
||||
## Player
|
||||
|
||||
|
|
@ -176,6 +201,27 @@ logs a `message`
|
|||
|
||||
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
|
||||
|
||||
|
|
@ -187,6 +233,10 @@ login
|
|||
|
||||
return the other players than `player`
|
||||
|
||||
#### player.chat(message)
|
||||
|
||||
sends `message` to the player
|
||||
|
||||
### Low level properties
|
||||
|
||||
#### player._client
|
||||
|
|
|
|||
10
index.js
10
index.js
|
|
@ -5,6 +5,8 @@ var path = require('path');
|
|||
var requireIndex = require('requireindex');
|
||||
var serverPlugins = requireIndex(path.join(__dirname, 'lib', 'serverPlugins'));
|
||||
var playerPlugins = requireIndex(path.join(__dirname, 'lib', 'playerPlugins'));
|
||||
var Player=require("./lib/player");
|
||||
require("longjohn");
|
||||
|
||||
module.exports = {
|
||||
createMCServer:createMCServer
|
||||
|
|
@ -36,17 +38,15 @@ MCServer.prototype.connect = function(options) {
|
|||
}
|
||||
|
||||
self._server.on('error', function(error) {
|
||||
console.log('[ERR] ', error.stack);
|
||||
self.log('[ERR]: Server:', error.stack);
|
||||
self.emit('error',error);
|
||||
});
|
||||
|
||||
self._server.on('listening', function() {
|
||||
console.log('[INFO]: Server listening on port', self._server.socketServer.address().port);
|
||||
self.log('[INFO]: Server listening on port', self._server.socketServer.address().port);
|
||||
self.emit('listening',self._server.socketServer.address().port);
|
||||
});
|
||||
|
||||
self._server.on('login', function (client) {
|
||||
var player={};
|
||||
var player=new Player();
|
||||
player._client=client;
|
||||
for(var pluginName in playerPlugins) {
|
||||
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()
|
||||
{
|
||||
player._writeOthers('player_info',{
|
||||
|
|
@ -146,48 +136,10 @@ function inject(serv,player)
|
|||
|
||||
function announceJoin()
|
||||
{
|
||||
broadcast(player._client.username + ' joined the game.', "yellow");
|
||||
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 + ')');
|
||||
serv.broadcast(player._client.username + ' joined the game.', "yellow");
|
||||
player.emit("connected");
|
||||
}
|
||||
|
||||
|
||||
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()
|
||||
{
|
||||
if (serv.uuidToPlayer[player._client.uuid]) {
|
||||
|
|
@ -199,29 +151,24 @@ function inject(serv,player)
|
|||
sendMap();
|
||||
sendInitialPosition();
|
||||
|
||||
console.log("[INFO]: position written, player spawning...");
|
||||
serv.log("[INFO]: position written, player spawning...");
|
||||
player.emit("spawned");
|
||||
|
||||
updateTime();
|
||||
updateGameState();
|
||||
announceLogin();
|
||||
fillTabList();
|
||||
spawn();
|
||||
|
||||
announceJoin();
|
||||
|
||||
|
||||
var addr = player._client.socket.remoteAddress + ':' + player._client.socket.remotePort;
|
||||
player._client.on('end', function () {
|
||||
broadcast(player._client.username + ' joined the game.', "yellow");
|
||||
console.log("[INFO]: " + player._client.username + ' disconnected', '(' + addr + ')');
|
||||
serv.log("[INFO]: " + player._client.username + ' disconnected', '(' + addr + ')');
|
||||
serv.broadcast(player._client.username + ' quit the game.', "yellow");
|
||||
player.emit('disconnect');
|
||||
});
|
||||
|
||||
|
||||
player._client.on('error', function (error) {
|
||||
console.log('[ERR] ' + error.stack);
|
||||
serv.log('[ERR]: Client: ' + error.stack);
|
||||
player.emit('error',error);
|
||||
});
|
||||
}
|
||||
}
|
||||
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 timeStarted = Math.floor(new Date() / 1000).toString();
|
||||
|
||||
function inject(serv,settings) {
|
||||
|
||||
serv.log=log;
|
||||
serv.createLog=createLog;
|
||||
module.exports=inject;
|
||||
|
||||
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) {
|
||||
if (settings.logging == true) {
|
||||
|
|
@ -15,10 +24,12 @@ function inject(serv,settings) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
function createLog() {
|
||||
fs.writeFile("logs/" + timeStarted + ".log", "[INFO]: Started logging...\n", function (err, data) {
|
||||
if (err) return console.log(err);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
serv.log=log;
|
||||
serv.createLog=createLog;
|
||||
}
|
||||
Loading…
Reference in a new issue