PageRenderTime 64ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/game_server.js

https://bitbucket.org/nehar/ti
JavaScript | 168 lines | 134 code | 25 blank | 9 comment | 15 complexity | b765fae653d5b927b3267e44d5dde9ce MD5 | raw file
  1. /*jshint node: true */
  2. var socketio = require('socket.io'),
  3. usernames = [];
  4. exports.listen = function (server, game) {
  5. "use strict";
  6. var map = [],
  7. io = socketio.listen(server);
  8. io.sockets.on('connection', function (socket) {
  9. handleClientAddUser(socket);
  10. handleClientSendChat(socket);
  11. handleClientNewGame(socket);
  12. handleClientSwitchRoom(socket);
  13. handleClientDisconnection(socket);
  14. game.socket(map, socket, io);
  15. socket.on('keep-alive', function () { socket.emit('keep-alive', null); });
  16. });
  17. //do??czenie nowego klienta do Lobby, przypisanie nazwy u?ytkownika
  18. function handleClientAddUser(socket) {
  19. socket.on('addUser', function (username) {
  20. if (usernames.indexOf(username) > -1) {
  21. usernames.push(username = assignName(username, 1));
  22. }
  23. else {
  24. usernames.push(username);
  25. }
  26. socket.username = username;
  27. socket.set('username', username);
  28. socket.join('Lobby');
  29. socket.room = 'Lobby';
  30. socket.broadcast.to(socket.room).emit('updateChat', 'SERVER', username + ' has connected');
  31. socket.emit('updateRooms', getRooms(), socket.room);
  32. io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
  33. });
  34. }
  35. //wysy?anie wiadomo?ci
  36. function handleClientSendChat(socket) {
  37. socket.on('sendChat', function (data) {
  38. io.sockets. in (socket.room).emit('updateChat', socket.username, data);
  39. });
  40. }
  41. //tworzenie nowej gry
  42. function handleClientNewGame(socket) {
  43. socket.on('newGame', function () {
  44. if(socket.room === 'Lobby'){
  45. socket.leave(socket.room);
  46. io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
  47. socket.room = socket.username;
  48. socket.join(socket.room);
  49. io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
  50. socket.broadcast.to(socket.room).emit('updateChat', 'SERVER', socket.username + ' stworzy? now? gr?');
  51. socket.room = socket.username;
  52. socket.broadcast.to('Lobby').emit('updateRooms', getRooms(), 'Lobby');
  53. game.game(map, socket, io);
  54. socket.emit('updateChat', 'SERVER', 'Stworzono now? gr?');
  55. socket.emit('updateRooms', getRooms(), socket.username);
  56. }
  57. });
  58. }
  59. //do??cznie do gry lub powrót do Lobby
  60. function handleClientSwitchRoom(socket) {
  61. socket.on('switchRoom', function (newroom) {
  62. if(newroom === 'Lobby'){
  63. socket.stopinterval = 1;
  64. socket.broadcast.to(socket.room).emit('backToLobby');
  65. socket.emit('exitRoom');
  66. socket.leave(socket.room);
  67. io.sockets. in (socket.room).emit('updateUsers', getUsers(socket.room));
  68. socket.join(newroom);
  69. io.sockets. in (socket.room).emit('updateRooms', getRooms(), socket.room);
  70. socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username + ' has left this room');
  71. socket.room = newroom;
  72. socket.emit('updateChat', 'SERVER', 'you have connected to ' + newroom);
  73. io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
  74. socket.broadcast.to(newroom).emit('updateChat', 'SERVER', socket.username + ' has joined this room');
  75. io.sockets. in (newroom).emit('updateRooms', getRooms(), newroom);
  76. }
  77. else{
  78. if (io.sockets.manager.rooms['/' + newroom].length < 2){
  79. socket.leave(socket.room);
  80. io.sockets. in (socket.room).emit('updateUsers', getUsers(socket.room));
  81. socket.join(newroom);
  82. io.sockets. in (socket.room).emit('updateRooms', getRooms(), socket.room);
  83. socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username + ' has left this room');
  84. socket.room = newroom;
  85. game.game(map, socket, io);
  86. socket.emit('updateChat', 'SERVER', 'you have connected to ' + newroom);
  87. io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
  88. socket.broadcast.to(newroom).emit('updateChat', 'SERVER', socket.username + ' has joined this room');
  89. io.sockets. in (newroom).emit('updateRooms', getRooms(), newroom);
  90. }
  91. }
  92. });
  93. }
  94. //od??czenie klienta
  95. function handleClientDisconnection(socket) {
  96. socket.on('disconnect', function () {
  97. if (socket.username !== undefined) {
  98. var index = usernames.indexOf(socket.username);
  99. if (index > -1) {usernames.splice(index, 1);}
  100. console.log("Disconnected", socket.username);
  101. if(socket.room !== 'Lobby'){
  102. socket.broadcast.to(socket.room).emit('backToLobby');
  103. }
  104. else{
  105. socket.broadcast.to(socket.room).emit('updateChat', 'SERVER', socket.username + ' has disconnected');
  106. }
  107. socket.leave(socket.room);
  108. io.sockets.to(socket.room).emit('updateUsers', getUsers(socket.room));
  109. }
  110. });
  111. }
  112. //funkcja numeruj?ca username
  113. function assignName(username, number) {
  114. var username_tmp = "";
  115. username_tmp = username + '_' + number;
  116. if (usernames.indexOf(username_tmp) > -1) {
  117. return assignName(username, ++number);
  118. }
  119. else {
  120. return username_tmp;
  121. }
  122. }
  123. //pobieranie nazw pokoi
  124. function getRooms() {
  125. var rooms = [];
  126. for (var i in io.sockets.manager.rooms) {
  127. if (i !== '' && i !== '/Lobby') {
  128. if (io.sockets.manager.rooms[i].length < 2) {
  129. rooms.push(i.substring(1));
  130. }
  131. }
  132. }
  133. return rooms;
  134. }
  135. //pobieranie nazw u?ytkowników w danym pokoju
  136. function getUsers(room) {
  137. var users = [];
  138. for (var i in io.sockets.manager.rooms['/' + room]) {
  139. users.push(io.sockets.sockets[io.sockets.manager.rooms['/' + room][i]].username);
  140. }
  141. return users;
  142. }
  143. };