Лістинг
Json structure:
{
"version": "0.0.1",
"description": "app monopoliya",
"dependencies": {
"body-parser": "^1.13.3",
"connect-ensure-login": "^0.1.1",
"cookie-parser": "^1.3.5",
"ejs": "^2.3.3",
"express": "^4.13.3",
"express-session": "^1.11.3",
"morgan": "^1.6.1",
"passport": "^0.2.2",
"passport-local": "^1.0.0",
"socket.io": "^1.3.7"
}
}
Server:
var express = require('express'),
app = express(),
http = require('http').Server(app),
io = require('socket.io')(http),
port = 8080;
require("./server/autorization.js").init(app, io);
app.use(express.static(__dirname));
var gameInfo = {
fieldsLen: '',
usersLen: '',
usersList: []
};
io.on('connection', function(socket){
require("./server/chat.js").init(socket, io);
require("./server/game.js").init(socket, io, gameInfo);
});
console.log('Running');
http.listen(port);
Chat:
var exports = module.exports = {};
exports.init = function(socket, io) {
socket.broadcast.emit('user connected');
socket.on('chat message', function(msg, user){
io.emit('chat message', msg, user);
});
socket.on('disconnect', function(){
io.emit('user disconnect');
});
};
Game:
var exports = module.exports = {};
exports.init = function(socket, io, gameInfo) {
socket.on('sent static info', function(fields, users, newUserName){
var i, l, userNew = true;
gameInfo.fieldsLen = fields;
gameInfo.usersLen = users;
for (i = 0, l = gameInfo.usersList.length; i < l; i++){
if (gameInfo.usersList[i] === newUserName){
userNew = false;
break;
}
}
if (userNew){
gameInfo.usersList.push(newUserName);
}
io.emit('list of users', gameInfo.usersList);
});
socket.on('get new user place', function(currentUserPos, moveOfPlayer){
var randomResult = Math.floor((Math.random() * 6) + 1);
currentUserPos += randomResult;
if (currentUserPos >= gameInfo.fieldsLen) {
currentUserPos -= gameInfo.fieldsLen;
}
if (++moveOfPlayer === gameInfo.usersLen) {
moveOfPlayer = 0;
}
io.emit('get new user place', {currentUserPos: currentUserPos, moveOfPlayer: moveOfPlayer });
});
};
Authorization:
var exports = module.exports = {},
passport = require('passport'),
Strategy = require('passport-local').Strategy,
db = require('./db');
exports.init = function(app, io){
passport.use(new Strategy(
function(username, password, cb) {
db.users.findByUsername(username, function(err, user) {
if (err) { return cb(err); }
if (!user) { return cb(null, false); }
if (user.password != password) { return cb(null, false); }
return cb(null, user);
});
}
));
passport.serializeUser(function(user, cb) {
cb(null, user.id);
});
passport.deserializeUser(function(id, cb) {
db.users.findById(id, function (err, user) {
if (err) { return cb(err); }
cb(null, user);
});
});
app.use(require('morgan')('combined'));
app.use(require('cookie-parser')());
app.use(require('body-parser').urlencoded({ extended: true }));
app.use(require('express-session')({ secret: 'keyboard cat', resave: false, saveUninitialized: false }));
app.use(passport.initialize());
app.use(passport.session());
app.post('/login', passport.authenticate('local', { failureRedirect: '/login' }), function(req, res) {
io.emit('save static user information', req.user);
res.redirect('/#');
});
};
Game example markup:
<div class="work-area">
<div class="informational-bar">
</div>
<div class="play-area" data-bind="style: { width: width, height: height }" >
<div class="dashboard-top ">
<!-- ko foreach: allTopItems -->
<div class="vertical-block">
<!-- ko foreach: $parent.users -->
<!-- ko if: $data.positionCurrent() === $parent.cellId,-->
<div class="plyaer-position" data-bind="css: $data.imgClass"></div>
<!--/ko-->
<!-- /ko -->
<span class="sysName" data-bind="text: systemName"></span>
</div>
<!-- /ko -->
</div>
<div class="dashboard-left">
<!-- ko foreach: allLeftItems -->
<div class="gorizontal-block">
<!-- ko foreach: $parent.users -->
<!-- ko if: $data.positionCurrent() === $parent.cellId,-->
<div class="plyaer-position" data-bind="css: $data.imgClass"></div>
<!--/ko-->
<!-- /ko -->
<span class="sysName" data-bind="text: systemName"></span>
</div>
<!-- /ko -->
</div>
<div class="dashboard-right">
<!-- ko foreach: allRightItems -->
<div class="gorizontal-block">
<!-- ko foreach: $parent.users -->
<!-- ko if: $data.positionCurrent() === $parent.cellId,-->
<div class="plyaer-position" data-bind="css: $data.imgClass"></div>
<!--/ko-->
<!-- /ko -->
<span class="sysName" data-bind="text: systemName"></span>
</div>
<!-- /ko -->
</div>
<div class="dashboard-bottom ">
<!-- ko foreach: allBotItems -->
<div class="vertical-block">
<!-- ko foreach: $parent.users -->
<!-- ko if: $data.positionCurrent() === $parent.cellId,-->
<div class="plyaer-position" data-bind="css: $data.imgClass"></div>
<!--/ko-->
<!-- /ko -->
<span class="sysName" data-bind="text: systemName"></span>
</div>
<!-- /ko -->
</div>
<div class="dashboard-centr">
<div class="monopoly-logo"></div>
<div class="play-buttons">
<div class="play-button" data-bind="click: changePosition">Кинути кубик
</div>
<div class="play-button">Купити
</div>
<div class="play-button">Покращити
</div>
</div>
<div class="players-information">
<div class="player-info" data-bind="text: userInfo.name + '/' + userInfo.gold ">
</div>
<div class="player-info">
</div>
</div>
</div>
</div>
</div>
