改造 dotMSN 2.0.2

    技术2022-05-11  68

    dotMSN 2.0.2 非常好用,还提供源码和使用说明,真是好人啊,可以到这里下载 http://www.xihsolutions.net/dotmsn/ PS: 看到国内某些软件,点大的东西,一点技术含量都没,还收费,还捆绑垃圾!!! 但是,dotMSN 2.0.2 的友好性操作不如,1.2 版的,所以我就对它动点小手术,为这个工程多开几个方便之门。 A: 首先变化最大的是,命名空间,在原来的 “dotMSN” 前面加了个 “XihSolutions.”,这是开发者的名字,流下一个名字是应该的,综观全码,除了注释声明,就这里有他的名字,很干净。 PS: 这里有啰嗦几句了,有些人写发消息类的东西总喜欢在信息后面拖个作者的名字,何必呢。。 如果只是个人用,如果你觉得麻烦, 1,你可以全文搜索,将,“XihSolutions.DotMSN” 替换为 “DotMSN”,记得选在整个项目中替换,搜索隐藏文本。 2,在 dotMSN2 的右键属性中将程序集名称和默认空间名也改了。 PS: 可不要加上自己的名字啊,这是道德问题!!有些人就喜欢搬别人的东西硬说是自己的。 修改这个后,最好不要发布了,最好只是自己用 B: 消息发送函数 SendTextMessage( TextMessage message) 只接受 TextMessage 类型的参数,呵呵,没以前的方便了,发个纯字符串信息,还得新建各类型。 所以我们要来重载它 在 SB9MessageHandler.cs 文件中找到上述函数。在它下面建立一个如下的函数 public virtual void SendTextMessage(string message){ TextMessage Msg = new TextMessage(message); SendTextMessage(Msg);} 这样就能直接发送字符串了。 PS: 记得将上面的注释也拷下来,免得提示缺少什么的。下面也相同,都要有说明的。 C: 全局消息初始化函数 private    DotMSN.Messenger messenger = new Messenger(); 默认是空参数的,可以给他加个有参数的,主要是免去输入默认的 messenger.Credentials.ClientID = "msmsgs@msnmsgr.com"; messenger.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5"; 方法如下: 定位到 Messenger.cs 文件,修改如下: /// <summary>/// Basic constructor to instantiate a Messenger object./// </summary>///public Messenger(){ nsMessageProcessor = Factory.CreateNameserverProcessor(); nsMessageHandler = Factory.CreateNameserverHandler(); p2pHandler = Factory.CreateP2PHandler(); p2pHandler.NSMessageHandler = nsMessageHandler; // set the events nsMessageHandler.SBCreated += new SBCreatedEventHandler (nsMessageHandler_SBCreated); nsMessageProcessor.ConnectionClosed += new EventHandler (nsMessageProcessor_ConnectionClosed); p2pHandler.SessionCreated += new SessionChangedEventHandler (p2pHandler_SessionCreated); p2pHandler.SessionClosed += new SessionChangedEventHandler (p2pHandler_SessionClosed); Credentials.ClientID = "msmsgs@msnmsgr.com"; Credentials.ClientCode = "Q1P7W2E4J9R8U3S5";}/// <summary>/// Basic constructor to instantiate a Messenger object./// </summary>///public Messenger(string ClientID, string ClientCode){ nsMessageProcessor = Factory.CreateNameserverProcessor(); nsMessageHandler = Factory.CreateNameserverHandler(); p2pHandler = Factory.CreateP2PHandler(); p2pHandler.NSMessageHandler = nsMessageHandler; // set the events nsMessageHandler.SBCreated += new SBCreatedEventHandler (nsMessageHandler_SBCreated); nsMessageProcessor.ConnectionClosed += new EventHandler (nsMessageProcessor_ConnectionClosed); p2pHandler.SessionCreated += new SessionChangedEventHandler (p2pHandler_SessionCreated); p2pHandler.SessionClosed += new SessionChangedEventHandler (p2pHandler_SessionClosed); Credentials.ClientID = ClientID; Credentials.ClientCode = ClientCode;} D: 连接函数 .Connect(),没有参数的,加个参数,可以一起设置帐号和密码,改后,就可以这样调用咯  messenger.Connect(accountTextBox.Text, passwordTextBox.Text); 具体修改如下: /// <summary>/// Connect to the messenger network./// </summary>///public virtual void Connect(){ Connect(credentials.Account, credentials.Password);}/// <summary>/// Connect to the messenger network./// </summary>///public virtual void Connect(string Account, string Password){ if (Account.Length != 0 && credentials.Account != Account) credentials.Account = Account; if (Password.Length != 0 && credentials.Password != Password) credentials.Password = Password; if (nsMessageProcessor == null) 原来的,没有改变} E: 限制消息长度,如果发送消息大于 1668字节,就会导致程序崩溃,所以限制文本消息程度为 1024 字节PS:官方的消息限定为 800 字节 public TextMessage(string message){ if (System.Text.Encoding.Default.GetBytes(message).Length > 1024) { //byte[] tmpByte = System.Text.Encoding.Default.GetBytes(message,0,1281); Text = System.Text.Encoding.Default.GetString(System.Text.Encoding.Default.GetBytes(message), 0, 1024+1); Text = Text.Remove(Text.Length - 1); } else Text = message;} 记过以上修改,操作就方便些了。

    最新回复(0)