/** * Parameters */ var webSocketsServerPort = 8080; // Adapt to the listening port number you want to use /** * Global variables */ // websocket and http servers var webSocketServer = require("websocket").server; var http = require("http"); var teacherID = 0; var game_page_counter = 0; var login_page_counter = 0; var connected_counter = 0; var recentenents = [""]; /** * HTTP server to implement WebSockets */ var server = http.createServer(function (request, response) { // Not important for us. We're writing WebSocket server, // not HTTP server }); server.listen(webSocketsServerPort, function () { console.log(" Server is listening on port " + webSocketsServerPort); }); /** * WebSocket server */ var wsServer = new webSocketServer({ // WebSocket server is tied to a HTTP server. WebSocket // request is just an enhanced HTTP request. For more info // http://tools.ietf.org/html/rfc6455#page-6 httpServer: server, }); // This callback function is called every time someone // tries to connect to the WebSocket server wsServer.on("request", function (request) { var connection = request.accept(null, request.origin); // // New Player has connected. So let's record its socket var student = new Student(request.key, connection); // Add the player to the list of all players // console.log(student.index); Students.push(student); // // We need to return the unique id of that player to the player itself // connection.sendUTF( JSON.stringify({ action: "identity", data: student.index }) ); Students[teacherID].connection.sendUTF( JSON.stringify({ action: "connected", data: Students.length, }) ); // Listen to any message sent by that player // connection.on("message", function (data) { // Process the requested action var message = JSON.parse(data.utf8Data); console.log(message); console.log(message.ID); switch (message.action) { // When the user sends the "join" action, he provides a name. // Let's record it and as the player has a name, let's // broadcast the list of all the players to everyone // case "activity_update": Students[teacherID].connection.sendUTF( JSON.stringify({ action: "activity_update", data: "finished", }) ); game_page_counter = game_page_counter - 1; Students[teacherID].connection.sendUTF( JSON.stringify({ action: "page_counter", data: { login_page: login_page_counter, game_page: game_page_counter, }, }) ); break; case "page_changed": Students[student.index].current_page = message.data; console.log(Students[student.index].current_page); if (message.data === "game_page") { game_page_counter = game_page_counter + 1; login_page_counter = login_page_counter - 1; } if (message.data === "login_page") { // game_page_counter = game_page_counter - 1; login_page_counter = login_page_counter + 1; } Students[teacherID].connection.sendUTF( JSON.stringify({ action: "page_counter", data: { login_page: login_page_counter, game_page: game_page_counter, }, }) ); break; case "progress_update": Students[parseInt(message.ID)].progress_ac8 = message.data; Students[teacherID].connection.sendUTF( JSON.stringify({ action: "progress_update", data: Students[parseInt(message.ID)].progress_ac8, }) ); break; case "identity": if (message.data === "teacher") { teacherID = student.index; } console.log("this is teacher ID: " + teacherID); break; case "names": student.member1name = message.data.member1; student.member2name = message.data.member2; student.member3name = message.data.member3; Students[teacherID].connection.sendUTF( JSON.stringify({ action: "names", studentID: message.ID, data: { mem1: student.member1name, mem2: student.member2name, mem3: student.member3name, }, }) ); console.log("namesreceived"); break; //// for teachers case "pause": // Students[0].connection.sendUTF(message); Students[1].connection.sendUTF( JSON.stringify({ action: "paused", }) ); break; case "next": // Students[0].connection.sendUTF(message); Students[1].connection.sendUTF( JSON.stringify({ action: "next", }) ); // Students[2].connection.sendUTF(message); break; case "next_activity": break; } }); // user disconnected connection.on("close", function (connection) { // We need to remove the corresponding player // TODO }); }); // ----------------------------------------------------------- // List of all players // ----------------------------------------------------------- var Students = []; function Student(id, connection) { this.id = id; this.connection = connection; this.member1name = ""; this.member2name = ""; this.member3name = ""; this.teamname = ""; this.robot1code = ""; this.robot2code = ""; this.current_page = ""; this.current_Ac = ""; this.current_phase = ""; this.progress_ac8 = { progress: 0.0, totalTaps: 0, inactivity: 0, mistakesSlope: 0, mistakesIntrepet: 0, }; this.index = Students.length; } Student.prototype = { getId: function () { return { name: this.name, id: this.id }; }, setOpponent: function (id) { var self = this; Students.forEach(function (student, index) { if (student.id == id) { self.opponentIndex = index; Students[index].opponentIndex = self.index; return false; } }); }, }; function BroadcastPlayersList() { var playersList = []; Players.forEach(function (player) { if (player.name !== "") { playersList.push(player.getId()); } }); var message = JSON.stringify({ action: "players_list", data: playersList, }); Players.forEach(function (player) { player.connection.sendUTF(message); }); }