Class:Core.Player
类似结构体(只有属性,没有方法),它建立了关于Uri,nickname,用户类型之间的关系,应该是历史记录使用的一个轻量级用户表示类吧)—如果这里也用Contact确实有点过了.注意:类有一个静态实例,Player.System(表明系统用户)
Interface: IMessage
消息的接口定义:七个属性,分别是消息体,扩展信息(好像只有添加好友才用到),消息ID,接收者(是一个player集合,fetion支持群发),发送者,日期,消息类型.不长,干脆直接考出来好了.
{
// Properties
string Body { get; set; }
string Extend { get; set; }
string ID { get; set; }
PlayerCollection Receivers { get; }//注意,这个不能set,也就是初始化后不能改动
Player Sender { get; set; }
DateTime Time { get; set; }
MessageType Type { get; set; }
}
从这个接口可以看出,实现接口的也应该是结构体类型的类.它有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;和QQ一样,使用用户Id加密聊天记录.
string connectionString = string.Format("Data Source={0};Password={1}", this._ dataSource, this._password);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() 就可以了.