不知道距离上一篇多久没有写了,可能是因为忙(lan)的关系吧。废话不多说,今天要介绍的不算什么新知识,主要是逻辑上的一些东西。什么逻辑呢,加好友,发送好友申请,对方审批通过,拒绝。(很遗憾,对方审批通过和拒绝后的通知没做,看完本博客的小伙伴有兴趣的可以尝试一下)。

  抽空写了新版本的聊天室,内容和上次差不多,这次加上了数据库来处理一些逻辑,包括登录注册功能,OK,现在开始。

  1. 好友申请

  新版本中做了一个默认分组:注册用户 的功能,即所有注册进来的人都会存在于该组中,该组和普通群组一样,可以群聊,也可以单独找人聊,添加好友的目的就是为了在茫茫人海中找到TA。O(∩_∩)O,先上一个图:

  我当前的用户是zhangsan,点击一下GD,可以看到如下窗口:

  我们就从这一步开始吧。首先,当前用户和要聊天的用户建立连接之后,在后台检查是否是好友并且是否存在好友申请记录(后续会提到 ),逻辑很简单,建立一个好友表,查一下,有没有好友关系即可,我们具体看一下,客户端连接成功之后,返回的json是什么:

  解释一下,每个字段的含义。

gid 聊天室唯一id
history 聊天历史记录集合
isfriend 是否是好友,handle,申请处理结果
rid 对方id
sid 本人id
type one代表单聊  group代表群组

  可以看到isfriend中的friend为0,那么就会弹出“还不是好友,是否添加对方为好友”的提示。如果isfriend中的handle(0代表对方申请成为好友,1代表对方同意,2代表对方拒绝),当你点击发送的时候会弹出如下框,添加备注,并且发送成功之后,提示文字会更改:

  2.好友审批

  好友申请已经完成了,我们换成GD用户登录,点击钟表图标,会看到如下效果:

  点击头像,弹出对话框:

  点击是,加为好友,否,拒绝添加好友。拒绝我就不演示了。点击是之后呢,再看看我们的好友列表是不是多了一个好友呢,而且默认分组就是我的好友哦。

  在换回zhangsan用户,看看吧

  PS:虽然不加好友也能聊天。但毕竟多了一层好友关系嘛。其实这个web聊天室可以把很多QQ的功能模仿出来。这次就先介绍加好友吧。(至于为什么拿GD做示范。。。大概是脑子抽了吧。)

  总结:本期简单介绍了加好友的逻辑流程.也作为此系列的终结篇。抽空研究一下,权限验证等其他高级功能。为大家奉献出来,希望大家喜欢,本期就到这里啦。( ^_^ )/~~拜拜

  代码地址:https://github.com/fanpan26/LayIM_SignalR_Chat

ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(六)之 好友申请、同意、拒绝的更多相关文章

  1. 转载 ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天

    ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天   看起来挺简单,细节还是很多的,好,接上一篇,我们已经成功连接singalR服务器 ...

  2. 转载 ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据

    ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据   最近碰巧发现一款比较好的Web即时通讯前端组件,layim,百度关键字即可,我下面要做的就是基于这个前 ...

  3. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(二) 实现聊天室连接

    上一篇已经简单介绍了layim WebUI即时通讯组件和获取数据的后台方法.现在要讨论的是SingalR的内容,之前都是直接贴代码.那么在贴代码之前先分析一下业务模型,顺便简单讲一下SingalR里的 ...

  4. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(四) 添加表情、群聊功能

    休息了两天,还是决定把这个尾巴给收了.本篇是最后一篇,也算是草草收尾吧.今天要加上表情功能和群聊.基本上就差不多了,其他功能,读者可以自行扩展或者优化.至于我写的代码方面,自己也没去重构.好的,我们开 ...

  5. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据

    最近碰巧发现一款比较好的Web即时通讯前端组件,layim,百度关键字即可,我下面要做的就是基于这个前端组件配合后台完成即时聊天等功能.当然用到的技术就是ASP.NET SingalR框架.本人不会c ...

  6. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(五) 补充:历史记录 和 消息提醒

    有开发者提问怎么做历史记录功能和即使不打开聊天窗口有消息提醒功能.简单抽时间写了点代码.不过只是基本思路,具体细节没有实现. 正如前几篇博客中提到的,读取历史记录什么时候读取呢?按照常理,应该是打开聊 ...

  7. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天

    看起来挺简单,细节还是很多的,好,接上一篇,我们已经成功连接singalR服务器了,那么剩下的内容呢,就是一步一步实现聊天功能. 我们先看看缺什么东西 点击好友弹框之后,要给服务器发消息,进入组Gro ...

  8. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(八)之 聊天记录入队(列)

    本篇也算是个番外篇了,跟之前几篇关系不算大.之前一篇  RabbitMQ .NET Client 实战实验 里有介绍过今天要用的内容. 做了一下小更改,就是在用户聊天的时候,消息记录不直接进入数据库, ...

  9. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(七)之 图文,附件消息(2016-05-05 12:13)

    上一篇介绍了加好友的流程,这里不再赘述,不过之前的聊天只能发送普通文字,那么本篇就教你如何实现发送附件和图片消息.我们先对功能进行分析: 发送图片,附件,需要实现上传图片和附件的功能. textare ...

随机推荐

  1. zabbix 自定义监控

    一,自定义监控 自定义key能被server和agent认可, zabbix_get -s 172.16.1.6 -p 10050 -k "system.cpu.load[all,avg1] ...

  2. cloudemanager安装时出现ProtocolError: <ProtocolError for 127.0.0.1/RPC2: 401 Unauthorized>问题解决方法(图文详解)

    不多说,直接上干货! 问题详情 查看日志/var/log/cloudera-scm-agent/,得知 解决办法 $> ps -ef | grep supervisord $> kill ...

  3. Navicat Premium v12.0.23.0 破解教程x86,x64通用,手动破解

    教程来源于:吾爱破解网站 ----------更新线----------- 2018.01.23 Navicat Premium v12.0.23.0 测试破解依然有效 ----------更新线-- ...

  4. TOJ 3184 Mine sweeping

    描述 I think most of you are using system named of xp or vista or win7.And these system is consist of ...

  5. nyoj 600——花儿朵朵——【离散化、线段树插线问点】

    花儿朵朵 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 春天到了,花儿朵朵盛开,hrdv是一座大花园的主人,在他的花园里种着许多种鲜花,每当这个时候,就会有一大群游 ...

  6. mysql应用学习-windows(64位)安装和配置mysql(5.6.20)

    下载安装包MySQL Installer 下载地址1:http://dev.mysql.com/downloads/windows/installer/ 说明:官网当前版本 5.6.22:虽然只有32 ...

  7. C# 实现OrderBy按多个字段排序

    //倒序 list.OrderByDescending(i => i.a).ThenByDescending(i => i.b); //顺序 list.OrderBy(i => i. ...

  8. PHP常用的一些数组操作总结

    1.array_values() :返回包含数组中所有键值的数组,不保留键名. 2.array_diff() 函数返回两个数组的差集数组.该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的 ...

  9. unity3D使用C#遍历场景内所有元素进行操作

    最近入门Unity3D,跟着教程做完了survival射击游戏,就想加一个功能,就是按一个按钮屏幕上的怪物都清空. 如图右下角所示. 我的方法是赋予所有怪物一个标签Tag,然后根据标签销毁Gameob ...

  10. vue 上拉加载更多

    var _this=this; var goods_id = _this.$route.query.id; var isscroll = true; _this.$nextTick(() => ...