FreeKill/docs/dev/friend_system.rst

46 lines
2.0 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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