原文网址: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等又是怎么处理用户列表的……