最近写一个预警系统,想通过msn来实现,也就是我的服务器是自己写的程序,客户端自己上msn,用dotmsn1.2的已经写完了,但发现dotmsn1.2的有很多bug,我在程序中都捕捉不到,我昏,程序直接挂掉,后来找到dotmsn2.0,虽然开源,但很多地方有变动,主要是发消息时经常的不成功(我自己写的发消息一次都没有成功),包括它自己的demo都有问题,所以我想问一下各位兄台,有没有做过dotmsn2.0写过的?网上都是1.2的那个版本,基本没有2.0的。附上我现在写的using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using XihSolutions.DotMSN ;
using XihSolutions.DotMSN.Core;
using XihSolutions.DotMSN.DataTransfer;namespace MSNClient
{
public partial class Form1 : Form
{
//private
XihSolutions.DotMSN.Messenger messenger = new Messenger();
string sStuta;
private Conversation conversation;
public Form1()
{
InitializeComponent();
messenger.Credentials.ClientID = "[email protected]";
messenger.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5";
messenger.NameserverProcessor.ConnectionEstablished += new EventHandler(NameserverProcessor_ConnectionEstablished);
messenger.Nameserver.SignedIn += new EventHandler(Nameserver_SignedIn);
messenger.Nameserver.SignedOff += new SignedOffEventHandler(Nameserver_SignedOff);
messenger.NameserverProcessor.ConnectingException += new ProcessorExceptionEventHandler(NameserverProcessor_ConnectingException);
messenger.Nameserver.ExceptionOccurred += new HandlerExceptionEventHandler(Nameserver_ExceptionOccurred);
messenger.Nameserver.AuthenticationError += new HandlerExceptionEventHandler(Nameserver_AuthenticationError);
messenger.Nameserver.ServerErrorReceived += new ErrorReceivedEventHandler(Nameserver_ServerErrorReceived);
messenger.ConversationCreated += new ConversationCreatedEventHandler(messenger_ConversationCreated);
messenger.TransferInvitationReceived += new MSNSLPInvitationReceivedEventHandler(messenger_TransferInvitationReceived);
messenger.Nameserver.ContactOnline += new ContactChangedEventHandler(Nameserver_ContactOnline);
messenger.Nameserver.ContactOffline += new ContactChangedEventHandler(Nameserver_ContactOffline);
} void Nameserver_ContactOffline(object sender, ContactEventArgs e)
{
MethodInvoker mi = new MethodInvoker(UpdateContactlist);
this.BeginInvoke(mi);
} void Nameserver_ContactOnline(object sender, ContactEventArgs e)
{
MethodInvoker mi = new MethodInvoker(UpdateContactlist);
this.BeginInvoke(mi); } private void SetStatus()
{
statusBar1.Text = sStuta;
}
private void SetStatus(string status)
{
sStuta =status ;
MethodInvoker mi = new MethodInvoker(SetStatus);
this.BeginInvoke (mi);
} private void button1_Click(object sender, EventArgs e)
{
if (messenger.Connected)
{
SetStatus("从服务器断开");
messenger.Disconnect();
}
messenger.Credentials.Account = user.Text;
messenger.Credentials.Password = pwd.Text;
ContactListView.Items.Clear();
SetStatus("正在连接服务器......");
messenger.Connect();
}
private void NameserverProcessor_ConnectionEstablished(object sender, EventArgs e)
{
SetStatus("已经连接上服务器,正在下载信息...");
} private void Nameserver_SignedIn(object sender, EventArgs e)
{
SetStatus("成功登陆: " + messenger.Owner.Name); messenger.Owner.Status = PresenceStatus.Online; MethodInvoker mi= new MethodInvoker(UpdateContactlist);
this.BeginInvoke(mi);
}
private void Switchboard_TextMessageReceived(object sender, TextMessageEventArgs e)
{
conversation.Invite(e.Sender.Mail );
if (conversation.SwitchboardProcessor.Connected == false)
{
conversation.Messenger.Nameserver.RequestSwitchboard(conversation.Switchboard, this);
} TextMessage messages = new TextMessage("欢迎加入");
conversation.Switchboard.SendTextMessage(messages);
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using XihSolutions.DotMSN ;
using XihSolutions.DotMSN.Core;
using XihSolutions.DotMSN.DataTransfer;namespace MSNClient
{
public partial class Form1 : Form
{
//private
XihSolutions.DotMSN.Messenger messenger = new Messenger();
string sStuta;
private Conversation conversation;
public Form1()
{
InitializeComponent();
messenger.Credentials.ClientID = "[email protected]";
messenger.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5";
messenger.NameserverProcessor.ConnectionEstablished += new EventHandler(NameserverProcessor_ConnectionEstablished);
messenger.Nameserver.SignedIn += new EventHandler(Nameserver_SignedIn);
messenger.Nameserver.SignedOff += new SignedOffEventHandler(Nameserver_SignedOff);
messenger.NameserverProcessor.ConnectingException += new ProcessorExceptionEventHandler(NameserverProcessor_ConnectingException);
messenger.Nameserver.ExceptionOccurred += new HandlerExceptionEventHandler(Nameserver_ExceptionOccurred);
messenger.Nameserver.AuthenticationError += new HandlerExceptionEventHandler(Nameserver_AuthenticationError);
messenger.Nameserver.ServerErrorReceived += new ErrorReceivedEventHandler(Nameserver_ServerErrorReceived);
messenger.ConversationCreated += new ConversationCreatedEventHandler(messenger_ConversationCreated);
messenger.TransferInvitationReceived += new MSNSLPInvitationReceivedEventHandler(messenger_TransferInvitationReceived);
messenger.Nameserver.ContactOnline += new ContactChangedEventHandler(Nameserver_ContactOnline);
messenger.Nameserver.ContactOffline += new ContactChangedEventHandler(Nameserver_ContactOffline);
} void Nameserver_ContactOffline(object sender, ContactEventArgs e)
{
MethodInvoker mi = new MethodInvoker(UpdateContactlist);
this.BeginInvoke(mi);
} void Nameserver_ContactOnline(object sender, ContactEventArgs e)
{
MethodInvoker mi = new MethodInvoker(UpdateContactlist);
this.BeginInvoke(mi); } private void SetStatus()
{
statusBar1.Text = sStuta;
}
private void SetStatus(string status)
{
sStuta =status ;
MethodInvoker mi = new MethodInvoker(SetStatus);
this.BeginInvoke (mi);
} private void button1_Click(object sender, EventArgs e)
{
if (messenger.Connected)
{
SetStatus("从服务器断开");
messenger.Disconnect();
}
messenger.Credentials.Account = user.Text;
messenger.Credentials.Password = pwd.Text;
ContactListView.Items.Clear();
SetStatus("正在连接服务器......");
messenger.Connect();
}
private void NameserverProcessor_ConnectionEstablished(object sender, EventArgs e)
{
SetStatus("已经连接上服务器,正在下载信息...");
} private void Nameserver_SignedIn(object sender, EventArgs e)
{
SetStatus("成功登陆: " + messenger.Owner.Name); messenger.Owner.Status = PresenceStatus.Online; MethodInvoker mi= new MethodInvoker(UpdateContactlist);
this.BeginInvoke(mi);
}
private void Switchboard_TextMessageReceived(object sender, TextMessageEventArgs e)
{
conversation.Invite(e.Sender.Mail );
if (conversation.SwitchboardProcessor.Connected == false)
{
conversation.Messenger.Nameserver.RequestSwitchboard(conversation.Switchboard, this);
} TextMessage messages = new TextMessage("欢迎加入");
conversation.Switchboard.SendTextMessage(messages);
}
{
//status = 1;
} private void Switchboard_ContactJoined(object sender, ContactEventArgs e)
{
//status = 2;
} private void Switchboard_ContactLeft(object sender, ContactEventArgs e)
{
//status = 1;
} private void Nameserver_SignedOff(object sender, SignedOffEventArgs e)
{
SetStatus("已经断开");
ContactListView.Items.Clear();
} private void Nameserver_ExceptionOccurred(object sender, ExceptionEventArgs e)
{
if (e.Exception is UnauthorizedException)
return; MessageBox.Show(e.Exception.ToString(), "Nameserver exception");
} private void NameserverProcessor_ConnectingException(object sender, ExceptionEventArgs e)
{
MessageBox.Show(e.Exception.ToString(), "Connecting exception");
SetStatus("Connecting failed");
} private void Nameserver_AuthenticationError(object sender, ExceptionEventArgs e)
{
MessageBox.Show("Authentication failed, check your account or password.", "Authentication failed");
SetStatus("Authentication failed");
}
private void Nameserver_ServerErrorReceived(object sender, MSNErrorEventArgs e)
{
MessageBox.Show(e.MSNError.ToString(), "Server error received");
SetStatus("Server error received");
}
private void messenger_ConversationCreated(object sender, ConversationCreatedEventArgs e)
{
}
private void messenger_TransferInvitationReceived(object sender, MSNSLPInvitationEventArgs e)
{
}
private void UpdateContactlist()
{
if (messenger.Connected == false)
return; ContactListView.SuspendLayout();
ContactListView.Items.Clear(); foreach (Contact contact in messenger.ContactList.Forward)
{
ListViewItem item = new ListViewItem();
if (contact.Status != PresenceStatus.Offline)
{
item.Text = contact.Name +"(在线)";
}
else
{
item.Text = contact.Name + "(脱机)";
}
item.Tag = contact;
ContactListView.Items.Add(item); } ContactListView.ResumeLayout();
} private void button3_Click(object sender, EventArgs e)
{
{
if (messenger.Connected)
messenger.Disconnect();
}
} private void button2_Click(object sender, EventArgs e)
{
UpdateContactlist();
} private void ContactListView_DoubleClick(object sender, EventArgs e)
{
if (ContactListView.SelectedItems.Count == 0)
return; Contact selectedContact = (Contact)ContactListView.SelectedItems[0].Tag;
if (selectedContact != null && selectedContact.Online == true)
{
try
{
if (conversation == null)
{
conversation = messenger.CreateConversation();
conversation.Switchboard.TextMessageReceived += new TextMessageReceivedEventHandler(Switchboard_TextMessageReceived);
conversation.Switchboard.SessionClosed += new SBChangedEventHandler(Switchboard_SessionClosed);
conversation.Switchboard.ContactJoined += new ContactChangedEventHandler(Switchboard_ContactJoined);
conversation.Switchboard.ContactLeft += new ContactChangedEventHandler(Switchboard_ContactLeft); conversation.Invite(selectedContact);
if (conversation.SwitchboardProcessor.Connected == false)
{
conversation.Messenger.Nameserver.RequestSwitchboard(conversation.Switchboard, this);
} TextMessage messages = new TextMessage("试一下");
conversation.Switchboard.SendTextMessage(messages); }
else
{
conversation.Invite(selectedContact);
if (conversation.SwitchboardProcessor.Connected == false)
{
conversation.Messenger.Nameserver.RequestSwitchboard(conversation.Switchboard, this);
} TextMessage messages = new TextMessage("试一下");
conversation.Switchboard.SendTextMessage(messages); }
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}
成功之后会触发事件conversion.Switchboard.ContactJoined