Сохранить параметр функции в глобальную переменную, поступающую из socket.on в node.js - PullRequest
0 голосов
/ 16 января 2019

Я работаю над задачей по созданию модуля чата, который использует socket.io, node.js, java в Android Studio IDE.

Я прошел основы и смог создать базовую комнату чата, чтобыгрупповой чат с несколькими пользователями.Но я хочу сделать это пользователем для пользователя.Для этого я перечислил все подключенные клиенты, используя их идентификаторы сокетов в файле node.js.Но этого недостаточно, чтобы передать этот список клиентской стороне, мне нужно имя пользователя для каждого подключенного идентификатора сокета, чтобы я мог объединить socket.id с соответствующим именем пользователя и поместить его в список.

Я застрял в середине, где я не могу понять, как сделать строку, исходящую из socket.on(event, function(string)), для глобального доступа.Я попытался выдвинуть эту строку в массив и получить доступ к ней после socket.on, но ничего не происходит.

Вот мой код

index.js

const express = require('express'),
http = require('http'),
app = express(),
server = http.createServer(app),
io = require('socket.io').listen(server);
app.get('/', (req, res) => {

res.send('Chat Server is running on port 4040')
});

io.on('connection', (socket) => {

console.log('user connected');
console.log("The socket id is " + socket.id);

socket.on('join', function(userNickname) {
    console.log("User" + userNickname +" : has joined the chat ");
    io.sockets.emit('userjoinedthechat',userNickname +" : has joined the chat ");

    });


var req = io.sockets.connected;
var count = Object.keys(req).length;
console.log(socket);
console.log("Number of connected clients: " + count);
var list = new Array();
for(var i = 0; i < count; i++) {
    user = Object.keys(req)[i];
    list.push("User Id : " + user, "User Name : ");
}
console.log("Connected Clients Socket Id's: " + list);
io.sockets.emit('users', list);
});

Я пытался,

//Declare a global variable or array
var user;
//(or)
var users = new Array();

socket.on('join', function(userNickname) {
    console.log("User" + userNickname +" : has joined the chat ");
    user = userNickname;
    //(or)
    users.put(userNickname);
    io.sockets.emit('userjoinedthechat', userNickname +" : has joined the chat ");
    });

И получить к нему доступ снаружи,

console.log(user);    //global variable
//or
console.log(users);   //Array list

Любая помощь была бы великолепна.Благодаря.

1 Ответ

0 голосов
/ 16 января 2019

Примерно так должно работать:

//Declare a global variable or array
var user;
var users = [];

socket.on('join', function(userNickname) {
    console.log("User" + userNickname +" : has joined the chat ");
    user = userNickname;
    users.push(userNickname);
    io.sockets.emit('userjoinedthechat', userNickname +" : has joined the chat ");
    console.log("User list: ", users);
});

Когда вы сохраняете пользователя, он будет обновляться каждый раз, когда кто-то присоединяется, так что это действительно последний пользователь, который присоединился (вы можете изменить его на latestUser или что-то в этом роде).

Массив пользователей будет доступен глобально, однако будьте осторожны с порядком ваших операторов console.log. Если вы используете console.log сразу после вызова socket.on ('join') .., помните, что изначально вы увидите пустой список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...