飞信聊天记录相关类

 核心类:Core.History.DbHistoryManager 

Class:Core.Player

类似结构体(只有属性,没有方法),它建立了关于Uri,nickname,用户类型之间的关系,应该是历史记录使用的一个轻量级用户表示类吧)—如果这里也用Contact确实有点过了.注意:类有一个静态实例,Player.System(表明系统用户

Interface: IMessage

消息的接口定义:七个属性,分别是消息体,扩展信息(好像只有添加好友才用到),消息ID,接收者(是一个player集合,fetion支持群发),发送者,日期,消息类型.不长,干脆直接考出来好了.

public interface IMessage
{
    
// Properties
    string Body getset; }
    
string Extend getset; }
    
string ID getset; }
    PlayerCollection Receivers 
get; }//注意,这个不能set,也就是初始化后不能改动
    Player Sender getset; }
    DateTime Time 
getset; }
    MessageType Type 
getset; }
}


从这个接口可以看出,实现接口的也应该是结构体类型的类.它有3个实现.

Core.ContactHistoryMessage

关于好友列表改变的消息类型,看了发现Fetion貌似对这个实现管的很严,都是interal类型的函数.貌似这个消息类型根本没有用到呢…. 

Core.InstantMessage

即时消息类.(主要需要查看的

Core.SystemMessage

系统消息类,增加了一个 private MessageStatus _readok; 表示消息是否发送成功 private string _link;含义还不大清楚

DbHelper

因为Fetion是把Dat文件当成一个数据库来管理的,因而需要使用SQL查询.

1.       这是一个internal class,因而只有Imps.Client.Core包内可以访问.2

2. 
 public bool InitializeDatabase(string currentUserSid)
 只是对数据库,定位到对应的目录和Histroy.dat文件,并建立数据库连接,值得注意的是,
                   
this._password = currentUserSid;
string connectionString = string.Format("Data Source={0};Password={1}"this._ dataSource, this._password);
QQ一样,使用用户Id加密聊天记录.
DbHistoryManager(User currentUser){
    
this._currentUser = currentUser;  //设置user    
    this._currentPlayer = new Player(currentUser.Uri.Raw, currentUser.Nickname, PlayerType.User); //建立player       
    this.InitializeDatabase(); //初始化数据库.
}

在初始化数据库中最后会启用一个线程 MigationMessageHistory() 来迁移导入06版本的数据.(寒一个,migration才对吧,居然拼写错了…) 

初始化需要User.

在不调迁移线程的情况下,使用到User的数据量是很小的.

1.       User.Sid(必要的值,是用户文件夹名和数据库加密密码)

2.       User.Uri(Player初始化要用到)

3.       User.NickName(同样,player初始化时候要用到

然后貌似就调用LoadMessages() 就可以了.

原文地址:https://www.cnblogs.com/imparser/p/1161295.html