原文网址:http://www.blogwind.com/Wuvist/comment.aspx?Article_id=7004

开始折腾“风中之猪”了……

“风中之猪”是基于DotMSN的一个MSN机器人。

DotMSN真是他妈的强大。它把MSN的协议封装得非常非常好。带的Example也是非常实用,让人一看便能够举一反三,做出更多的东西来。

终于有点了解多线程程序是怎么写的了。

Well,偶这篇blog不是要说DotMSN或者是“风中之猪”的。我要说的是MSN Messenger。


MSN其实有四个列表:ForwardList,AllowedList,ReverseList,BlockedList

我们平时看到的联系人列表其实只是:ForwardList而已。

当我们看到ForwardList中的联系人上线的时候,MSN服务器便允许我们向这些联系人发送讯息。

我们平时指的MSN150个好友的上限,便是指这个ForwardList只能够有150个联系人了。

ReverseList则是表示将我们加为联系人的MSN用户。

我们添加了某个联系人之后,其实就是将我们添加到了对方的ReverseList当中。我们是无法修改ReverseList这个列表的。这个列表是没有联系人上线的。所以,虽然我们只能够有150人的好友,但是,是可以有无数个人添加我们为好友的。

AllowedList则是表示可以查看我们的状态以及向我们发送讯息的MSN用户列表。这个列表也是没有上限的。

所以,有些人即使不在我们的ForwordList/朋友列表里面,他们还是可以给我们发送讯息。

AllowedList中能够有的又不仅是某个MSN用户,它还可以有“所有其他用户”这个特殊的东西。也就是说,如果我们添加“所有其他用户”的话,所有的MSN在默认情况下都可以向我们发送讯息。他们不需要将我们加为朋友,不需要把我们加入到他们的ForwardList里面。

BlockedList则是保存我们“阻止”的MSN用户列表了。一个用户一但被我们放到BlockedList里面,他无论如何都是无法查看我们的状态或者是发送讯息了。同样的这个列表也是可以有“所有其他用户”这个特殊的玩意。


早期的MSN,“所有其他用户”是默认在AllowedList里面的,所以,我们只要知道对方的MSN帐号,便可以立即向对方发送讯息,如果对方在线的话。

后来,应该是搞骚扰的人多了,“所有其他用户”默认被放到BlockedList里面了,所以,我们现在一般只能够通过添加对方为自己的联系人才能够与其对话。

一般情况下,我们添加一个联系人的时候,对方会同时进入我们的ForwardList以及AllowedList里面。

但是,我们删除已有的联系人,却只是将其从我们的ForwardList里面删除,对方的帐号还是会在我们的AllowedList里面,对方还是可以看到我们的帐号状态,以及跟我们说话。

除非,我们在删除的时候,同时阻止了对方,也就是说,将对方加入到我们的BlockedList里面。

这便出现了一个问题……AllowedList似乎会是永远增长的。MSN Messenger并没有提供任何手段让我们修改这个List。只要是在这里面出现过的帐号,要么就永远在AllowedList里面,要么就会被扔到BlockedList里面。

BlockedList里面名单也是没有办法消除了。

我是说,只要我们曾经添加过某个联系人。那么他的帐号便似乎永远都会在这四个列表里面。

很奇怪很奇怪。


事实上,还是可以直接修改这ForwardList/AllowedList/BlockedList三个列表中的名单的。只是,我们无法直接通过MSN Messenger来做这个操作而已;至少,MSN Messenger 6.2不行。

微软似乎也从来没有想要让普通用户知道ReverseList/AllowedList/BlockedList这三个列表的存在。

还有其他一些奇妙的事情。

如果A在B的ForwardList里面,也就是说A是B的联系人、是B的朋友、B想要跟A说话。

但是B并不在A的AllowedList里面。那么B是无法即时查看A的状态的。

如果“所有其他用户”是在A的AllowedList里面的话,那么,B是可以直接跟A说话的。

也就是说,可以出现跟“不在线”的MSN联系人对话的情况。

呼呼……刚刚忘了截屏了,真是遗憾。


我再继续说清楚一些……

其实,所谓的“所有其他用户”并不是一个特殊的MSN用户,而是一个MSN隐私设定而已。

所谓的AllowedList,虽然决定了我们ReverseList中的人是否能够查看我们的状态以及向我们发送讯息;但是,它其实只是决定他们能否查看我们的状态而已。

别人不是不能够向我们发送讯息,而是如果他们不在我们AllowedList里面的话,他们不能够确定我们是否在线,既然他们不知道我们是否在线,他们便不能够通过普通的方式向我们发送讯息了。

同样的,如果他们不在我们的AllowedList跟ForwardList里面,我们也是没法通过普通方式跟对方发送讯息。

并且,在这样的情况下,别人要给我们发送讯息,要比我们给他们发送讯息简单。

是的,没有错。前者比后者简单。至于简单、复杂在哪些地方,偶这里就先不说了;因为,我自己也不是很确定。

否则,我们便可以通过无限制的AllowedList跟ReversedList来突破ForwardList的150个人的限制了。

很奇妙的……MSN背后的协议是很复杂的……且不论它的技术实现,光这四个List的设定便是很耐人寻味了……



仔细想想,微软搞这么四个List,是有它的道理的……奇妙的MSN……

呼呼……也许,我有心情的话,会继续写blog来说“风中之猪”以及DotMSN的使用。

到目前为止,似乎国内还是没有人介绍如何调用DotMSN。国外的,我没有Google。

不知道QQ、ICQ等又是怎么处理用户列表的……