- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些代码,仅在两个客户都输入答案后才尝试运行。这些是函数 finish 和 datarequest();。
目前我拥有它,它可以正确等待两个响应,并且不会在一个客户端应答后立即发出。问题在于它没有达到我的 if 语句。
有没有办法++ nrecieved++;基于客户给出的答案类型。 IE。两个错误答案、两个正确答案还是各选一个?基本上是让它运行 nrecieved++;基于两个客户的响应?
var nrecieved = 0;
var responses = {}; // Socket id to response
function finish(){
// Loop through users in game and send them their responses
for(var id in responses){
if(responses.hasOwnProperty(id)){
// Send the response
io.to(id).emit('updatePlayer', responses[id]);
}
}
}
socket.on('playerCorrect', function (data) {
nrecieved++;
responses[socket.id] = data;
answerValidation(nrecieved);
});
socket.on('playerWrong', function (data) {
nrecieved++;
responses[socket.id] = data;
answerValidation(nrecieved);
});
console.log(nrecieved);
function answerValidation(value) {
nrecieved = value + value;
console.log(value);
if(nrecieved == 2){
finish();
dataRequest();
}
}
编辑:
包含的粘贴箱:http://pastebin.com/y6akQ6Sh
客户端:
// On click of a answer button check if it is the correct answer if it is tell the server
$(document).on('click', '.answerButton' , function(){
function answerChecker(element){
if(element == gaPosition) {
correctAnswer();
}
else {
console.log("Incorrect!");
incorrectAnswer();
}
}
var clickedButton = $(this).data('button');
console.log(clickedButton);
answerChecker(clickedButton);
});
function buttonRemover() {
$(".buttonContainer").removeClass("fadeInRightBig");
$(".buttonContainer").addClass("fadeOutRightBig");
setTimeout(function() {
$(".buttonContainer").remove();
}, 500);
}
// Random number function
function randomIntFromInterval(min,max){
return Math.floor(Math.random()*(max-min+1)+min);
}
// Check if correct + send to server
function correctAnswer() {
var correct = true;
socket.emit('playerCorrect', {answer: correct});
console.log(correct);
buttonRemover();
}
// Check if wrong + send to server
function incorrectAnswer () {
var wrong = false;
socket.emit('playerWrong', {answer: wrong});
buttonRemover();
}
socket.on ('updatePlayer', function (data) {
if (data.answer === true) {
console.log ('Player got it right! ' + data.answer);
}else if (data.answer === false) {
console.log ('Player got it wrong! ' + data.answer);
}
});
最佳答案
尝试创建自己的对象来存储用户及其套接字和答案。
以下是您的存储方式的示例:
var socketStorage = {
roomname : {
some-socketid : { // the socket id from socket.id
username : "username", // the username of the user
socket : socket, // the socket of the user
currQuestion : { // an object representing the current question
answered : false,
answer : false
},
allQuestionsAnswers : [ true, true, true ] // an array of answers
},
some-socketid : {
// the socket id from socket.id
username : "otherusername",
socket : socket,
currQuestion : {
answered : false,
answer : false
},
allQuestionsAnswers : [ true, true, false ]
},
}
};
以下是如何使用该对象:
var socketStorage = {};
io.sockets.on("connection",function(socket){
var roomName = "gamelobby"; // ideally generate a unique room where 2 sockets would join
socketStorage[roomName] = {};
socketStorage[roomName][socket.id] = {
username : "username",
socket : socket,
currQuestion : {
answered : false,
answer : false
},
allQuestionsAnswers : []
};
})
理想情况下让用户向您发送他的信息(例如用户名),例如:
socket.emit("setusername", {username:"my-awesome-username"});
并在服务器上以这种方式在存储中设置用户名:
socket.on("setusername", function(msg){
socketStorage[roomName][socket.id].username = msg.usename;
})
这是一个简单的工作示例:
客户端:
socket.on("connect",function(){
// Joining the game
socket.emit('joingame', {username:"foobar"});
$(document).on('click', '.answerButton' , function(){
function answerChecker(element){
if(element == gaPosition) {
correctAnswer();
}
else {
console.log("Incorrect!");
incorrectAnswer();
}
}
var clickedButton = $(this).data('button');
console.log(clickedButton);
answerChecker(clickedButton);
});
function correctAnswer() {
var correct = true;
socket.emit('playercorrect', {answer: true});
console.log(correct);
buttonRemover();
}
// Check if wrong + send to server
function incorrectAnswer () {
var wrong = false;
socket.emit('playerwrong', {answer: false});
buttonRemover();
}
socket.on("updateplayer", function(data){
if (data.answer === true) {
console.log ('Player got it right! ' + data.answer);
} else if (data.answer === false) {
console.log ('Player got it wrong! ' + data.answer);
}
})
socket.on("gamefinished", function(data){
console.log(data.message);
});
})
服务器端:
var users = {}, validQuestions = [], validCurrQuestion = [];
io.sockets.on('connection', function(socket){
socket.on("joingame", function(msg){
console.log("joining game");
users[socket.id] = {responses:[],currQuestion: {answered:false,answer:null}};
socket.on("playercorrect",function(msg){
users[socket.id].currQuestion.answered = true:
users[socket.id].currQuestion.answer = true:
users[socket.id].responses.push(msg.answer);
checkAnswers(socket);
})
socket.on("playerwrong",function(msg){
users[socket.id].currQuestion.answered = true:
users[socket.id].currQuestion.answer = false:
users[socket.id].responses.push(msg.answer);
checkAnswers(socket);
})
})
})
io.sockets.on('disconnect', function(socket){
delete users[socket.id];
})
function checkAnswers(socket){
var connectedC = Object.keys(users).length;
for (var clientK in users) {
// check if current q has been answered
if(users[clientK].currQuestion.answered) {
validCurrQuestion.push({socket:socket,answer:users[clientK].currQuestion.answer});
if (validCurrQuestion.length === connectedC) {
// curr question answered by both clients
// send result to both
sendCurrQresults();
}
}
// if the 8 questions have been answered
// push into array
if (users[clientK].responses.length === 8) {
validQuestions.push(socket.id);
}
// if all users have answered all question send game results
if (validQuestions.length === connectedC) {
// finish the game
getWinner()
}
}
}
function sendCurrQresults(){
validCurrQuestion.forEach(function(question, index){
question.socket.emit("updateplayer", {answer: question.answer});
// reset curr question to go to next question
validCurrQuestion.splice(index, 1);
users[socket.id].currQuestion = { answered: false, answer: null};
})
}
function getWinner(){
// Check who has more true response and send by counting user.responses true vs false
}
关于javascript - 等待客户端响应来运行代码socket.io?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38168904/
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我的第一个想法如下: 我在服务器上创建了一个中央 ServerSocket,所有应用程序都可以连接到该服务器。
我正在 Unity 中构建多人游戏。为此,我必须将一些值从客户端发送到两个或多个通过服务器连接的客户端。我想将其构建为服务器真实游戏。客户端将使用 Android,他们的数据将通过服务器同步(可能是一
练习 C 网络编程:我正在编写一个简单的 TCP 客户端-服务器应用程序,它应该将消息(在每个客户端的单独线程中)作为字符串从服务器发送到客户端并在客户端(稍后将成为控制台商店应用程序)。我首先发送消
我使用证书身份验证设置了 AWS Client VPN。我正在为客户端-客户端访问系统进行设置,基本上如 this AWS scenario/example 中所述.一切正常,如果我知道他们的 IP
我正在开发一个小型客户端1/客户端2、服务器(线程)TCP 游戏。在尝试处理延迟问题时,我意识到我的 transmitState() 中存在缺陷。它强制将不必要的信息传递到通讯流中,从而造成迟缓,将汽
来自文档:Configurable token lifetimes in Azure Active Directory (Public Preview) 它提到“ secret 客户端”,刷新 tok
Apollo 客户端开发工具无法连接到我的应用程序。我已在 ApolloClient 构造函数中将 connectToDevTools 传递为 true,但没有任何 react 。我也试过this p
我想在 Pod 内使用 Fabric8 kubernetes 客户端 (java)。如何获取部署集群的 kubernetes 客户端? 我可以使用该集群的 kubeconfig 文件获取任何集群的配置
我正在阅读 the security issue with Log4j我了解此产品受此漏洞影响。但是 Oracle 客户端 11.2 和 12 是否受此问题影响? 我找不到这些产品是否使用任何 Log
Eureka 服务器设置 pom.xml 1.8 Hoxton.SR1 org.springframework.cloud spring
我有一个点对点(客户端/服务器)设置(通过本地 LAN),它使用 Netty,一个 Java 网络框架。我使用原始 TCP/IP(例如,没有 HTTP)进行通信和传输。现在,根据要求,我们希望转向 T
上一篇已经实现了ModbusTcp服务器和8个主要的功能码,只是还没有实现错误处理功能。 但是在测试客户端时却发现了上一篇的一个错误,那就是写数据成功,服务器不需要响应。 接下来要做的就是实现Modb
有没有办法将二维十六进制代码数组转换为 png 图像? 数组看起来像这样(只是更大) [ [ '#FF0000', '#00FF00' ], [ '#0000FF'
我是套接字编程的新手。每次我运行客户端程序时,它都会说“无法连接到服务器”。谁能告诉我我在哪里犯了错误。任何帮助将不胜感激。 这是client.c #include #include #inclu
我们在UNIX环境下制作了简单的client.c和server.c程序。我们使用它来传输一个简单的文本文件,首先打开它,然后读取它并使用 open、read 和 send 系统调用发送;在客户端,我接
当我的程序来自 my previous question正在响应客户端,它应该发送加密消息。 当客户端连接时,它会发送一条类似“YourMessage”的消息。现在我想做的是,当客户端连接时,应该以某
我正在使用 C 和 putty 编写客户端/服务器程序。两个 c 文件位于同一系统上。 我目前在向客户端写回其正在使用的框架以及打印我的框架时遇到问题。它打印出 3 0 9 8,但随后开始打印 134
我正在使用 C 中的 select() 制作一个模拟快餐或其他任何东西的客户端服务器。 我有客户随机点 1-5 种“食物”。服务器每 30 秒决定一次。所有客户最喜欢的食物是什么?他为那些客户提供服务
对于单机游戏,基本的游戏循环是(来源:维基百科) while( user doesn't exit ) check for user input run AI move enemies
1、CentOS安装TortoiseSVN 复制代码 代码如下: yum install -y subversion 2、SVN客户端命令
我是一名优秀的程序员,十分优秀!