Pawich S.
Pawich S.

Reputation: 455

Jabber-net Send message (VB.NET)

I have created test project to send message via google talk using Jabber library. As I already have test project that can send message successfully using agsXMPP, I want to imitate this project to use jabber library instead. However, there is no message sent even though the code run pass sending message command without any error. It seems that the password has not even been checked as it didn't enter OnAuthError event.

My test project is ASP.NET Web application project using VB.NET language. There are 4 textboxes to fill in: sender account (txt_Sender), sender's password (txt_Password), message to be sent (txt_Message) and receiver account (txt_Receiver) and also 1 button for sending the message (btn_Send). I test by using my email account ([email protected]) and send message to my friend ([email protected]). Here are my VB code

Imports jabber
Imports jabber.client
Imports Microsoft.Win32
Imports System.Threading
Imports jabber.protocol.client
Imports jabber.connection

Public Class TestSendMsg
    Inherits System.Web.UI.Page
    Public done As ManualResetEvent
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        done = New ManualResetEvent(False)
    End Sub

    Private Sub btn_Send_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_Send.Click
        Dim jcSender As JabberClient = New JabberClient()
        Dim jidSender As New jabber.JID(txt_Sender.Text.Trim)
        With jcSender
            .User = jidSender.User
            .Password = txt_Password.Text.Trim
            .Server = jidSender.Server
            .AutoReconnect = True
            .AutoRoster = True
        End With
        With jcSender
            Try
                AddHandler .OnAuthenticate, New bedrock.ObjectHandler(AddressOf j_OnAuthenticate)
                'AddHandler .OnAuthenticate, AddressOf j_OnAuthenticate
                AddHandler .OnPresence, AddressOf j_OnPresence
                AddHandler .OnBeforePresenceOut, AddressOf j_OnBeforePresenceOut
                AddHandler .OnAuthError, AddressOf j_OnAuthError
                AddHandler .OnAfterPresenceOut, AddressOf j_OnAfterPresenceOut
                .Connect()
                .Login()
                .IsAuthenticated = True
                .Message(txt_Reciever.Text.Trim, txt_Message.Text.Trim)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            .Close()
            .Dispose()
        End With
    End Sub

Private Sub j_OnAfterPresenceOut(ByVal sender As Object, ByVal pres As Presence)
    'Dim j As JabberClient = CType(sender, JabberClient)
    'j.Message(TARGET, "Registered: " & iq.BaseURI)
    'done.Set()
End Sub

Private Sub j_OnAuthError(ByVal sender As Object, ByVal pres As Presence)
    'Dim j As JabberClient = CType(sender, JabberClient)
    'j.Message(TARGET, "Registered: " & iq.BaseURI)
    'done.Set()
End Sub

Private Sub j_OnBeforePresenceOut(ByVal sender As Object, ByVal pres As Presence)
    'Dim j As JabberClient = CType(sender, JabberClient)
    'j.Message(TARGET, "Registered: " & iq.BaseURI)
    'done.Set()
End Sub

Private Sub j_OnPresence(ByVal sender As Object, ByVal pres As Presence)
    'Dim j As JabberClient = CType(sender, JabberClient)
    'j.Message(TARGET, "Presence: " & pres.BaseURI)
    'done.Set()
End Sub

Private Sub j_OnAuthenticate(ByVal sender As Object)
    ' Sender is always the JabberClient.
    Dim j As JabberClient = CType(sender, JabberClient)
    j.Message(txt_Reciever.Text.Trim, "Test OnAuthenticate")
    ' Finished sending.  Shut down.
    done.Set()
End Sub

End Class

Upvotes: 0

Views: 1807

Answers (1)

Joe Hildebrand
Joe Hildebrand

Reputation: 10414

You need to wait for OnAuthenticate before sending your message.

Upvotes: 1

Related Questions