var ws; var userName = "" window.onload = function() { 'use strict'; function getRandomInt(max) { return Math.floor(Math.random() * Math.floor(max)); } var LobbyList = Backbone.View.extend({ lobbies: undefined, initialize: function () { this.elCount = 0; }, template: _.template('\n' + ' \n' + ' \n' + ' \n' + '
HostStatusAction
'), events: { "click .title": "check" // Обработчик клика на кнопке "Проверить" }, joinAsPlayer: function () { this.elCount = "azaz" + getRandomInt(100000000); this.render(); }, render: function() { var lobbiesAsTableRows = _.reduce(this.lobbies, function (memo, lobby) { var joinButton = (lobby.status === "NotStarted()") ? '' : ""; var observerButton = ''; return memo + '\n' + ' '+ lobby.user1Info.name.substring(0, 20) +'\n' + ' '+ lobby.user2Info.name.substring(0, 20) +'\n' + ' '+ lobby.status +'\n' + ' ' + joinButton + ' ' + observerButton + ' ' + ''; }, ""); var tableStart = '\n' + ' \n' + ' \n' + ' \n' + ' \n'; var tableEnd = '
Player1Player2StatusAction
'; var res = tableStart + lobbiesAsTableRows + tableEnd; $("#deciderList tbody", res).append(lobbiesAsTableRows); console.log(res); this.$el.html(res); } }); var lobbyList = new LobbyList; $("#lobbiesList").append(lobbyList.$el); lobbyList.render(); $("#createDecider").click(function(event) { event.preventDefault(); ws.send(JSON.stringify({ type: "createDecider" })); }); $("#submitmsg").click(function(event) { sendMessage(); }); $("#usermsg").on('keyup', function (e) { if (e.key === 'Enter' || e.keyCode === 13) { sendMessage() } }); $("#exit").click(function(event) { event.preventDefault(); ws.send(JSON.stringify({ type: "leaveDecider" })); $("#decider").hide(); $("#lobbies").show(); $(".navbar").show(); }); if($.cookie('user')=== undefined){ var result = prompt("Enter nickname: ", ); $.cookie('user', result, { expires: 1337 }); userName = result; }else{ userName = $.cookie('user'); } $("#playerName").html(userName); ws = new WebSocket($("body").data("ws-url")); ws.onmessage = function(event) { var message; message = JSON.parse(event.data); switch (message.type) { case "refreshLobby": renderMaps(message.lobby.maps, message.lobby.status); renderPlayersAndStats(message.lobby); break; case "switchToLobby": console.log(message); switchToLobby(message.lobby.maps, message.lobby.status); renderPlayersAndStats(message.lobby); break; case "sendMessage": console.log(message); addMessageToChat(message.message); break; case "sendMapBanMessage": console.log(message); addBanMapMessageToChat(message.message); break; case "lobbyError": console.log(message); disconnectLobby(message.error); break; case "lobbies": lobbyList.lobbies = message.lobbies; lobbyList.render(); return console.log(message); break; default: } }; ws.onopen = function () { ws.send(JSON.stringify({ type: "userName", name: $.cookie('user') })); ws.send(JSON.stringify({ type: "getLobbies" })); } var timerId = setInterval(() => ws.send(JSON.stringify({ type: "getLobbies" })), 2000); } function changeNick() { result = prompt("Введите ник", $.cookie('user')); if(result == null) return; result = result.substr(0, 20); $.cookie('user', result, { expires: 7 }); ws.send(JSON.stringify({ type: "userName", name: $.cookie('user') })); userName = $.cookie('user'); $("#playerName").html(userName); } // -----ф-ии прихода с сервера function switchToLobby(maps, status) { console.log(maps); renderMaps(maps, status); $("#lobbies").hide(); $(".navbar").hide(); $("#decider").show(); $("#chatbox").html(""); } function disconnectLobby(error) { $("#decider").hide(); $(".navbar").show(); $("#lobbies").show(); ws.send(JSON.stringify({ type: "getLobbies" })); alert(error); } function renderMaps(maps, lobbyStatus) { var resHtml = ""; _.each(maps, function (map) { var banHtml = ""; var banClass = ""; if(map.isBanned){ banHtml = "
"; banClass = "bannedMap"; } if(lobbyStatus === "NotStarted()"){ banClass = "bannedMap"; } resHtml = resHtml + '
'; }) $("#mapList").html(resHtml); } function renderPlayersAndStats(lobby) { var resHtml = "
"; var player1ReadyBtn = ""; var player2ReadyBtn = ""; var readyImg = ""; var notReadyImg = ""; var warningClass = (lobby.user2Info.name !== "") ? "warningButton" : ""; if(lobby.user1Info.name === userName){ if(lobby.user1Info.isReady){ player1ReadyBtn = "" }else{ player1ReadyBtn = "" } }else{ if(lobby.user1Info.isReady){ player1ReadyBtn = readyImg }else{ player1ReadyBtn = notReadyImg } } if(lobby.user2Info.name === userName){ if(lobby.user2Info.isReady){ player2ReadyBtn = "" }else{ player2ReadyBtn = "" } } else { if(lobby.user2Info.isReady){ player2ReadyBtn = readyImg }else{ player2ReadyBtn = notReadyImg } } if (lobby.user1Info.name === userName || lobby.user2Info.name === userName) { $("#inputMsg").show(); } else { $("#inputMsg").hide(); } var lobbyTypeText = ""; var last3Selected = ""; var last5Selected = ""; var superfinalSelected = ""; var looserPickSelected = ""; var isNecronsSelected = ""; if(lobby.isNecrons) isNecronsSelected = "checked"; switch (lobby.selectedType) { case "Last3()": last3Selected = "selected"; lobbyTypeText = "Play on last 3 maps"; break; case "Last5()": last5Selected = "selected"; lobbyTypeText = "Play on last 5 maps"; break; case "Superfinal()": superfinalSelected = "selected"; lobbyTypeText = "Draft to select 9 maps for BO7"; break; case "LooserPick()": looserPickSelected = "selected"; lobbyTypeText = "Play on last map"; break; } switch (lobby.status) { case "NotStarted()": resHtml = "
" + lobby.user1Info.name + ": " + player1ReadyBtn +"

" if(lobby.user2Info.name !== ""){ var kickBtn = "" if(lobby.user1Info.name === userName){ kickBtn = " - "; } resHtml += "
" + lobby.user2Info.name + ": " + player2ReadyBtn + kickBtn + "
" }else{ resHtml += "
waiting 2-nd player...
" } var disabledText = ""; if(lobby.user1Info.name !== userName){ disabledText = "disabled"; } resHtml += "
"; if(lobby.user1Info.name !== userName && lobby.user2Info.name !== userName){ disabledText = "disabled"; }else{ disabledText = ""; } resHtml += "
"; resHtml += "
"; break; case "Draft()": console.log(lobby.turn); var playerTurn = (lobby.playerTurn === 1) ? lobby.user1Info.name : lobby.user2Info.name resHtml = "
"+lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " +lobbyTypeText+ "
" + playerTurn +" turn
"; break; case "Finish()": var lastMaps = _.filter(lobby.maps, function (map){ return map.isBanned === false; }); resHtml = "
"; _.forEach(lastMaps,function (map){ resHtml += convertMapName(map.map) + "; " }) resHtml += "
"; } resHtml = resHtml + "
" $("#playersStatsList").html(resHtml); } function addMessageToChat(message){ var messageHtml = "
" + message.userName + ": " + message.message + "
"; var chatBox = $("#chatbox"); chatBox.append(messageHtml); chatBox.scrollTop(40000); } function addBanMapMessageToChat(message){ var messageHtml = "
" + convertMapName(message.mapTechName) + " banned by " + message.user + "
"; var chatBox = $("#chatbox"); chatBox.append(messageHtml); chatBox.scrollTop(40000); } function banMap(map){ ws.send(JSON.stringify({ type: "banMap", map: map })); } function setReady(){ ws.send(JSON.stringify({ type: "setReady" })); } function setNotReady(){ ws.send(JSON.stringify({ type: "setNotReady" })); } function changeLobbyType(){ var lobbyType = $("#deciderOption").val(); ws.send(JSON.stringify({ type: "changeLobbyType", lobbyType: lobbyType })); } function changeIsNecronSelected(){ var isNecronSelected = $("#isNecron").is(':checked'); ws.send(JSON.stringify({ type: "changeIsNecronSelected", isNecronSelected: isNecronSelected })); } function joinDecider(actorName){ ws.send(JSON.stringify({ type: "joinDecider", lobbyActorName: actorName })); } function observerDecider(actorName){ ws.send(JSON.stringify({ type: "observerDecider", lobbyActorName: actorName })); } function sendMessage(){ var userInput = $("#usermsg"); var message = userInput.val(); userInput.val(""); if(message !== ""){ ws.send(JSON.stringify({ type: "sendMessage", message: message })); } } function kickSecondPlayer(){ ws.send(JSON.stringify({ type: "kickSecondPlayer" })); } function convertMapName (techMapName) { var mapName = techMapName.replace("2p_", "").replaceAll("_", " ") + " (2)"; return mapName.charAt(0).toUpperCase() + mapName.slice(1); }