PUBNUB存在UUID不会离开频道

时间:2016-02-19 08:37:46

标签: javascript chat uuid pubnub

我在Javascript中使用pubnub(版本3.10.2,我相信它是截至目前的最新版本)。我正在制作一个小游戏,并且游戏旁边是一个聊天div,我在其中添加了一个包含我的消息的li到ul。我也有一个入住柜台。我在pubnub.subscribe(presence:displayOccupancy)中调用一个函数来显示m.occupancy。 (对不起,如果所有这些都是无用的信息,第一个问题)问题是有一个UUID,我命名为“test3”,它不会从频道“聊天”超时,当我按下一个按钮强制UUID取消订阅时,它几秒钟后会自动重新加入。在更改UUID并再次尝试之后,它们会根据我的心跳正常超时,如果我取消订阅UUID,它将生成一个离开事件,就是这样。为什么UUID不会离开频道或超时?

编辑:不仅是“test3”UUID徘徊不前。每次我从Dreamweaver重新打开并测试我的代码时,我之前已经分配过的最新测试UUID“替换”之前的UUID。 (“以前”,如前一天,而不是之前的所有测试)

// JavaScript Document

var uuid = PUBNUB.uuid();
var pubnub = PUBNUB.init({
	publish_key: 'pub-c-bbf633c9-8ddb-43f7-bf4c-c03215ccd8d8',
	subscribe_key: 'sub-c-a1b830fa-d9f5-11e5-a22c-02ee2ddab7fe',
	uuid: uuid,
	heartbeat: 10
});

var noOfWordsInRow = 0;
//arrays
var consanantArray = ["b","c","d","f","g","h","j","k","l","m","n","p","r","s","t","v","w","y"];
var vowelArray = ["a","e","i","o","u"];
var submittedWordsArray = [];

//containers
var lettersDiv = $("div#letterDisplay");
var wordAreaDiv = $("div#wordArea");
var submitDiv = $("div#submitDiv");
var startDiv = $("div#start");

var checkDiv = $("div#checkDiv");

var consanantUl = $("ul#consanantUl");
var vowelUl = $("ul#vowelUl");
var chatUl = $("#chatList");

var confirmWord = $("p#word");
var confirmBtn = $("#confirmBtn");
var error = $("#error");
var noOfPlayers = $("p#noOfPlayers");
//buttons
var startGame = $("button#enterGame");

//input
var chatInput = $("#chatInput");

//other

/**
var consanantOne = $("#firstConsanant");
var consanantTwo = $("#secConsanant");
var consanantThree = $("#thirdConsanant");
var consanantFour = $("#fourthConsanant");
var vowelOne = $("#firstVowel");
var vowelTwo = $("#firstVowel");
var vowelThree = $("#firstVowel");
**/

//pubnub portion of game














$("#testLeave").click(function(){
	"use strict";
	pubnub.unsubscribe({
		channel: "chat"
	});
});









//game and chat stuff below
$(window).load(function(){
	"use strict";
	generateLetters();
});

startGame.click(function(){
	"use strict";
	//channel
	startDiv.css("display", "none");
});

function handleMessage(message){
	"use strict";
	chatUl.append("<li>"+message+"</li>");
}

function getNoOfUsers(m){
	"use strict";
	console.log(m);
	if(m.action === "join"){
		
	}
	else if(m.action === "timeout" || m.action === "leave"){
		pub("chat","Player left");	
	}
	noOfPlayers.html(m.occupancy);	
}

function playerJoined(){
	"use strict";
	pub("chat","Player joined");	
}

function pub(channel, message){
	"use strict";
	pubnub.publish({
		channel: channel,
		message: message
	});
}

chatInput.keydown(function(key){
	"use strict";
	if(key.which === 13){
		pub("chat",$("#chatInput").val());
		chatInput.val('');
	}
});

function generateLetters(){
	"use strict";
	//vowels
	generateRandomLetters(vowelArray, vowelUl, 3);
	//consanants
	generateRandomLetters(consanantArray, consanantUl, 4);
}

function generateRandomLetters(array, ul, noOfElementsNeeded){ //noOfElementsNeeded = 3 or 4
		"use strict";
		var usedLetters = [];
		var successCount = 0;
		while(successCount < noOfElementsNeeded){
			var letter = array[Math.floor(Math.random()*array.length)];
			var successful = usedLetters.indexOf(letter) === -1; //boolean, checks if the generated letter has been generated before
			if(successful){
				ul.append("<li><button>"+letter+"</button></li>");
				usedLetters.push(letter);
				successCount++;
			}
		}
}

function duplicateLetter(letter){
	"use strict";
	if((confirmWord.text()).indexOf(letter) > -1){
		return true;	
	}
	else {
		return false;
	}
}

function wordLengthAboveTwo(){
	"use strict";
	if((confirmWord.text()).length < 3){
		return false;
	} else {
		return true;
	}
}

function repeatWords(){
	"use strict";
	if(submittedWordsArray.indexOf(confirmWord.text()) === -1){
		return false;
	} else {
		return true;	
	}
}

$(document).on('click', 'ul li button', function(){
	"use strict";
	var letter = $(this).text();
	if(duplicateLetter(letter)){
		error.text("You cannot use the same letter twice in a word.");
	}
	else {
		confirmWord.append(letter);
	}
	
});

confirmBtn.click(function(){
	"use strict";
	if(wordLengthAboveTwo()){
		if(!repeatWords()){
			if(noOfWordsInRow === 5){
				$("#tableOfSubmittedWords").append("<tr><td><p>"+confirmWord.text()+"</p></td></tr>");
				noOfWordsInRow++;
				noOfWordsInRow = 1;
			} else {
				$("#tableOfSubmittedWords tr:last").append("<td><p>"+confirmWord.text()+"</p></td>");
				noOfWordsInRow++;
			}
			submittedWordsArray.push(confirmWord.text());
			confirmWord.text('');
			error.text('');
		} else {
			error.text("You cannot submit two of the same word.");
		}
	} else {
		error.text("Your word has to be above two letters in length.");
	}
});

$(document).on('click', 'p#word', function(){
	"use strict";
	confirmWord.text('');
});

pubnub.subscribe({
	channel: "chat",
	presence: getNoOfUsers,
	message: handleMessage,
	connect: playerJoined
});
@charset "utf-8";
/* CSS Document */

#container {
	height: 800px;
	position:fixed;
}

div#start {
	z-index: 18;	
	height: 850px;
	position: absolute;
	background-color: #00FF8C;
	width: 100%;
}

#letterDisplay {
	position: relative;
	background-color: #01ACFF;
	height: 200px; /*200px*/
	margin: 0 auto;
}

#wordArea {
	overflow: scroll;
	height: 400px;
	width: 100%;
	text-align: center;
}

#submitDiv {
	background-color: #01ACFF;
	height: 250px;
	margin: 0 auto;	
}

#chatDiv {
	position: fixed;
	height: 200px;
	z-index: 2;	
}

ul#chatList li, ul#listOfUsers li{
	display: list-item !important;
	text-align: left;
}

table {
	width: 100%;
	height: 100%;
	table-layout: fixed;
}

table tr {
	width: 100%;	
}

table tr td {
	size: auto;
}

table tr td p{
	font: 25px/1 "Comic Sans MS", Verdana, sans-serif;
	text-transform: uppercase;
}

#confirmBtn {
	height: 75px;
	width: 200px;	
}

#checkDiv {
	padding-top: 25px;
	text-align: center;
	size: auto;	
}

p#word {
	font: 30px/1 "Comic Sans MS", Verdana, sans-serif;
	text-transform: uppercase;
}

p#word:hover {
	color: #E74C3C;
	cursor: pointer;
}

p#error {
	color: #E74C3C;	
	transition: all 0.1s;
	-moz-transition: all 0.1s;
	-webkit-transition: all 0.1s;
}

div ul li p {
	font: 25px/1 "Comic Sans MS", Verdana, sans-serif;
	text-transform: uppercase;
}

button {
	font: 36px/1 "Comic Sans MS", Verdana, sans-serif;
	color: #FFF;
	width: 75px;
	height: 75px;
  	text-transform: uppercase;
  	border-radius: 4px;
  	background-color: #F2CF66;
	text-shadow: 0px -2px #2980B9;
	transition: all 0.1s;
	-moz-transition: all 0.1s;
	-webkit-transition: all 0.1s;
}

button#enterGame {
	width: auto;	
}

button:hover {
	background-color: #E74C3C;
	cursor: pointer;
}

button:active {
	-webkit-transform: translate(0px,5px);
  	-moz-transform: translate(0px,5px);
	transform: translate(0px,5px);
	border-bottom: 1px solid;
}

ul {
	list-style-type: none;
	text-align: center;
}

ul#consanantUl {
	padding-top: 25px;
}

ul#vowelUl {
	vertical-align: bottom;
}

ul li{
    display: inline;
    padding-right: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Word Game</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>

<body>
    <div id="container">
    	<button id="testLeave">clik 2 leev</button>
    	<div id="start">
        	Channel Name? <input type="text" id="channelInput">
            <button id="enterGame">Join</button>
            <p id="startMenuError"></p>
        </div>
        
        <div id="presenceDiv">
            <p id="noOfPlayers"></p>
        </div>
        
        <div id="chatDiv">
        	<ul id="chatList"></ul>
            <input type="text" id="chatInput">
        </div>
    	<div id="letterDisplay">
        	<ul id="consanantUl"></ul>
            <ul id="vowelUl"></ul>
        </div>
        
        <div id="wordArea">
            <table id="tableOfSubmittedWords">
            	<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
            	<tr></tr>
            </table>
        </div>
        
        <div id="submitDiv">
        	<div id="checkDiv">
            	<p id="word"></p>
            	<button id="confirmBtn">submit</button>
                <p id="error"></p>
            </div>
        </div>
    </div>
    
	<!--Jquery-->
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
	<script src="https://cdn.jsdelivr.net/jquery.color-animation/1/mainfile"></script>
	<!--Pubnub-->
	<script src="https://cdn.pubnub.com/pubnub-3.10.2.js"></script>
	<!--My Code-->
	<script src="script.js"></script>
</body>

</html>

0 个答案:

没有答案