2015-07-30 1 views
1

У меня есть одно сомнение относительно socket.io.I есть два типа пользователей i.e-admin,client. Первый администратор создаст идентификатор пользователя и присоединится к комнате. Мне нужно, когда пользователь будет Вступите в комнату, администратор должен получить ответ и получить помощь по этому поводу.Как получить ответ от другого пользователя после присоединения к комнате с помощью socket.io

Мои рабочие коды приведены ниже.

server.js:

var port=8888; 
var express=require('express'); 
var morgan = require('morgan'); 
var http=require('http'); 
var bodyParser= require('body-parser'); 
var methodOverride = require('method-override'); 
var mongo = require('mongojs'); 
var database='Oditek'; 
var collections=['video']; 
var app= express(); 
var server=http.Server(app); 
var io=require('socket.io')(server); 
var db = mongo.connect("127.0.0.1:27017/"+database, collections); 
app.use(express.static(__dirname + '/public'));  // set the static files location /public/img will be /img for users 
app.use(morgan('dev'));      // log every request to the console 
app.use(bodyParser.urlencoded({ extended: false })) // parse application/x-www-form-urlencoded 
app.use(bodyParser.json()) // parse application/json 
app.use(methodOverride());     // simulate DELETE and PUT 
db.on('ready', function() { 
    console.log('database connected') 
}); 
app.get('/',function(req,res){ 
    res.sendfile('view/login.html'); 
}); 
app.post('/login',function(req,res){ 
    var username=req.body.username; 
    var password=req.body.userpassword; 
    if(username && password){ 
     db.video.findOne({ 
      username:username, 
      password:password 
     },function(err,doc){ 
      if(doc){ 
       console.log('login',doc); 
       res.send(doc); 
      } 
      if(err){ 
       console.log('login12',err); 
       res.send("could not login"); 
      } 
     }); 
    } 
}); 
app.get('/video',function(req,res){ 
    res.sendfile('view/video.html'); 
}); 

//socket----programming// 
var roomid; 
io.on('connection',function(socket){ 
    //console.log(socket); 
    roomid=socket.handshake.query.roomid; 
    var usertype=socket.handshake.query.usertype; 
    socket.join(roomid); 

}); 
server.listen(port); 
console.log('server is listening on the port'+port); 

Мой стороне клиента код приведен ниже.

function videoBroadCasting(uType){ 
    var messageGateWay; 
    if(uType=='admin'){ 
     var userid = getRandomString(); 
     $('#styled').val('http://localhost:8888/video?usertype=client & id='+userid); 
     messageGateWay=io('http://localhost:8888/?roomid='+userid+'usertype='+uType); 
    } 
    if(uType=='user'){ 
     messageGateWay=io('http://localhost:8888/?usertype='+uType); 
    } 
    messageGateWay.on('connect',function(){ 
     console.log('socket get connected'); 

    }); 
} 
function getRandomString() { 
    return (Math.random() * new Date().getTime()).toString(36).replace(/\./g, ''); 
} 
function getQuery(key){ 
     var temp = location.search.match(new RegExp(key + "=(.*?)($|\&)", "i")); 
     if(!temp) return; 
     return temp[1]; 
} 

После того, как клиент присоединится к комнате, администратор должен получить одно уведомление. Пожалуйста, помогите мне сделать это.

ответ

0

Одним из простых решений является сохранение объекта сокета от администратора на сервере, когда администратор присоединяется к комнате. Затем, когда какой-то другой пользователь присоединяется к комнате, просто выпустите сообщение в этот сокет из admin/admins. Просто сохраните обновление массива с администраторами, которые действительно вошли в комнату.

Что-то вроде:

var socketAdmin = {}; 
io.on('adminJoins',function(socket){ 
    socketAdmin = socket; 
    roomid=socket.handshake.query.roomid; 
    var usertype=socket.handshake.query.usertype; 
    socket.join(roomid); 
}); 
io.on('clientJoins',function(socket){ 
    roomid=socket.handshake.query.roomid; 
    socketAdmin.emit('newClient', {socketClient: socket, roomId: roomid}; 
    var usertype=socket.handshake.query.usertype; 
    socket.join(roomid); 
}); 

В этом примере, клиент посылает сообщение «adminJoins», если вы являетесь администратором, или «clientJoins» Ir вы являетесь клиентом, вы можете отправить, что проверка uType вар у тебя есть. Если новый клиент присоединяется к комнате, администратор получает сообщение «newClient» с сокетом клиента и roomId (только пример).

+0

Можете ли вы изменить свой код? – satya

+0

Добавлен некоторый код, чтобы объяснить себя лучше, надеюсь, что это поможет – Kangcor

+0

Хорошо, я попробую это и дам вам знать позже. – satya

Смежные вопросы