/lib/game_server.js
JavaScript | 168 lines | 134 code | 25 blank | 9 comment | 15 complexity | b765fae653d5b927b3267e44d5dde9ce MD5 | raw file
- /*jshint node: true */
- var socketio = require('socket.io'),
- usernames = [];
- exports.listen = function (server, game) {
- "use strict";
- var map = [],
- io = socketio.listen(server);
- io.sockets.on('connection', function (socket) {
-
- handleClientAddUser(socket);
- handleClientSendChat(socket);
- handleClientNewGame(socket);
- handleClientSwitchRoom(socket);
- handleClientDisconnection(socket);
- game.socket(map, socket, io);
- socket.on('keep-alive', function () { socket.emit('keep-alive', null); });
- });
-
-
- //do??czenie nowego klienta do Lobby, przypisanie nazwy u?ytkownika
- function handleClientAddUser(socket) {
- socket.on('addUser', function (username) {
- if (usernames.indexOf(username) > -1) {
- usernames.push(username = assignName(username, 1));
- }
- else {
- usernames.push(username);
- }
- socket.username = username;
- socket.set('username', username);
- socket.join('Lobby');
- socket.room = 'Lobby';
- socket.broadcast.to(socket.room).emit('updateChat', 'SERVER', username + ' has connected');
- socket.emit('updateRooms', getRooms(), socket.room);
- io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
- });
- }
-
- //wysy?anie wiadomo?ci
- function handleClientSendChat(socket) {
- socket.on('sendChat', function (data) {
- io.sockets. in (socket.room).emit('updateChat', socket.username, data);
- });
- }
-
- //tworzenie nowej gry
-
- function handleClientNewGame(socket) {
- socket.on('newGame', function () {
- if(socket.room === 'Lobby'){
- socket.leave(socket.room);
- io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
- socket.room = socket.username;
- socket.join(socket.room);
- io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
- socket.broadcast.to(socket.room).emit('updateChat', 'SERVER', socket.username + ' stworzy? now? gr?');
- socket.room = socket.username;
- socket.broadcast.to('Lobby').emit('updateRooms', getRooms(), 'Lobby');
- game.game(map, socket, io);
- socket.emit('updateChat', 'SERVER', 'Stworzono now? gr?');
- socket.emit('updateRooms', getRooms(), socket.username);
- }
- });
- }
- //do??cznie do gry lub powrót do Lobby
- function handleClientSwitchRoom(socket) {
- socket.on('switchRoom', function (newroom) {
- if(newroom === 'Lobby'){
- socket.stopinterval = 1;
- socket.broadcast.to(socket.room).emit('backToLobby');
- socket.emit('exitRoom');
- socket.leave(socket.room);
- io.sockets. in (socket.room).emit('updateUsers', getUsers(socket.room));
- socket.join(newroom);
- io.sockets. in (socket.room).emit('updateRooms', getRooms(), socket.room);
- socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username + ' has left this room');
- socket.room = newroom;
- socket.emit('updateChat', 'SERVER', 'you have connected to ' + newroom);
- io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
- socket.broadcast.to(newroom).emit('updateChat', 'SERVER', socket.username + ' has joined this room');
- io.sockets. in (newroom).emit('updateRooms', getRooms(), newroom);
-
- }
- else{
- if (io.sockets.manager.rooms['/' + newroom].length < 2){
-
- socket.leave(socket.room);
- io.sockets. in (socket.room).emit('updateUsers', getUsers(socket.room));
- socket.join(newroom);
- io.sockets. in (socket.room).emit('updateRooms', getRooms(), socket.room);
- socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username + ' has left this room');
- socket.room = newroom;
-
- game.game(map, socket, io);
-
- socket.emit('updateChat', 'SERVER', 'you have connected to ' + newroom);
- io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
- socket.broadcast.to(newroom).emit('updateChat', 'SERVER', socket.username + ' has joined this room');
- io.sockets. in (newroom).emit('updateRooms', getRooms(), newroom);
- }
- }
- });
- }
- //od??czenie klienta
- function handleClientDisconnection(socket) {
- socket.on('disconnect', function () {
- if (socket.username !== undefined) {
- var index = usernames.indexOf(socket.username);
- if (index > -1) {usernames.splice(index, 1);}
- console.log("Disconnected", socket.username);
- if(socket.room !== 'Lobby'){
- socket.broadcast.to(socket.room).emit('backToLobby');
-
- }
- else{
- socket.broadcast.to(socket.room).emit('updateChat', 'SERVER', socket.username + ' has disconnected');
- }
- socket.leave(socket.room);
- io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
- }
- });
- }
- //funkcja numeruj?ca username
- function assignName(username, number) {
- var username_tmp = "";
- username_tmp = username + '_' + number;
- if (usernames.indexOf(username_tmp) > -1) {
- return assignName(username, ++number);
- }
- else {
- return username_tmp;
- }
- }
- //pobieranie nazw pokoi
- function getRooms() {
- var rooms = [];
- for (var i in io.sockets.manager.rooms) {
- if (i !== '' && i !== '/Lobby') {
- if (io.sockets.manager.rooms[i].length < 2) {
- rooms.push(i.substring(1));
- }
- }
- }
- return rooms;
- }
- //pobieranie nazw u?ytkowników w danym pokoju
- function getUsers(room) {
- var users = [];
- for (var i in io.sockets.manager.rooms['/' + room]) {
- users.push(io.sockets.sockets[io.sockets.manager.rooms['/' + room][i]].username);
- }
- return users;
- }
- };