Creer son msn avec dotmsn

Description

Bonjour :)
voila, c'est un bout de code qui doit a peu près marcher, c'est mal écrit mais ca montre les bases de l'utilisation de DOt MSN de Xih SOlutions afin de programmer votre propre msn.

NOte importante: je suis pas sur qu'il marche direct, ca fé longtemps que je l'ai pas touché et j'ai la flemme, je le dépose à la demande de chépluki :)

Voila, si ya qqun qui est interressé à reprogrammer ca correctement et mettre à jour cette source, c avec plaisir :)

Pour plus d'infos: http://www.xihsolutions.net/dotmsn/documentation.html

Source / Exemple :


'*******************************************************************************
'CLASSE POUR GERER LES CONVERSATIONS
'*******************************************************************************
Public Class cls_conversations

    'collection des conversations
    Public t_conversation As New Hashtable

    Public Sub add_conversation(ByVal e_contact As DotMSN.Contact, ByRef e_conversation As DotMSN.Conversation)
        Debug.WriteLine("Création de l'objet cls_conversation avec " & e_contact.Name)
        Dim obj As New cls_conversation(e_contact, e_conversation)
        Try
            Me.t_conversation.Add(e_contact.Mail, obj)
        Catch ex As Exception
            Debug.WriteLine("Création déja existante avec " & e_contact.Name)
        End Try
    End Sub

End Class

'*******************************************************************************
'CLASSE CONVERSATION
'*******************************************************************************
Public Class cls_conversation

    Public ReadOnly t_ligne As New SortedList
    Public ReadOnly conversation As DotMSN.Conversation

    Public Sub New(ByVal e_contact As DotMSN.Contact, ByVal e_conversation As DotMSN.Conversation)
        Me.conversation = e_conversation
        Me.add_ligne("", "Conversation commencée avec " & e_contact.Name)
    End Sub

    Public Sub add_ligne(ByVal e_contact_name As String, ByVal e_txt As String)
        Me.t_ligne.Add(Me.t_ligne.Count, e_contact_name & " >> " & e_txt)
    End Sub

    Public Function get_all_dialog() As String
        Dim i As Integer
        For i = 0 To Me.t_ligne.Count - 1
            get_all_dialog &= Me.t_ligne(i).ToString & vbCrLf
        Next
    End Function

End Class

Public Class uc_msn

    Private messenger As DotMSN.Messenger

    'login & password pour msn
    Private login As String
    Private password As String

    Private t_conversation As New Hashtable

    Private current_conversation As String  'mail de la personne avec qui on est en train de parler

    '*********************************************************************************
    'fin
    Public Sub finish() Implements i_uc_multimedia.finish
        If Not IsNothing(Me.messenger) Then
            messenger.CloseConnection()
            messenger = Nothing
        End If
    End Sub

    '####################################################################################
    '####################################################################################
    'HANDLER POUR DOTMSN.MESSENGER
    '####################################################################################
    '####################################################################################

    '*********************************************************************************
    'déclenché qd on est synchronisé, on se met en online
    Private Sub handler_synchronisation_completed(ByVal sender As DotMSN.Messenger, ByVal e As System.EventArgs)
        Debug.WriteLine("Synchronisation terminées")
        Me.messenger.SetStatus(DotMSN.MSNStatus.Online)
    End Sub

    '*********************************************************************************
    'ajoute un contact qd celui ci se connecte
    Private Sub handler_contact_online(ByVal sender As DotMSN.Messenger, ByVal e As DotMSN.ContactEventArgs)
        Debug.WriteLine(e.Contact.Mail & " s'est connecté. Statut: " & e.Contact.Status)
        If e.Contact.Status <> DotMSN.MSNStatus.Offline Then
            'on vérifie si il est pas déja présent dans la liste
            'un chgt de status d'un contact relance une connexion
            If Me.contact_already_list(e.Contact.Mail) Then
                Exit Sub
            End If

            'ajout dans la liste des contacts
            Dim elt As New ListViewItem("")
            elt.SubItems.Add(e.Contact.Name)
            elt.Tag = e.Contact
            'définit l'image
            Select Case e.Contact.Status
                Case DotMSN.MSNStatus.Online
                    elt.ImageIndex = 0
                Case Else
                    elt.ImageIndex = 1
            End Select
            Me.lstv_contact.Items.Add(elt)
        End If
    End Sub

    '*********************************************************************************
    'supprime un contact qd il se deconnect
    Private Sub handler_contact_offline(ByVal sender As DotMSN.Messenger, ByVal e As DotMSN.ContactEventArgs)
        Debug.WriteLine(e.Contact.Mail & " s'est déconnecté")
        Dim elt As ListViewItem
        For Each elt In Me.lstv_contact.Items
            If CType(elt.Tag, DotMSN.Contact).Mail = e.Contact.Mail Then
                elt.Remove()
            End If
        Next
    End Sub

    '*********************************************************************************
    'conversation créée
    Private Sub handler_conversation_created(ByVal sender As DotMSN.Messenger, ByVal e As DotMSN.ConversationEventArgs)
        'cree les handlers pour les events de la conversation
        AddHandler e.Conversation.ContactJoin, AddressOf Me.handler_conversation_contact_joined
        AddHandler e.Conversation.ConnectionEstablished, AddressOf Me.handler_conversation_connection_established
        AddHandler e.Conversation.UserTyping, AddressOf Me.handler_conversation_user_type_text
        AddHandler e.Conversation.MessageReceived, AddressOf Me.handler_conversation_message_received
        AddHandler e.Conversation.AllContactsLeft, AddressOf Me.handler_converation_closed
        Debug.WriteLine("handler Nouvelle conversation")
    End Sub

    '*********************************************************************************
    'conversation: contact join
    Private Sub handler_conversation_contact_joined(ByVal sender As DotMSN.Conversation, ByVal e As DotMSN.ContactEventArgs)
        Debug.WriteLine("handler contact join conversation")
        Me.create_conversation(e.Contact, sender)
    End Sub

    Private Sub handler_converation_closed(ByVal sender As DotMSN.Conversation, ByVal e As System.EventArgs)
        Debug.WriteLine("Conversation fermée avec ??")
    End Sub

    Private Sub handler_list_received(ByVal sender As DotMSN.Messenger, ByVal e As DotMSN.ListReceivedEventArgs)
        Debug.WriteLine("Liste recue: " & e.AffectedList.ToString)
    End Sub

    '*********************************************************************************
    'conversation: connection établie
    Private Sub handler_conversation_connection_established(ByVal sender As DotMSN.Conversation, ByVal e As System.EventArgs)

    End Sub

    '*********************************************************************************
    'conversation: user tape du texte
    Private Sub handler_conversation_user_type_text(ByVal sender As DotMSN.Conversation, ByVal e As DotMSN.ContactEventArgs)

    End Sub

    '*********************************************************************************
    'conversation: réception d'un message
    Private Sub handler_conversation_message_received(ByVal sender As DotMSN.Conversation, ByVal e As DotMSN.MessageEventArgs)
        'ajout du texte dans la conversation
        If Me.t_conversation.ContainsKey(e.Sender.Mail) Then
            Me.t_conversation.Item(e.Sender.Mail) = Me.t_conversation.Item(e.Sender.Mail) & vbCrLf & e.Sender.Name & ": " & e.Message.Text
        Else
            Me.t_conversation.Add(e.Sender.Mail, e.Message.Text)
        End If

        'si c l'user aen cours, on actualise
        If Me.current_conversation = e.Sender.Mail Then
            Me.show_current_conversation()
        Else    'sinon, on met son login en vert
            Dim elt As ListViewItem
            For Each elt In Me.lstv_contact.Items
                If CType(elt.Tag, DotMSN.Contact).Mail = e.Sender.Mail Then
                    elt.ForeColor = Color.Green
                    Exit For
                End If
            Next
        End If
        Debug.WriteLine(e.Sender.Name & " dit '" & e.Message.Text & "'")
    End Sub

    '*********************************************************************************
    'dbl click sur un user (lance ou affiche conversation)
    Private Sub lstv_contact_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lstv_contact.DoubleClick, lstv_contact.evt_do_action

        Dim contact As DotMSN.Contact = CType(Me.lstv_contact.SelectedItems(0).Tag, DotMSN.Contact)
        Me.create_conversation(contact, Me.messenger.RequestConversation(contact.Mail))

        'met en rouge la conversation courante
        Dim elt As ListViewItem
        For Each elt In Me.lstv_contact.Items
            elt.ForeColor = Color.White
        Next
        Me.lstv_contact.SelectedItems(0).ForeColor = Color.Red

        Me.current_conversation = contact.Mail

        'affiche la conversation
        Me.show_current_conversation()

        Me.txt_msg.Focus()

    End Sub

    '*********************************************************************************
    'envoi un message
    Private Sub txt_msg_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_msg.KeyPress
        If Asc(e.KeyChar) = 13 Then
            Me.validate_msg()
            e.Handled = True
        End If
    End Sub

    Private Sub validate_msg()
        'parcourt les conversations pour tomber sur la bonne & lance le msg
        Dim c As DotMSN.Conversation
        Dim u As DictionaryEntry
        Dim envoye As Boolean = False
        For Each c In Me.messenger.Conversations
            For Each u In c.Users
                If CType(u.Value, DotMSN.Contact).Mail = Me.current_conversation Then
                    c.SendMessage(Me.txt_msg.Text)
                    Me.t_conversation.Item(CType(u.Value, DotMSN.Contact).Mail) = Me.t_conversation.Item(CType(u.Value, DotMSN.Contact).Mail) & vbCrLf & "Moi: " & Me.txt_msg.Text
                    envoye = True
                End If
            Next
        Next

        Me.show_current_conversation()
        Me.txt_msg.Text = ""
    End Sub

    '####################################################################################
    '####################################################################################
    'METHODES POUR GERER LES CONVERSATIONS
    '####################################################################################
    '####################################################################################

    '*********************************************************************************
    'ajoute la conversation dans t_conversation
    Private Sub create_conversation(ByVal e_contact As DotMSN.Contact, ByRef e_conv As DotMSN.Conversation)
        Try
            Me.t_conversation.Add(e_contact.Mail, "Conversation commencée avec " & e_contact.Mail)
        Catch ex As Exception

        End Try
        'Me.conversations.add_conversation(e_contact, e_conv)
    End Sub

    '*********************************************************************************
    'affiche la conversation courante
    Private Sub show_current_conversation()
        Me.rtb_discussion.Text = Me.t_conversation.Item(Me.current_conversation)
    End Sub

    '*********************************************************************************
    'spécifie si un contact est déja dans la liste
    Private Function contact_already_list(ByVal e_mail As String) As Boolean
        Dim elt As ListViewItem
        For Each elt In Me.lstv_contact.Items
            If CType(elt.Tag, DotMSN.Contact).Mail = e_mail Then
                Return True
            End If
        Next
        Return False
    End Function

    '*************************************************************************************************
    'pour ajouter qqchise dans une conversation (juste mettre a jour le hashtable avec le contenu de toutes les conversations
    Private Function conv_say(ByVal e_mail As String, ByVal e_narrator As String, ByVal e_msg As String) As Boolean
        'on vérifie si la conversation existe

    End Function

    '*************************************************************************************************
    'retourne le mail de l'interlocuteur dans une conversation
    Private Function get_mail_from_conv(ByRef e_conv As DotMSN.Conversation) As String
        Dim u As DictionaryEntry
        For Each u In e_conv.Users
            Return CType(u.Value, DotMSN.Contact).Mail
        Next
    End Function

    '*************************************************************************************************
    'affiche les parametres
    Public Sub show_parameters() Implements i_uc_multimedia.show_parameters
        Dim frm_param As New frm_parameters(Me.pref)
        frm_param.ShowDialog()
        frm_param.Dispose()
    End Sub

    '*************************************************************************************************
    'se connecter
    Private Sub lbl_info_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbl_info.Click, lbl_info.evt_do_action
        Try

            'cree objet msn
            Me.messenger = New DotMSN.Messenger

            'ajout des handlers
            AddHandler messenger.SynchronizationCompleted, AddressOf Me.handler_synchronisation_completed
            AddHandler messenger.ContactOnline, AddressOf Me.handler_contact_online
            AddHandler messenger.ContactOffline, AddressOf Me.handler_contact_offline
            AddHandler messenger.ConversationCreated, AddressOf Me.handler_conversation_created
            AddHandler messenger.ListReceived, AddressOf Me.handler_list_received

            'connexion
            Try
                Me.messenger.Connect(Me.pref.get_param("login"), Me.pref.get_param("password"))
            Catch ex As Exception
                'Me.speak("Impossible de se connecter à msn")
                Me.lbl_info.Text = "Impossible de se connecter à msn"
                Exit Sub
            End Try
            Me.messenger.SynchronizeList()

        Catch ex As Exception
            'Me.speak("Impossible de se connecter à msn")
            Me.lbl_info.Text = "Impossible de se connecter à msn"
            Exit Sub
        End Try

        Me.lbl_info.Text = "Connecté en tant que " & Me.messenger.Owner.Mail
        'Me.speak("Vous êtes connecté à msn")

    End Sub

End Class

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.