1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4: using System.Timers;
5:
6: using XihSolutions.DotMSN;
7:
8: namespace MSNRobot
9: { 10: class Program
11: { 12: static Messenger messenger = new Messenger();
13: static Timer timer;
14:
15: static void Main(string[] args)
16: { 17: // by default this example will emulate the official microsoft windows messenger client
18: messenger.Credentials.ClientID = "msmsgs@msnmsgr.com";
19: messenger.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5";
20: messenger.Nameserver.PingAnswer += new PingAnswerEventHandler(Nameserver_PingAnswer);
21: messenger.NameserverProcessor.ConnectionEstablished += new EventHandler(NameserverProcessor_ConnectionEstablished);
22: messenger.Nameserver.SignedIn += new EventHandler(Nameserver_SignedIn);
23: messenger.Nameserver.SignedOff += new SignedOffEventHandler(Nameserver_SignedOff);
24: messenger.NameserverProcessor.ConnectionException += new XihSolutions.DotMSN.Core.ProcessorExceptionEventHandler(NameserverProcessor_ConnectionException);
25: messenger.Nameserver.ExceptionOccurred += new XihSolutions.DotMSN.Core.HandlerExceptionEventHandler(Nameserver_ExceptionOccurred);
26: messenger.Nameserver.AuthenticationError += new XihSolutions.DotMSN.Core.HandlerExceptionEventHandler(Nameserver_AuthenticationError);
27: messenger.Nameserver.ServerErrorReceived += new XihSolutions.DotMSN.Core.ErrorReceivedEventHandler(Nameserver_ServerErrorReceived);
28: messenger.ConversationCreated += new ConversationCreatedEventHandler(messenger_ConversationCreated);
29: messenger.TransferInvitationReceived += new XihSolutions.DotMSN.DataTransfer.MSNSLPInvitationReceivedEventHandler(messenger_TransferInvitationReceived);
30: messenger.Nameserver.ReverseAdded += new ContactChangedEventHandler(Nameserver_ReverseAdded);
31:
32: //messenger.ConnectivitySettings.ProxyHost = "192.168.7.62";
33: //messenger.ConnectivitySettings.ProxyPort = 1080;
34: //messenger.ConnectivitySettings.ProxyType = ProxyType.Socks5;
35:
36: messenger.Credentials.Account = "";
37: messenger.Credentials.Password = "";
38:
39: timer = new Timer(3000);
40: timer.Enabled = true;
41: timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
42: WL("Connecting to server"); 43: try
44: { 45: messenger.Connect();
46: }
47: catch (Exception e)
48: { 49:
50: WL(e.Message);
51: }
52: RL();
53:
54: }
55: static void timer_Elapsed(object sender, ElapsedEventArgs e)
56: { 57: SendPing();
58: }
59: static private void ReConnect()
60: { 61: try
62: { 63: timer.Stop();
64: WL("Disconnecting"); 65: messenger.Disconnect();
66: WL("Reconnecting"); 67: messenger.Connect();
68: }
69: catch (Exception e)
70: { 71: System.Threading.Thread.Sleep(3000);
72: ReConnect();
73: }
74:
75: }
76:
77: static void Nameserver_ReverseAdded(object sender, ContactEventArgs e)
78: { 79: Console.WriteLine("Nameserver_ReverseAdded"); 80: messenger.Nameserver.AddContactToList(e.Contact, MSNLists.AllowedList);
81: e.Contact.OnAllowedList = true;
82: e.Contact.OnForwardList = true;
83: }
84:
85: static void messenger_TransferInvitationReceived(object sender, XihSolutions.DotMSN.DataTransfer.MSNSLPInvitationEventArgs e)
86: { 87: WL("messenger_TransferInvitationReceived"); 88: }
89:
90: static void messenger_ConversationCreated(object sender, ConversationCreatedEventArgs e)
91: { 92: e.Conversation.Switchboard.TextMessageReceived += new TextMessageReceivedEventHandler(Switchboard_TextMessageReceived);
93: e.Conversation.Switchboard.ContactJoined += new ContactChangedEventHandler(Switchboard_ContactJoined);
94: e.Conversation.Switchboard.ContactLeft += new ContactChangedEventHandler(Switchboard_ContactLeft);
95: e.Conversation.Switchboard.SessionClosed += new SBChangedEventHandler(Switchboard_SessionClosed);
96: e.Conversation.Switchboard.UserTyping += new UserTypingEventHandler(Switchboard_UserTyping);
97: }
98:
99: static void Switchboard_UserTyping(object sender, ContactEventArgs e)
100: { 101: WL(e.Contact.Name + "is typing");
102: //发送打字状态
103: ((XihSolutions.DotMSN.SBMessageHandler)sender).SendTypingMessage();
104: }
105:
106: static void Switchboard_SessionClosed(object sender, EventArgs e)
107: { 108: WL("session closed"); 109: }
110:
111: static void Switchboard_ContactLeft(object sender, ContactEventArgs e)
112: { 113: WL("{0} left", e.Contact.Name); 114: }
115:
116: static void Switchboard_ContactJoined(object sender, ContactEventArgs e)
117: { 118: WL("{0} joined.", e.Contact.Name); 119: }
120:
121: static void Switchboard_TextMessageReceived(object sender, TextMessageEventArgs e)
122: { 123: WL("{0} says : {1}", e.Sender, e.Message); 124: XihSolutions.DotMSN.SBMessageHandler handler = (XihSolutions.DotMSN.SBMessageHandler)sender;
125: handler.SendTextMessage(new TextMessage(string.Format("您好,你跟我说:{0}", e.Message.Text))); 126: }
127:
128: static void Nameserver_ServerErrorReceived(object sender, MSNErrorEventArgs e)
129: { 130: WL("Nameserver_ServerErrorReceived"); 131: }
132:
133: static void Nameserver_AuthenticationError(object sender, ExceptionEventArgs e)
134: { 135: WL("Nameserver_AuthenticationError"); 136: }
137:
138: static void Nameserver_ExceptionOccurred(object sender, ExceptionEventArgs e)
139: { 140: WL("Nameserver_ExceptionOccurred"); 141: }
142:
143: static void NameserverProcessor_ConnectionException(object sender, ExceptionEventArgs e)
144: { 145: WL("NameserverProcessor_ConnectionException"); 146: }
147:
148: static void Nameserver_SignedOff(object sender, SignedOffEventArgs e)
149: { 150: WL("Nameserver_SignedOff"); 151: ReConnect();
152: }
153:
154: static void Nameserver_SignedIn(object sender, EventArgs e)
155: { 156: messenger.Owner.Status = PresenceStatus.Online;
157: messenger.Owner.NotifyPrivacy = NotifyPrivacy.AutomaticAdd;
158: WL("Nameserver_SignedIn"); 159: foreach (Contact contact in messenger.ContactList.Forward)
160: { 161: WL(contact.Name);
162: }
163: foreach (Contact contact in messenger.ContactList.Allowed)
164: { 165: WL(contact.Name);
166: }
167: foreach (Contact contact in messenger.ContactList.BlockedList)
168: { 169: WL(contact.Name);
170: }
171: messenger.Nameserver.SetPrivacyMode(PrivacyMode.AllExceptBlocked);
172: timer.Start();
173: }
174: static void Nameserver_PingAnswer(object sender, PingAnswerEventArgs e)
175: { 176: WL(e.SecondsToWait.ToString());
177: WL("Nameserver_PingAnswer"); 178: }
179: static void SendPing()
180: { 181: messenger.NameserverProcessor.SendMessage(new PingMessage());
182: }
183: static void NameserverProcessor_ConnectionEstablished(object sender, EventArgs e)
184: { 185: WL("NameserverProcessor_ConnectionEstablished"); 186: }
187:
188:
189: #region Helper methods
190:
191: private static void WL(object text, params object[] args)
192: { 193: Console.WriteLine(text.ToString(), args);
194: }
195:
196: private static void RL()
197: { 198: Console.ReadLine();
199: }
200:
201: private static voi