Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实现好友及聊天功能

实现好友及聊天功能

原创
作者头像
深雾
修改于 2020-07-06 02:23:04
修改于 2020-07-06 02:23:04
1.6K00
代码可运行
举报
文章被收录于专栏:工具类工具类
运行总次数:0
代码可运行

前言

用户交流是很多软件必备的功能,最近接到策划的新需求开发好友系统,下面分享我实现好友功能的具体方式

好友数据

数据库结构

代码语言:lua
AI代码解释
复制
{ "friend_data"	,"mediumblob"		,{
	myfriend = {},
	blacklist = {},
	applylist = {},
	delfriendlist = {},
	isRefuseApply = false,
}	,"玩家好友数据" },

分为:好友列表,黑名单列表,申请列表,被删除好友列表(客户端需要),允许陌生人申请好友开关

功能开发

玩家登陆加载好友数据,发送好友列表,黑名单列表,申请列表,删除列表信息

1、申请好友

1、判定是否已在好友列表,黑名单列表中

2、判定双方好友人数是否达到上线

3、通过即给对方推送一条消息,返回成功

代码语言:lua
AI代码解释
复制
sc_friend_apply_update 30006 {
	request {
		friendInfo 			0 : friend_data
	}
}

2、处理好友申请

传参人物dbid编号和applytype处理类型

1、applytype为1拒绝申请,applylist表元素删除

2、applytype为0同意申请,判定是黑名单列表、好友列表、好友人数上限

3、同意通过申请,双方好友列表添加元素,申请列表删除元素,推送一条id为0的系统信息

代码语言:lua
AI代码解释
复制
local chatdata = {id = 0,str = "对方已通过你的好友申请",time = lua_app.now()}

3、删除好友

1、从双方好友列表删除

2、对方在线推送删除消息,不在线保存在对方的delfriendlist列表(客户端要求)

4、加入黑名单

1、调用删除好友方法

2、加入黑名单,推送黑名单消息

5、更新好友消息

1、有新的聊天消息时推送数据

2、玩家升级、下线、上线的情况,对玩家在线好友推送消息

代码语言:lua
AI代码解释
复制
--玩家升级事件
function Friend:onLevelUp()
	self:NotifyStatusAlter()
end
 
--通知玩家状态改变
function Friend:NotifyStatusAlter()
	--更新好友点列表
	for dbid,_ in pairs(self.myfriend) do
		local target = server.playerCenter:GetPlayerByDBID(dbid)
		if target and target.isLogin then
			target.friend:UpdateFriendData(self.player.dbid)
		end
	end
end

6、聊天功能

1、判断玩家的等级,字符串,黑名单列表是否异常

2、根据需求分为临时消息和好友消息,临时消息不保存数据,聊天数据客户端保存

3、离线玩家无法发送临时消息,重新登陆临时消息清空

4、非好友聊天推送临时好友数据

客户端传参接受者id :recvId,聊天信息 :str。聊天数据记录发言人id,内容,时间

代码语言:lua
AI代码解释
复制
local chatdata = {id = sender.cache.dbid,str = str,time = lua_app.now()}

5、好友聊天对方在线推送信息

6、好友不在线,保存离线聊天数据

代码语言:lua
AI代码解释
复制
--离线保存数据
local receiverrecords = receiverdata.myfriend[sender.cache.dbid].chatRecord	
table.insert(receiverrecords, chatdata)

玩家登陆发送好友列表示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--发送好友列表
function Friend:SendFriends()
	local datas = {}
	for dbid, data in pairs(self.myfriend) do
		table.insert(datas, {
			friendInfo = _PackPlayerData(dbid),
			chatData = data.chatRecord,
			})
		--离线消息发送完清空
		data.chatRecord = {}
	end
	server.sendReq(self.player, "sc_friend_follow_data", {
			friendlist = datas,
		})
end

好友管理保存数据即可,通信协议建立好后,聊天只是简单的消息推送

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
好友及聊天功能
用户交流是很多软件必备的功能,最近接到策划的新需求开发好友系统,下面分享我实现好友功能的具体方式
深雾
2020/07/10
7700
sdk e qq(E+)
教程属于官方E聊SDK-简介(1) 进入官网 进入管理台 SDK版本:v1.01
全栈程序员站长
2022/08/02
2.1K0
sdk e qq(E+)
刚刚更新:在线聊天系统设计(原理+思路+源码+效果图) 顶
虚拟,普通用户有一个好友列表,好友列表保存着用户的好友,对于虚拟,普通用户来说,他们的好友列表只有高级用户+管理员用户。
linapex
2019/03/26
3.1K0
刚刚更新:在线聊天系统设计(原理+思路+源码+效果图)
                                                    顶
聊天功能如何测试?
软件测试点分析基本原则——通用 第一步:先了解产品的基本的业务流程逻辑:是个什么项目,做什么的,怎么工作的? 画出流程图,业务逻辑梳理   第二步:细分模块,针对每个小功能模块进行详细的
测试之道
2021/03/04
2.2K0
聊天功能如何测试?
TIMSDK 常见问题
构建消息元素后,实例化一个 TIMMessage 对象,然后调用 addElement() 方法构建到 TIMMessage 消息对象中,不推荐在同一个消息对象中使用多个元素
腾讯云-ahqzhang
2019/04/24
6K0
TIMSDK 常见问题
优化骚操作!使用二进制模型,仅靠0和1保存数据
需要在属性表配置用户环境变量的字段,为了节省内存空间,主管让我用一个字段记录多个数据状态,开始用表结构,但客户端不支持,就想到二进制数值保存数据
深雾
2020/07/03
6200
优化骚操作!使用二进制模型,仅靠0和1保存数据
仿QQ聊天室项目_仿QQ程序设计与开发
创建普通Java项目 并创建model、view、tools、common 四个包
全栈程序员站长
2022/10/03
1.5K0
仿QQ聊天室项目_仿QQ程序设计与开发
IM即时通信探索(二)-- IM即时通信采坑
目前IM的兼容性还是很高的,基本上各个平台已经可以实现跨平台交流了,但是里面肯定还是有一些需要注意的坑点或者注意点,我将一一给大家讲一讲。
黑眼圈云豆
2020/07/06
3.8K0
组队和公会系统的功能实现
服务器队伍类,组队数据仅在内存中使用,如果做成支付宝种树,叠猫猫那类持久组队,可以新建张数据表
深雾
2020/07/10
2.4K0
Web端即时聊天项目实现(基于WebSocket)
 其实这个项目算是我做过的花时间最长也投入心血最多的一个项目了,当时决定开始做这个的时候我几乎什么都不会,那时我个人的情况是:
全栈程序员站长
2022/08/27
3K0
Java基于Swing和Netty仿QQ界面聊天小项目
先说一下这个小项目也算是我在大学做的第一个应该算的上是的项目的项目,前前后后用了20天左右吧。先是用swing写好了仿QQ界面(界面很丑)最后逻辑实现都是后面断断续续加进去的。写这个项目之前没有很好的规划在逻辑实现方面与数据库逻辑交互过于频繁。走了很多的弯路
好好学java
2020/12/08
1.3K0
Java基于Swing和Netty仿QQ界面聊天小项目
Wechaty Plugin|实现一个微信机器人几行代码即可
晚到几个月的帖子,这几个月有些忙,没顾上,关于为什么要开发微信机器人、技术选型、Token申请、一期简单的开发可以看我4个月之前发布的文章
isboyjc
2022/03/28
1.5K0
Wechaty Plugin|实现一个微信机器人几行代码即可
即时通信 IM Flutter SDK 正式上线!
导语 Flutter 是目前最火的跨平台技术,在提供极好的用户体验的同时能解决多端一致性的问题,而且还能有效地降低人力成本。 Flutter 是什么? Flutter 是谷歌的移动端跨平台UI框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。Flutter 可以与现有的代码一起工作。在全世界,Flutter 正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。简单来说,Flutter 是一款移动应用程序 SDK,包含框架、控件和一些工具,可以用一套代码同时构
腾讯即时通信IM
2021/02/04
6.5K1
全栈开发之基于云开发实现微信聊天功能
1.注册:本次更新的功能主要是在底部功能栏添加一个通信功能,将其添加两个选项“登录”及“注册”,我们如果没有账号时,我们可以通过“注册”这个选项通道来先注册,当我们注册完之后呢,他会自动实现一个跳转到“登录” 的页面,然后我们可以登录了,当我们登录时,在登陆下面有一个试试刷新的你的账号、用户名、密码、继承微信的头像的显示!
淼学派对
2022/11/20
7750
全栈开发之基于云开发实现微信聊天功能
QQ如何把你消息传递给好友的?(上篇)
张叔叔先告诉大家一个数据:QQ注册用户量累计超过10个亿,QQ日活超过3亿,月活超过5亿。日活直白点说就是每天使用QQ的用户量,月活就是每个月累计活跃的用户量。中国人口13.8亿,几乎人人都有QQ号,大家都是腾讯的忠实用户!
张叔叔讲互联网
2018/10/29
1.3K0
玩转OpenHarmony社交场景:即时通讯平台
本样例是基于即时通讯(Instant messaging,简称IM)服务实现的OpenAtom OpenHarmony(简称“OpenHarmony”)应用,允许两人或多人使用互联网即时地传递文字、图片、文件、语音、emoji等讯息,可应用于各类聊天场景,为人们带来更加及时高效的通讯体验。
小帅聊鸿蒙
2025/04/26
1600
玩转OpenHarmony社交场景:即时通讯平台
微信二次开发SDK:可群控营销手机,智能回复等功能
本次更新主要内容:Android增加是否使用FCM推送的接口,添加语音会议功能;ios实现不同模式的实时语音会议功能,添加动态更换对方实时视频显示页面的功能。 接入本SDK即可快速实现微信的二次开发,
BestSDK
2018/04/19
4.5K1
微信二次开发SDK:可群控营销手机,智能回复等功能
玩转OpenHarmony社交场景:即时通讯平台
本样例是基于即时通讯(Instant messaging,简称IM)服务实现的OpenAtom OpenHarmony(简称“OpenHarmony”)应用,允许两人或多人使用互联网即时地传递文字、图片、文件、语音、emoji等讯息,可应用于各类聊天场景,为人们带来更加及时高效的通讯体验。
小帅聊鸿蒙
2024/09/10
1800
玩转OpenHarmony社交场景:即时通讯平台
Java练手小程序——QQ聊天「建议收藏」
界面布局:一是流布局,二是卡片布局(现在应该都不用了) socket通信之对象流objectinput/outputStream 将线程里面的信息显示到界面上
全栈程序员站长
2022/10/04
2.6K0
Java练手小程序——QQ聊天「建议收藏」
布谷相亲婚恋app软件源码开发服务器搭建环境配置及功能清单
近些年由于各大短视频平台带火了开封王婆户外说媒相亲婚恋节目,导致近期婚恋相亲软件或小程序卖的火热,现山东布谷科技就开发过的相亲婚恋app应用软件源码所应用到的技术栈及功能清单详细剖析,希望对从事婚恋相亲行业运营及技术研发的朋友有一定的作用!
山东布谷科技_孙哥
2024/12/27
1740
布谷相亲婚恋app软件源码开发服务器搭建环境配置及功能清单
推荐阅读
相关推荐
好友及聊天功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验