2017-09-09 2 views
0

Ich benutze Socket.io mit Node.js und ich möchte Benutzer paaren und an ein neues Zimmer senden.Verschieben Sie einen anderen Benutzer in ein Zimmer mit Socket.io

Wenn ein Benutzer verbindet, innerhalb io.on('connection') ich bestimmt ihre Kompatibilität mit einem Benutzer warten auf Pairing in einem Array.

Wenn der angemeldete Benutzer mit einem wartenden Benutzer kompatibel ist, möchte ich beide in einen neuen Raum verschieben.

Dies ist mein derzeitiger Ansatz. Hinweis: [1029387,1983934,9243802] ist ein Array von Benutzer-IDs.

var pendingPlayers = { 
    "spelling": { 
     "level1":[1029387,1983934,9243802], 
     "level2":[] 
    } 
} 


io.on('connection', function(socket) { 
    // check compatibility 
    // move current player and other queued player to new room 
}); 

Die einzige Idee, die ich habe, ist zu socket.emit('room', 'new room name'); vom Server zum Client, für die Warteschlange Spieler auf den Server mit dieser ID zurück zu senden und dann verwenden:

io.on('connection', function(socket) { 
    socket.on('room', function(room) { 
     socket.join(room); 
    }); 
}); 

jedoch dem Senden der Raumnamen zu der Client, um es dann zurück zum Server zu senden, scheint schrecklich weit hergeholt. Ich hoffe, es gibt einen einfacheren Weg.

Ihre Vorschläge werden dankbar angenommen.

+0

Warum Raum an den Client vom Server senden? Bewegen Sie den Client einfach vom Server in diesen Raum. Keine Notwendigkeit, den Kunden zu bitten, Ihnen zu helfen, das zu tun. – jfriend00

+0

Danke jfriend00, aber ich muss einen anderen Benutzer in einen anderen Raum (nicht den betreffenden Benutzer) verschieben. Hoffe das macht Sinn? – Joel

+0

Es gibt keinen Grund, warum Sie das nicht sofort vom Server aus tun können - für jeden Benutzer, der gerade mit Ihrem Server verbunden ist. Welche Informationen verwenden Sie, um Ihre Nutzer zu identifizieren? – jfriend00

Antwort

1

Wie pro Ihren Kommentar

Wenn es keine Spieler bereits in den pendingPlayers sind Objekt für den jeweiligen Ebene, der Benutzer, der ein Spiel auf die pendingPlayers hinzugefügt wird beitritt Objekt.

Anstatt zum Objekt zu gehen, erstellen Sie einen neuen Raum mit nur diesem Player für dieses Level. Nun, wenn neue Spieler kommen nach Ihren Kommentar

Dann, wer der nächste Spieler das jeweilige Level beitreten wird mit dem Spieler ID gepaart werden, die .push() 'ed aus dem Array ist dieses Niveau entspricht, .

machen, dass der nächste Spieler den oben genannten Raum beitreten.

1

Vielleicht brauchen Sie etwas Logik wie im Schlachtschiff-Spiel. Es wird vorübergehend 'Warteraum' verwendet. Ich fand es hier: https://github.com/inf123/NodeBattleship/blob/master/server.js

io.on('connection', function (socket) { 
 

 
    //firstly add player to room until opponent aren't come 
 
    socket.join('waiting room'); 
 

 
    joinWaitingPlayers(); 
 
}); 
 

 
function joinWaitingPlayers() { 
 
    var clients = []; 
 
    for (var id in io.sockets.adapter.rooms['waiting room']) { 
 
    clients.push(io.sockets.adapter.nsp.connected[id]); 
 
    } 
 

 
    if (clients.length >= 2) { 
 
    //if we have a couple, then start the game 
 
    var game = new Game(); 
 

 
    // live "waiting room" 
 
    clients[0].leave('waiting room'); 
 
    clients[1].leave('waiting room'); 
 
    // and then join both to another room 
 
    clients[0].join('game' + game.id); 
 
    clients[1].join('game' + game.id); 
 

 
    } 
 
}

Verwandte Themen