summaryrefslogblamecommitdiff
path: root/app.js
blob: 202f28d6233adcb2b5ea36e1f544423064a09205 (plain) (tree)
1
2
3
4
5
6


                                                                          

                                 
 






                                                          
                                                                           


                               
                     
                             
 

                                             


                                                  
 

                                         





                                                                                       


                                         





                                                               


                                 
                                                                                     
             
       









                                             
                                                               
                                                  



















                                                                  
                                           

                                                

                                       
                                                                                                                                                                                 



                                        
                                                                            
       
 
                                           
                                                                     




                                                                                                                                                          


       
                       

                       

                                       



                                    
                                             
                                    
                                                 
     





                                  
var mongojs = require("mongojs");
var db = mongojs("localhost:27017/ThePixelWorld", ["account","progress"]);

var express = require("express");
var app = express();

var serv = require("http").Server(app);

app.get('/', function(req,res) {
    res.sendFile(__dirname + '/client/index.html');
});

app.use('/client', express.static(__dirname + '/client'));
app.use('/favicon.ico', express.static(__dirname + '/client/favicon.ico'));

serv.listen(2000);
console.log("Server started.");
var SOCKET_LIST = {};
const servermsg = "Server: ";

const Commands = require('./server/Commands')
const Utils = require('./server/Utils')
const Entity = require('./server/Entities/Entity')
const Player = require('./server/Entities/Player')
const Bullet = require('./server/Entities/Bullet')


var isValidPassword = function(data, cb){
    db.account.find({username:data.username, password:data.password},function(err,res){
        if(res.length > 0)
            cb(true);
        else
            cb(false);
    });
}

var isUsernameTaken = function(data, cb){
    db.account.find({username:data.username},function(err,res){
        if(res.length > 0)
            cb(true);
        else
            cb(false);
    });
}

var addUser = function(data, cb){
    db.account.insert({username:data.username, password:data.password},function(err){
        cb();
    });
}

var io = require('socket.io')(serv, {});
io.sockets.on('connection', function(socket){
    socket.id = Math.random();
    SOCKET_LIST[socket.id] = socket;

    socket.on('signIn', function(data){
        isValidPassword(data, function(res){
            if (res){
                Player.Player.onConnect(socket, data.username);
                socket.playerName = data.username;
                socket.emit('signInResponse', {success:true});
            } else {
                socket.emit('signInResponse', {success:false});
            }
        });
    });
    socket.on('signUp', function(data){
        isUsernameTaken(data, function(res){
            if (res){
                socket.emit('signUpResponse', {success:false});
            } else {
                addUser(data, function(){
                    socket.emit('signUpResponse', {success:true});
                });
            }
        });
    });

    socket.on('disconnect', function(){
        delete SOCKET_LIST[socket.id];
        Player.Player.onDisconnect(socket);
    });
    socket.on('sendMsgToServer', function(data){
        if (data)
            for (var i in SOCKET_LIST){
                SOCKET_LIST[i].emit('addToChat', {ctimestamp: Utils.getTimeStamp(0), content: socket.playerName + ': ' + Utils.escapeHTML(Utils.chatEmote(data)), tab: "world"});
            }
    });

    socket.on('command', function(data){
        Commands.dispatch(data, socket, SOCKET_LIST, servermsg, db, Player);
    });

    socket.on('evalServer', function(data){
        Utils.hasPermission(db, socket.playerName, 80, function(res){
            if (res)
                socket.emit('evalAnswer', eval(data));
            else
                socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"});
        });
    });
});

// erm... the game loop
setInterval(function(){
    var pack = {
        player: Player.Player.update(),
        bullet: Bullet.Bullet.update()
    }
    
    for(var i in SOCKET_LIST){
        var socket = SOCKET_LIST[i];
        socket.emit('init', Entity.initPack);
        socket.emit('update', pack);
        socket.emit('remove', Entity.removePack);
    }
    Entity.initPack.player = [];
    Entity.initPack.bullet = [];
    Entity.removePack.player = [];
    Entity.removePack.bullet = [];

}, 1000/25);