S’amuser avec MSN et .NET : DotMSN
DotMSN est un projet OpenSource proposé par la socièté Xih Solutions disponnible à l’adresse : http://www.xihsolutions.net/dotmsn/.
DotMSN est une assembly .NET écrite en C# qui implémente la quasi-totalité du protocole MSN dans sa version 9.
Vous pourrez grâce à DotMSN:
- gérer les connexions à MSN, les status, données personnels et images perso
- gérer la ContactList (ajout, suppression, bloquer, autoriser)
- gérer de multiples conversations, les emoticones, texte décoré, etc…
- interface avec Hotmail (connexion, avertissement des nouveaux mail, etc..)
- gestion des transferts (fichiers, emoticones, images perso des contacts)
Bref, grâce à DotMSN vous pouvez redevelopper entierement votre propre client MSN. La seule chose à la limite qu’il manque, c’est la gestion du Wizz 🙂
Toutes les specs de l’assembly sont disponnible à l’adresse: http://www.xihsolutions.net/dotmsn/api
DotMSN contient 3 espaces de nom :
- XihSolutions.DotMSN : classes de base pour la connexion/deconnexion, conversation, parametres persos, etc…
- XihSolutions.DotMSN.Core : c’est le moteur, là où se trouve toute l’implémentation du protocole. Nous n’avons pas besoin d’utiliser les classes qu’il renferme.
- XihSolutions.DotMSN.DataTransfer : toutes les classes en rapport avec le transfert de fichiers, images, emoticones, etc..
Pour démarrer, commencez par instancier la classe Messenger (dans XihSolutions.DotMSN) puis remplir la propriété Credentials avec comme Account et Password votre compte MSN et le ClientID = « msmsgs@msnmsgr.com » et ClientCode = « Q1P7W2E4J9R8U3S5 » pour enfin lancer la méthode Connect
1 2 3 4 5 6 7 | Dim msn As New Messenger() msn.Credentials = New XihSolutions.DotMSN.Credentials() msn.Credentials.ClientID = "msmsgs@msnmsgr.com" msn.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5" msn.Credentials.Account = "VOTRE_COMPTE_MSN" msn.Credentials.Password = "VOTRE_PWD_MSN" msn.Connect() |
Vous êtes maintenant connecté au service MSN mais pas encore en ligne. Pour cela abonnez-vous à l’évenement SignedIn dans Nameserver de votre objet MSN (AddHandler msn.Nameserver.SignedIn, AddressOf ….). L’évenement sera appellé dès que votre connexion sera effective. En reponse à l’appel de cet evenement, placez le code :
1 2 | msn.Owner.Status = PresenceStatus.Online msn.Owner.Name = "VOTRE_PSEUDO" |
Le code aura pour but de définir votre pseudo ainsi que votre status.
La proprièté Owner permet donc de definir votre profil, nom, image perso, status, etc… Vous trouverez aussi la propriété ContactList pour la liste de vos contacts. Exemple pour afficher votre ContactList :
1 2 3 4 | For Each c As Contact In session.MSNSession.ContactList.All Debug.WriteLine(String.Format("Email: {0} - Status : {1} - Autorisé : {2}", _ c.Mail, c.Status.ToString(), c.OnAllowedList.ToString()) Next |
Il faudra aussi vous abonnez à l’évenement ConversationCreated de la classe Messenger qui averti qu’une nouvelle conversation est crée. Vous recuperez alors l’objet Conversation qui contient la propriété Switchboard pour pouvoir lire les messages, en envoyer, lancer des invitations de transfert de fichiers, etc… A ce titre, dès qu’une conversation est crée, n’oubliez pas aussi de vous abonnez à l’événement Conversation.Switchboard.TextMessageReceived permettant d’être averti de l’arrivée d’un message.
Enfin pour finir, après la connexion du service MSN, oubliez pas non plus de vous abonnez à l’évenement TransferInvitationReceived de l’objet Messenger permettant d’être averti de l’envoi d’une invitation de transfert. Vous pourrez alors l’accepter en mettant True à la propriété Accept de MSNSLPInvitationEventArgs et démarrer le transfert dans TransferSession.StartDataTransfer(False) (False pour un transfert non direct et True pour direct).
Encore une fois, il faudra vous abonnez à l’évenement TransferFinished de la propriété TransferSession pour être averti de la fin du téléchargement.
Pour enregistrer le fichier transferé en dur dans un fichier :
1 2 3 4 5 | Dim stream As New FileStream("CHEMIN_DU_FICHIER", FileMode.Create, FileAccess.Write, FileShare.Read) With CType(transferSession.DataStream, MemoryStream) stream.Write(.GetBuffer(), 0, .Position) stream.Close() End With |
Voila, vous êtes maintenant paré pour ecrire votre propre client MSN ^_^ Le mieux, pour bien comprendre, est de regarder les specs de l’assembly pour trouver tous les evenements et methodes dont vous aurez besoin. Vous trouverez de toute facon, un client de démo avec les sources fournis en téléchargeant l’assembly DotMSN. Si avez des soucis, n’hesitez pas à me contacter 🙂