Skip to content

Commit

Permalink
more work
Browse files Browse the repository at this point in the history
  • Loading branch information
jeromeetienne committed Sep 2, 2012
1 parent 4b574e0 commit 5ed2de6
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 7 deletions.
101 changes: 101 additions & 0 deletions examples/client.js
@@ -0,0 +1,101 @@
var SimpleMMOServer = function(humanName){
var socket = io.connect();
//var socket = io.connect('http://jetienne.tquery-multiplayerserver.jit.su:80/');
this._socket = socket;
//////////////////////////////////////////////////////////////////////////
// userInfo //
//////////////////////////////////////////////////////////////////////////
humanName = humanName || "user"+Math.floor(Math.random()*100000);
var userInfo = {
humanName : humanName
};

var usersInfo = {};
this._usersInfo = usersInfo;
// emit initial userInfo
socket.emit('userInfo', userInfo);
// listen on user info
// - TODO rename that 'userJoin'
socket.on('userInfo', function(data){
console.log('received userInfo', JSON.stringify(data, null, '\t'))
usersInfo[data.sourceId] = data.userInfo;
});
// listen on bye
// - TODO rename that 'userLeft'
socket.on('bye', function(data){
console.log('received bye ', JSON.stringify(data, null, '\t'));
var userId = data.sourceId;
delete usersInfo[userId]
});
// listen on 'userList'
socket.on('userlist', function(data){
console.log('received userList ', JSON.stringify(data, null, '\t'), this);
usersInfo = data;
this.dispatchEvent('usersInfoChange', usersInfo);
});

//////////////////////////////////////////////////////////////////////////
// Ping //
//////////////////////////////////////////////////////////////////////////

// ping server every seconds
this._latency = null;
setInterval(function(){
socket.emit('ping', { time : Date.now() });
}, 1000)
socket.on('pong', function(data){
var rtt = Date.now() - data.time;
var smoother = 0.3;
this._latency = this._latency === null ? rtt : this._latency;
this._latency = (1-smoother)*this._latency + smoother * rtt;
console.log('received pong. rtt ', rtt, 'ms.', 'Smoothed Latency:', this._latency);
}.bind(this));


//////////////////////////////////////////////////////////////////////////
// Chat //
//////////////////////////////////////////////////////////////////////////

socket.on('clientEcho', function(data){
this.dispatchEvent('clientEcho', data)
}.bind(this));
}


SimpleMMOServer.prototype.clientEcho = function(data){
this._socket.emit('clientEcho', data)
}

SimpleMMOServer.prototype.latency = function(){
return this._latency;
}

//////////////////////////////////////////////////////////////////////////////////
// SimpleMMOServer microevent //
//////////////////////////////////////////////////////////////////////////////////

SimpleMMOServer.MicroeventMixin = function(destObj){
destObj.addEventListener = function(event, fct){
if(this._events === undefined) this._events = {};
this._events[event] = this._events[event] || [];
this._events[event].push(fct);
return fct;
};
destObj.removeEventListener = function(event, fct){
if(this._events === undefined) this._events = {};
if( event in this._events === false ) return;
this._events[event].splice(this._events[event].indexOf(fct), 1);
};
destObj.dispatchEvent = function(event /* , args... */){
if(this._events === undefined) this._events = {};
if( this._events[event] === undefined ) return;
var tmpArray = this._events[event].slice();
for(var i = 0; i < tmpArray.length; i++){
tmpArray[i].apply(this, Array.prototype.slice.call(arguments, 1))
}
};
};

SimpleMMOServer.MicroeventMixin(SimpleMMOServer.prototype);


17 changes: 17 additions & 0 deletions examples/client_example.html
@@ -0,0 +1,17 @@
<!doctype html>
<!-- <script src="http://jetienne.tquery-multiplayerserver.jit.su/socket.io/socket.io.js"></script>
-->
<script src="/socket.io/socket.io.js"></script>

<script src="client.js"></script>
<body><script>
var gameServer = new SimpleMMOServer()
console.log(gameServer)

gameServer.addEventListener('clientEcho', function(data){
console.log('received clientEcho', data);
})
gameServer.clientEcho({
data : 'ddd'
})
</script></body>
5 changes: 2 additions & 3 deletions examples/chat.html → examples/manual_chat.html
Expand Up @@ -4,7 +4,7 @@
-->
<script src="/socket.io/socket.io.js"></script>
<body>
<div class='output'>
<div>
<form action="javascript:void(0)" id='nicknameForm'>
<b>Nickname:</b> <input type="text"/>
</form>
Expand All @@ -13,7 +13,7 @@
<input size=100 type="text"/> <b>Message</b>
</form>
</div>
<div class='userlist'>
<div>
<h3>Users List</h3>
<pre id='usersList'></pre>
</div>
Expand All @@ -34,7 +34,6 @@ <h3>Users List</h3>
var formElement = document.getElementById('nicknameForm');
userInfo.humanName = formElement[0].value;
socket.emit('userInfo', userInfo);

document.getElementById('chatInputForm')[0].focus();
});

Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -4,7 +4,7 @@
"start": "server.js"
},
"subdomain": "jetienne.tquery-multiplayerserver",
"version": "0.0.0-10",
"version": "0.0.0-14",
"engines": {
"node": "0.8.x"
},
Expand Down
7 changes: 4 additions & 3 deletions server.js
Expand Up @@ -2,9 +2,10 @@ var app = require('express')()

var server = require('http').createServer(app)
server.listen(process.argv[2] || 80);
app.get('/examples/chat.html', function (req, res) {
res.sendfile(__dirname + '/examples/chat.html');
});

app.get('/examples/manual_chat.html' , function (req, res) { res.sendfile(__dirname + '/examples/manual_chat.html'); });
app.get('/examples/client_example.html' , function (req, res) { res.sendfile(__dirname + '/examples/client_example.html'); });
app.get('/examples/client.js' , function (req, res) { res.sendfile(__dirname + '/examples/client.js'); });

var usersList = {}
var io = require('socket.io').listen(server);
Expand Down

0 comments on commit 5ed2de6

Please sign in to comment.