FreeKill/docs/dev/friend_system.rst

46 lines
2.0 KiB
ReStructuredText
Raw Normal View History

关于好友系统
=============
“好友系统”这几个字可谓是囊括的面有点多啊。总而言之:
- 添加好友、管理好友、删除好友
- 和好友进行私聊
没了,就只有以上两点而已。
好友信息肯定要放在各个服务器自己的数据库中。
登入时自动获取好友列表和消息列表。因此好友列表有上限最多50人不然负载太大。
列表至少要有好友的名字、头像然后最好还有在线状态。前二者查数据库第三者要根据id在Server范围查询玩家然后根据是否找的出、Room是大厅还是确切Room、Room是否已开始分为离线、空闲、等待中、游戏中、观战中四个状态。
好友列表查出之后就要暂时放在ServerPlayer类里面也就是放在RAM中。因为状态一变动就要广播所有好友自己的状态变动的情况有
- 登入/登出;
- 进入房间/进入大厅;
- 游戏开始时/结束时
每当状态变化了就通知好友?还是好友进大厅的时候就获取一次信息?答案是要一直通知。
但是现阶段可以先只针对大厅中的好友通知。毕竟房间里面没地方摆好友UI呢。
简而言之,只要进入大厅,就获取好友信息(和自动获取房间列表性质一致)。然后一直接收通知修改好友状态。
接下来就是处理如何加好友了,顺便处理私聊之事。
首先加好友只能在Room中加这就避免了搜索好友的问题。将加好友请求视为一种特殊的私信吧。
私信
-----
私信的问题在于已读和未读。未读信息要暂存在服务器;已读信息和聊天记录可以放在客户端本地的数据库中。
反正二者都要用到数据库啊。综上,涉及三张表:服务端需要好友关系表、未读信息表;客户端需要聊天记录表。
服务器端 - 好友关系表:
.. code:: sql
CREATE TABLE 好友 {
user1, user2, type
}
type是个数字可能是好友或者黑名单。