当前位置: 首页 > news >正文

用uniapp 及socket.io做一个简单聊天app 踢人拉黑 7

在聊天群里,以及私聊时,可以点对方头象弹出踢跟拉黑,踢只是让对方退出聊天室。拉黑是记对方退出且不能再进入。

socket.io 中的踢人流程:
将用户从groupUsers 删除,表现在uniapp的界面,就是通知friends页,你这孙子被踢了。只是提示。但还能进去。但是如果是被黑,则是你被踢且删除。这时要求界面进行重新的绑定。将这一个群或将私聊删掉。

 const groups = {};  // 存储用户与群组的映射const kickedUsers = {};  // 存储被踢出用户的信息const groupUsers = {};  // 存储每个群组中的用户列表socket.on('kickUser', ({ groupName, userName }) => {for (let id in groups) {if (groups[id].userName === userName && groups[id].groupName === groupName) {io.sockets.sockets.get(id).leave(groupName);io.to(groupName).emit('message', `${userName} 已被踢出群组`);// 从用户列表中删除if (groupUsers[groupName]) {groupUsers[groupName] = groupUsers[groupName].filter(user => user !== userName);io.to(groupName).emit('userList', groupUsers[groupName]);}console.log(`${userName} 被踢出群组 ${groupName}`);if (!kickedUsers[groupName]) {kickedUsers[groupName] = [];}kickedUsers[groupName].push(userName);break;}}});

再加入一个退群功能:

app.get('/leavgroup', authenticateToken, async (req, res) => {try {const userId = req.user.id;let { groupid: group_id } = req.query;await Friend.destroy({ where: {user_id:userId, group_friend_id:group_id,type:'group' } });return res.json({ code:0, message: '退出成功' });} catch (error) {console.log(error)return res.json({ code:1, message: '退出出错' });}
});

拉黑的接口:

app.get('/black', authenticateToken, async (req, res) => {try {const userId = req.user.id;let {  group_id,name } = req.query;let user = await User.findOne({ where: { username:name } });if(user){let user_id = user.id;if(userId==user_id){return res.json({ code:1, message: '不能拉黑自己' });}if(group_id>0){await Friend.destroy({ where: {user_id:user_id, group_friend_id:group_id,type:'user_id' } });await Invite.destroy({ where: {inviter_id:userId, invitee_id:user_id } });return res.json({ code:0, message: '拉黑成功' });}else{//删除所有的记录await Friend.destroy({ where: {user_id:user_id, group_friend_id:userId,type:'user' } });await Friend.destroy({ where: {user_id:userId , group_friend_id:user_id,type:'user' } });await Invite.destroy({ where: {inviter_id:user_id, invitee_id:userId,group_id } });await Invite.destroy({ where: {inviter_id:userId, invitee_id:user_id ,group_id } });}}return res.json({ code:0, message: '退出成功' });} catch (error) {console.log(error)return res.json({ code:1, message: '退出出错' });}
});
http://www.lryc.cn/news/418097.html

相关文章:

  • springboot项目迁移到阿里云函数
  • Java设计模式(桥接模式)
  • 【独家原创】基于APO-Transformer-LSTM多特征分类预测(多输入单输出)Matlab代码
  • 【大模型】大模型指令微调的“Prompt”模板
  • Spring的设计模式----工厂模式及对象代理
  • 【算法】浅析广度优先搜索算法
  • 分布式时序数据库TimeLyre 9.2发布:原生多模态、高性能计算、极速时序回放分析
  • PMP考试题库每日五题+答案解析
  • 机器学习用python还是R,哪个更好?
  • 【数据结构】mapset详解
  • 数据结构(邓俊辉)学习笔记】词典 02—— 散列函数
  • Python学习(1):使用Python的Dask库实现并行计算
  • 数据结构 - 哈希表
  • 电商选品这几点没做好,等于放弃80%的流量!
  • 【教程】最新可用!Docker国内镜像源列表
  • 使用RabbitMQ在Spring Boot入门实现简单的消息的发送与接收
  • 基于物联网的水质监测系统设计与实现:React前端、Node.js后端与TCP/IP协议的云平台集成(代码示例)
  • Vcpkg安装指定版本包或自定义安装包
  • 【C++深度探索】红黑树实现Set与Map的封装
  • 终于有人把客户成功讲明白了
  • [新械专栏] 肾动脉射频消融仪及一次性使用网状肾动脉射频消融导管获批上市
  • leetcode-119-杨辉三角II
  • 【第八节】python正则表达式
  • 三大浏览器Google Chrome、Edge、Firefox内存占用对比
  • 【wiki知识库】08.添加用户登录功能--后端SpringBoot部分
  • vue中nextTick的作用
  • 计算机网络面试-核心概念-问题理解
  • go语言创建协程
  • RabbitMQ之基于注解声明队列交换机:使用@RabbitListener实现消息监听
  • 【grafana 】mac端grafana配置的文件 grafana.ini 及login