@ -0,0 +1,13 @@ | |||
/** | |||
* @file NPGClientConfig.js | |||
*/ | |||
var NPGClient.Config = { | |||
} |
@ -0,0 +1,114 @@ | |||
/** | |||
* @file AppPage.js | |||
* @author frtk@tetalab | |||
*/ | |||
NPGClient.AppPage = function(n) { | |||
Object.defineProperty(this, 'id', { value: NPGClient.pageCount++ }); | |||
this.name = n || ''; | |||
// draw loop paramaters | |||
this.loopIntervalId = 0; | |||
this.loopDelay = 40; | |||
// canvas | |||
this.canvas_id = ""; | |||
this.canvas_bcol = ""; | |||
this.canvas = {}; | |||
this.ctx = {}; | |||
// ui elements | |||
this.uiElems = []; | |||
}; | |||
NPGClient.AppPage.prototype = { | |||
constructor: NPGClient.AppPage, | |||
// | |||
setLoopDelay: function(d) { | |||
this.loopDelay = d; | |||
}, | |||
// | |||
startDrawLoop: function() { | |||
var self = this; | |||
self.loopIntervalId = setInterval(function() { | |||
self.run(); | |||
}, self.loopDelay); | |||
}, | |||
// | |||
stopDrawLoop: function() { | |||
var self = this; | |||
clearInterval(self.loopIntervalId); | |||
self.loopIntervalId = 0; | |||
}, | |||
// | |||
run: function() { | |||
var self = this; | |||
self.drawUI(); | |||
}, | |||
// | |||
configUI: function(id, w, h, c) { | |||
var self = this; | |||
self.canvas_id = id; | |||
self.canvas = document.getElementById(id); | |||
self.ctx = self.canvas.getContext("2d"); | |||
self.canvas.width = w; | |||
self.canvas.height = h; | |||
self.canvas_bcol = c; | |||
}, | |||
// | |||
addUIObject: function(c) { | |||
var self = this; | |||
self.uiElems.push(c); | |||
}, | |||
// | |||
getUIElemByName: function(name) { | |||
var self = this; | |||
if (self.uiElems.length > 0) { | |||
for (var i = 0; i < self.uiElems.length; i++) | |||
if (self.uiElems[i].name == name) return self.uiElems[i]; | |||
} | |||
return undefined; | |||
}, | |||
// | |||
drawUI: function() { | |||
var self = this; | |||
self.clear(); | |||
self.drawUIBackground(); | |||
self.drawUIObjects(); | |||
}, | |||
// | |||
drawUIBackground: function() { | |||
var self = this; | |||
self.ctx.fillStyle = self.canvas_bcol; | |||
self.ctx.fillRect(0, 0, self.canvas.width, self.canvas.height); | |||
}, | |||
// | |||
drawUIObjects: function() { | |||
var self = this; | |||
if (self.uiElems.length > 0) { | |||
for (var i = 0; i < self.uiElems.length; i++) | |||
self.uiElems[i].draw(self.ctx); | |||
} | |||
}, | |||
// | |||
clear: function() { | |||
var self = this; | |||
self.ctx.clearRect(0, 0, self.canvas.width, self.canvas.height); | |||
}, | |||
}; | |||
@ -0,0 +1,51 @@ | |||
/** | |||
* @file event_handling.js | |||
* @autour frtk@tetalab | |||
*/ | |||
NPGClient.evtHandler = { | |||
keysList: { | |||
F1 : 112, | |||
SPACE : 32, | |||
ESC : 27, | |||
ARROW_UP : 38, | |||
ARROW_DOWN : 40, | |||
ENTER : 13, | |||
DELETE : 46, | |||
BACKSPACE : 8, | |||
}, | |||
keyState: {}, | |||
// | |||
init: function() { | |||
var self = this; | |||
// | |||
self.keyState = {}; | |||
for (k in self.keyList) { | |||
self.keyState[self.keysList[k]] = false; | |||
} | |||
// | |||
document.addEventListener('keydown',function(e) { | |||
self.keyState[e.keyCode || e.which] = true; | |||
self.onKeyDown(e); | |||
}, true); | |||
// | |||
document.addEventListener('keyup',function(e){ | |||
self.keyState[e.keyCode || e.which] = false; | |||
}, true); | |||
}, | |||
// | |||
loginValidKey: function(k) { | |||
return (key >= 48 && key <= 90); | |||
}, | |||
// | |||
onKeyDown : function(evt) { | |||
console.log(evt.keyCode); | |||
}, | |||
} |
@ -0,0 +1,8 @@ | |||
/** | |||
* @file NPGClient.js | |||
* @author frtk | |||
*/ | |||
var NPGClient = { 'version': '' }; | |||
@ -0,0 +1,13 @@ | |||
/** | |||
* @file login_page.js | |||
* @author frtk@tetalab | |||
*/ | |||
NPGClient.LoginPage = { | |||
pageIdx: 0, | |||
page: new NPGClient.AppPage('login'), | |||
}; | |||
@ -0,0 +1,77 @@ | |||
/** | |||
* @file SocketIO.js | |||
* @author frtk | |||
*/ | |||
NPGClient.SocketIO = { | |||
// Connection to server | |||
conn_nAttempts: 0, | |||
conn_IntervalID: 0, | |||
socket: {}, | |||
isConnected: false, | |||
// start connection loop | |||
initConnectLoop: function() { | |||
var self = this; | |||
console.log(); | |||
self.startConnectLoop(); | |||
}, | |||
// start connection loop | |||
startConnectLoop: function() { | |||
var self = this; | |||
self.conn_IntervalID = setInterval(function() { self.connect(); }, 1500); | |||
}, | |||
// stop connection loop | |||
stopConnectLoop: function() { | |||
var self = this; | |||
clearInterval(self.conn_IntervalID); | |||
self.conn_IntervalID = 0; | |||
self.conn_nAttempts = 0; | |||
}, | |||
// connect socket | |||
connect: function() { | |||
var self = this; | |||
// check for connection | |||
if (self.isConnected) { | |||
return false; | |||
} | |||
// | |||
if (typeof io !== 'object') { | |||
//console.log('[NPGClient.SocketIO] io object is unknown'); | |||
} | |||
if ((typeof self.socket.socket === 'undefined')) { | |||
console.log('[NPGClient.SocketIO] attempting server connection...'); | |||
self.socket = io.connect(); | |||
self.defineSocketMsgs(); | |||
} else if (!self.socket.socket.connected && !self.socket.socket.connecting) { | |||
console.log('[NPGClient.SocketIO] attempting server connection...'); | |||
self.socket.socket.connect(); | |||
} | |||
}, | |||
// Define Socket Messages | |||
defineSocketMsgs: function() { | |||
var self = this; | |||
if (typeof self.socket === 'undefined') { | |||
return false; | |||
} | |||
console.log('[NPGClient.SocketIO] deploying socket object features.'); | |||
// 'connecting' | |||
self.socket.on('connecting', function () { | |||
console.log('[NPGClient.SocketIO] connecting ...'); | |||
}); | |||
// 'connect' | |||
self.socket.on('connect', function() { | |||
console.log('[NPGClient.SocketIO] connected to server'); | |||
self.stopConnectLoop(); | |||
self.isConnected = true; | |||
}); | |||
// 'disconnect' | |||
self.socket.on('disconnect', function() { | |||
console.log('[NPGClient.SocketIO] > Server: socket disconnected.'); | |||
self.startConnectLoop(); | |||
self.isConnected = false; | |||
}); | |||
} | |||
}; |
@ -0,0 +1,50 @@ | |||
/** | |||
* @file nodePong.js | |||
* @author frtk | |||
*/ | |||
/* | |||
* nodejs modules | |||
*/ | |||
//--- | |||
var fs = require('fs'); | |||
var express = require('express'); | |||
var http = require('http'); | |||
//--- server app libs & params | |||
//var servP = require('./server/server_config.js'); | |||
var npg = require('./server/server_core.js'); | |||
//--- nodePong config | |||
var cfg = require('./server/server_config.js'); | |||
// | |||
npg.NPGServer.init(cfg.Config); | |||
/* | |||
* starting HTTP and socket.io services | |||
*/ | |||
//--- HTTP server | |||
npg.NPGServer.log("$ # starting http service on port " + npg.NPGServer.port); | |||
var app = express(); | |||
var httpserv = http.createServer(app); | |||
httpserv.listen(npg.NPGServer.port); | |||
//--- allow access to static files from "/client" directory | |||
app.use(express.static(__dirname + '/client/')); | |||
//--- socket.io | |||
npg.NPGServer.log('$ # registering socket.io service on port ' + npg.NPGServer.port); | |||
var io = require('socket.io').listen(httpserv, { log: true } ); | |||
//-- setup server socket handling features | |||
npg.NPGServer.socketHandling(io); | |||
// | |||
npg.NPGServer.log('$ #####'); | |||
/* | |||
* running nodePong server | |||
*/ | |||
//--- | |||
@ -0,0 +1,141 @@ | |||
/** | |||
* @file npg_server.js | |||
* @author frtk | |||
*/ | |||
/** | |||
* | |||
* nodePong Server Object | |||
* | |||
*/ | |||
var NPGServer = { | |||
/* | |||
* Data | |||
*/ | |||
// app | |||
version: '', | |||
host: '', | |||
port: 0, | |||
// Users and Games | |||
users: [], | |||
games: [], | |||
/* | |||
* | |||
*/ | |||
//--- init() | |||
init: function(o) { | |||
var self = this; | |||
self.version = o.VERSION || ''; | |||
self.host = o.HTTP.host || ''; | |||
self.port = o.HTTP.port || 8042; | |||
self.log('$ ##### nodePong - v'+self.version); | |||
}, | |||
//--- setVersion(s) | |||
setVersion: function(s) { | |||
this.version = s; | |||
}, | |||
/* | |||
* Server Messages | |||
*/ | |||
//--- | |||
log: function(msg) { | |||
var self = this; | |||
return console.log(self.newDateToString() + msg); | |||
}, | |||
//--- dateToString | |||
dateToString: function(date) { | |||
var self = this; | |||
return '[' + self.addZero(date.getHours(), 'h') + ':' | |||
+ self.addZero(date.getMinutes(), 'm') + ':' | |||
+ self.addZero(date.getSeconds(), 's') + ':' | |||
+ self.addZero(date.getMilliseconds(), 'ms') + ']'; | |||
}, | |||
//--- addZero | |||
addZero: function(value, type) { | |||
switch(type) { | |||
case 'h': | |||
case 'm': | |||
case 's': | |||
if (value < 10) value = '0' + value; | |||
break; | |||
case 'ms': | |||
if (value < 10) value = '00' + value; | |||
else if (value >= 10 && value < 100) value = '0' + value; | |||
break; | |||
default: | |||
break; | |||
}; | |||
return value; | |||
}, | |||
//--- return new date string | |||
newDateToString: function() { | |||
var self = this; | |||
return self.dateToString(new Date()); | |||
}, | |||
/* | |||
* Socket.io handling | |||
*/ | |||
//--- | |||
socketHandling: function(io) { | |||
var self = this; | |||
io.sockets.on('connection', function (socket) { | |||
// | |||
self.log('$ User connected : id=' + socket.id); | |||
// 'disconnect' | |||
socket.on('disconnect', function () { self.log('$ User disconnected : id=' + socket.id); | |||
}); | |||
// | |||
}); | |||
}, | |||
}; | |||
/** | |||
* | |||
* nodePong User Object | |||
* | |||
*/ | |||
var User = function(name) { | |||
}; | |||
/** | |||
* | |||
* nodePong Game Object | |||
* | |||
*/ | |||
var Game = function() { | |||
}; | |||
/** | |||
* | |||
* EXPORT | |||
* | |||
*/ | |||
if (typeof exports !== "undefined") { | |||
exports.NPGServer = NPGServer; | |||
exports.User = User; | |||
exports.Game = Game; | |||
} |
@ -0,0 +1,23 @@ | |||
/** | |||
* @file npg_server_config.js | |||
* @author frtk | |||
*/ | |||
var Config = { | |||
VERSION : '0.0.8', | |||
HTTP: { | |||
host: '127.0.0.1', | |||
port: 8042 | |||
}, | |||
} | |||
/** | |||
* | |||
* EXPORTS | |||
* | |||
*/ | |||
if (typeof exports !== "undefined") { | |||
exports.Config = Config; | |||
} |