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