在直播APP制作时聊天功能是直播软件中的重要功能,在开发中经常涉及根据用户的不同分类对收发消息进行不同的处理。 处理方式如下:
1.在用户进入房间链接socket时,根据用户的属性进入特定房间
if(socket.usertype == 60){//新建当前房间的超管频道和场控频道,用于消息发送
socket.join(data.roomnum+'_60');
}else if(socket.usertype == 40){
socket.join(data.roomnum+'_40');
}
2.在用户发消息时,判断发消息用户类型,并根据类型向1个或多个特定分类房间内发消息(切记不要发送重复,尽量不要让每个用户进入多个特定房间)
clientRedis.hget( "super",socket.uid,function(error,res){
if(error) return;
if(res != null){
var data_str2={
"msg":[
{
"_method_":"SystemNot",
"action":"1",
"ct":''+dataObj['msg'][0]['ct'],
"msgtype":"4"
}
],
"retcode":"000000",
"retmsg":"OK"
};
process_msg(io,socket.roomnum,JSON.stringify(data_str2));
console.log(1);
}else{ clientRedis.hget("isspeak",socket.roomnum,function(error,res){
if(error) return;
if(res == 1 || socket.usertype == 40 || socket.usertype == 50 ){
clientRedis.hget(socket.roomnum + "shutup",socket.uid,function(error,res){
if(error) return;
if(res != null){
var time = Date.parse(new Date())/1000;
if((time < parseInt(res))){
var newData = dataObj;
newData['retcode'] = '409002'; socket.emit('broadcastingListen',[JSON.stringify(newData)]);
}else{//解除禁言
clientRedis.hdel(socket.roomnum + "shutup",socket.uid); process_msg(io,socket.roomnum,data_str);
console.log(2);
//消息记录
//LV-2019-03-25
//clientRedis.h(socket.roomnum + "shutup",socket.uid);
// if(socket.uid != socket.roomnum){
// var timea = Date.parse(new Date());
// console.log(msg);
// clientRedis.hset('msglist_'+socket.stream,timea,JSON.stringify(msg));
// }
}
}else{
var timea = Date.parse(new Date()); process_msg(io,socket.roomnum,data_str);
console.log(3);
//消息记录
//LV-2019-03-25
// if(socket.uid != socket.roomnum){
// console.log(msg);
// clientRedis.hset('msglist_'+socket.stream,timea,JSON.stringify(msg));
// }
3.在改变用户状态时,需要让用户退出特定房间
//设置为管理员的加入管理员房间 反之踢出管理员房间
if(socket.usertype == 50 ){
if(msg.action ==1){
//设为管理
sockets[msg.touid].usertype = 40;
sockets[msg.touid].join(socket.roomnum+"_40");
}else{
//取消管理
sockets[msg.touid].usertype = 30;
var room = socket.roomnum+"_40";
sockets[msg.touid].leave(room);
}
process_msg(io,socket.roomnum,data_str);
}
4.在用户退出房间时,要同时将用户的特定房间属性退出
socket.leave(socket.roomnum);
socket.leave(socket.roomnum+"_40");
socket.leave(socket.roomnum+"_60");
以上就是在直播APP制作时聊天功能得重要介绍,在开发中经常涉及根据用户的不同分类对收发消息进行不同的处理方式,小编针对此功能就介绍到这,后续还会有更多此类功能介绍,关注本博主,会持续为大家更新开发技巧。
声明:本篇文章为小编原创文章,转载请注明出处及作者。