当前位置: 首页 > 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: '退出出错' });}
});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024年计算机类学术会议有哪些
  • 什么是oled?
  • 初识增强现实(AR)
  • ubuntu20从docker安装到制作自己的镜像使用记录
  • leetcode数论(2521. 数组乘积中的不同质因数数目)-质因素分解
  • 垃圾收集器
  • 【Linux】(32)详解命名管道 | 日志管理 | 进程池2.0
  • 基于python的百度迁徙迁入、迁出数据分析(七)
  • C# 报表功能
  • Nginx隐藏欢迎页Welcome to CentOS
  • 百日筑基第四十五天-从JAVA8走到JAVA9
  • Spring的代理模式
  • Omit<T, K> 解释
  • 【电子数据取证】支持最新版微信、企业微信、钉钉等重点应用数据提取分析!
  • 网络安全知识讲解
  • hexo+github搭建个人博客
  • 「面试题」如何实现一个圣杯布局?
  • 2019.2.20 c++ 知识梳理
  • android 一些 utils
  • LintCode 31. partitionArray 数组划分
  • React-flux杂记
  • Redis在Web项目中的应用与实践
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Tornado学习笔记(1)
  • 高性能JavaScript阅读简记(三)
  • 关于extract.autodesk.io的一些说明
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 嵌入式文件系统
  • 区块链分支循环
  • 入门级的git使用指北
  • 深度解析利用ES6进行Promise封装总结
  • 手机端车牌号码键盘的vue组件
  • 通过git安装npm私有模块
  • 用mpvue开发微信小程序
  • 原生js练习题---第五课
  • k8s使用glusterfs实现动态持久化存储
  • 带你开发类似Pokemon Go的AR游戏
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ### RabbitMQ五种工作模式:
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (3)nginx 配置(nginx.conf)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C11) 泛型表达式
  • (pojstep1.3.1)1017(构造法模拟)
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (三)docker:Dockerfile构建容器运行jar包
  • (一)80c52学习之旅-起始篇
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)winform之ListView
  • .net mvc部分视图
  • .NET委托:一个关于C#的睡前故事
  • /boot 内存空间不够