基于Python的BBS实现,提供BBS数据接口

基础结构

C结构的存取

初版实现

需要在对应的类定义域:_fields与_parser。

_fields:

  • _fields为一个list,其中每项对应一个C结构里的域。
  • 每项可以是一个字符串(域名),或者是一个list。
  • 如果是一个list,那第一个必须是个字符串(域名),第二个是类型,之后是类型参数。
    • 类型1: C字符串。从内存中读取之后,会自动截断到第一个\0
    • 类型2: 需要再次parse的域。目前主要用来实现数组。类型参数是再次parse的格式字符串。
      • 例如,对于一个int数组,['friends_uid', 2, '=%di' % Config.MAXFRIENDS ],会再次用后面那个格式进行parse,得到一个list。

_parser:

  • 定义为struct.Struct(格式字符串)
  • 格式字符串里,每项对应了_fields里的一个域。
  • 对于普通类型,例如int,直接在对应位置写'i'就可以。
  • 对于需要再次parse的类型,这里只要取出一个字符串就完了,一般是'9s'这样的形式。

数据接口实现

  • 登录
    • 用户名/密码登录
已实现,考虑安全原因禁用
    • OAuth登录
部分实现,只是能用而已……
  • 帖子
    • 获取帖子
已实现
    • 发帖
    • 同主题上一帖/下一贴
已实现
  • 版面
    • 获取所有版面列表
已实现
  • 精华区
  • 收藏夹
    • 获取收藏夹列表
已实现
  • 消息
在XMPP接口中实现
  • 好友列表
在XMPP接口中实现
  • 邮箱

XMPP实现

XMPP阶段:

  • 认证
    • 基于外部OAuth
    • 基于明文
TLS层已经加密了,所以无所谓。
已实现,见xmppauth.XMPPAuth类
  • 登录
    • 更新用户信息
    • 增加session
已实现。在xmppserver.XMPPServer类中__init__部分。调用Session.Register()进行注册。
  • 好友列表
    • 获取好友列表(roaster)
已实现。在roster.Roster类中。
    • 跟踪好友状态并更新好友列表
已实现。在rosters.Rosters类中,包括update_sessions()等
    • 隐身功能
已实现,看不见的人,就是看不见……
但是在消息方面有个问题。原来是允许给隐身的人回复消息的,但现在不好判断是否回复,干脆统统不许。
    • 增加好友
    • 删除好友
    • 修改好友昵称
  • 消息
    • 发送消息
已实现。参见rosters.Rosters.send_msg()
    • 消息通知
已实现
目前设计为,当收到SIGUSR2,让所有登录用户检查是否有新消息。
    • 接收消息
已实现。保存内部已读索引,每次检查消息,如果有新消息,则发送给用户。
  • 修改状态
  • 扩展

很多成本不大…… 有空搞搞就好了

    • jabber:iq:last
上次活动时间(在线)/上次上线时间(下线)/uptime(服务器)
    • jabber:iq:version
软件版本/系统信息
    • vcard-temp
用户信息,例如名字、全名、……
初步实现,返回用户名……
用户本地时间……
    • disco#info
查询支持的扩展列表。已实现
  • 注销
    • 更新用户信息
    • 移除session
已实现。用Session.Unregister()。