We are licensed with InetLab.SMPP. Trying to send sms via VB.Net winforms application.
Applying license is working fine. But, couldn't able to establish the connection.
Application is going to non-responsive mode.
Can you please help on this.
Source Code
Code: Select all
[u][b]FormsApplication[/b][/u]
[b]FileName: Form1.vb[/b]
Imports Inetlab.SMPP.Brithol.SMSLibrary
Public Class Form1
    Private bmSmsClient As IBMInetSmsClientManager
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim destinationAddress = ReceiverNumber.Text.Trim
        If String.IsNullOrWhiteSpace(destinationAddress) Then
            MessageBox.Show("Receiver number is missing")
            Return
        End If
        Try
            CheckSms(destinationAddress)
        Catch ex As Exception
            LogManager.Log($"Error occured in Form1: Button1_Click() => {ex.ToString()}", ex)
            MessageBox.Show(ex.ToString())
        End Try
    End Sub
    Private Sub CheckSms(destinationAddress As String)
        Dim setting = SetSmsSetting("{SERVER_ADDRESS}", "{PORT}", "{USER_NAME}", "{PASSWORD}")
        Dim bmMessage = SetBMMessage("{SOURCE}", destinationAddress, "MessageContent-Test message from VBFormsApp.")
        bmSmsClient = New BMInetSmsClientManager(setting)
        bmSmsClient.Send(bmMessage)
    End Sub
    Private Function SetSmsSetting(host As String, port As String, userName As String, password As String) As BMSmsClientSetting
        Return New BMSmsClientSetting With {
            .HostName = host,
            .Port = port,
            .UserName = userName,
            .Password = password
            }
    End Function
    Private Function SetBMMessage(source As String, destination As String, message As String) As BMSmsMessage
        Return New BMSmsMessage With {
           .Source = source,
           .Destination = destination,
           .MessageContent = message
           }
    End Function
End Class
[b]Library project:[/b]
Public Class BMSmsClientSetting
    Public Property HostName As String
    Public Property Port As String
    Public Property UserName As String
    Public Property Password As String
End Class
Public Class BMSmsMessage
    Public Property Source As String
    Public Property Destination As String
    Public Property MessageContent As String
End Class
[b]FileName: IBMInetSmsClientManager.vb[/b]
Public Interface IBMInetSmsClientManager
    Function Send(bmMessage As BMSmsMessage) As Boolean
End Interface
[b]FileName: BMInetSmsClientManager.vb[/b]
Imports Inetlab.SMPP.Common
Public Class BMInetSmsClientManager
    Implements IBMInetSmsClientManager
    Private _client As SmppClient
    Private _bindResponse As PDU.BindResp
    Public Sub New(clientSetting As BMSmsClientSetting)
        If clientSetting Is Nothing Then
            Throw New ArgumentNullException("SMPPClientSetting is not available")
        End If
        'If ApplyLicense() = False Then
        '    Throw New Exception("Invalid License, please contact administrator")
        'End If
        If EstablishClientConenction(clientSetting) Then
            Throw New Exception("Unable to establish client connection, please contact administrator")
        End If
    End Sub
    Public Function Send(bmMessage As BMSmsMessage) As Boolean Implements IBMInetSmsClientManager.Send
        Dim result As Boolean = False
        Try
            LogManager.Log("BMInetSmsClientManager: Send()=> method called.")
            If (_client.Status = ConnectionStatus.Open) = False Then
                LogManager.Log("BMInetSmsClientManager: Client conenction not establised.")
                Return False
            End If
            If (_client.Status = ConnectionStatus.Bound) = False Then
                LogManager.Log("BMInetSmsClientManager: Client conenction bound is not happend.")
                Return False
            End If
            If _bindResponse.Header.Status = CommandStatus.ESME_ROK Then
                Dim singleMessage = SMS.ForSubmit().
                    From(bmMessage.Source).
                    To(bmMessage.Destination).
                    Coding(DataCodings.UCS2).
                    Text(bmMessage.MessageContent)
                LogManager.Log("BMInetSmsClientManager: SMS constructed.")
                Dim submitResp = _client.SubmitAsync(singleMessage).GetAwaiter().GetResult()
                LogManager.Log("BMInetSmsClientManager: Message submitted.")
                If submitResp.All(Function(x) x.Header.Status = CommandStatus.ESME_ROK) Then
                    Dim msgIds = submitResp.Select(Function(x) x.MessageId).ToList()
                    LogManager.Log($"Message has been sent. with messageIds :{String.Join(",", msgIds)}")
                Else
                    LogManager.Log($"BMInetSmsClientManager: Message submitted. but not sent {submitResp}")
                End If
            Else
                LogManager.Log($"BMInetSmsClientManager: bind response is in {_bindResponse.Header.Status} status. Can't sent message.")
            End If
        Catch ex As Exception
            LogManager.Log("BMInetSmsClientManager: Send()=> Error occured.", ex)
            Throw
        Finally
        End Try
        Return result
    End Function
    Protected Overrides Sub Finalize()
        If _client Is Nothing Then
            Return
        End If
        LogManager.Log("BMInetSmsClientManager: Disconnecting from SMPP server")
        If _client.Status = ConnectionStatus.Bound Then
            LogManager.Log("BMInetSmsClientManager: Unbind SmppClient")
            Dim response = _client.UnbindAsync().GetAwaiter().GetResult()
            Select Case response.Header.Status
                Case CommandStatus.ESME_ROK
                    LogManager.Log($"BMInetSmsClientManager: UnBind success: Status: {response.Header.Status}")
                Case Else
                    LogManager.Log($"BMInetSmsClientManager: UnBind failed: Status: {response.Header.Status}")
                    _client.DisconnectAsync().GetAwaiter().GetResult()
            End Select
        End If
        If _client.Status = ConnectionStatus.Open Then
            _client.DisconnectAsync().GetAwaiter().GetResult()
        End If
        LogManager.Log("BMInetSmsClientManager: Connection is disconnected")
    End Sub
    ''' <summary>
    ''' Establish connection to client.
    ''' </summary>
    ''' <param name="setting">setting.</param>
    ''' <returns>bool.</returns>
    Private Function EstablishClientConenction(setting As BMSmsClientSetting) As Boolean
        Dim result As Boolean
        Try
            _client = New SmppClient
            _client.ConnectAsync(setting.HostName, setting.Port).GetAwaiter().GetResult()
            LogManager.Log("BMInetSmsClientManager: EstablishConenction()=> Connection establised")
            _bindResponse = _client.BindAsync(setting.UserName, setting.Password).GetAwaiter().GetResult()
            LogManager.Log("BMInetSmsClientManager: EstablishConenction()=> Binding complated")
            result = True
        Catch ex As Exception
            LogManager.Log("BMInetSmsClientManager: EstablishConenction()=> Error occured.", ex)
            Throw
        End Try
        Return result
    End Function
    ''' <summary>
    ''' Apply license in the constructor.
    ''' </summary>
    ''' <returns>bool.</returns>
    Private Function ApplyLicense() As Boolean
        Dim licenseResult As Boolean
        Try
            Dim licenseContent = Me.GetType().Assembly.GetManifestResourceStream(Me.GetType(), "Inetlab.SMPP.license")
            licenseResult = Inetlab.SMPP.LicenseManager.SetLicense(licenseContent)
        Catch ex As Exception
            LogManager.Log("BMInetSmsClientManager: ApplyLicense()=> Error occured.", ex)
            Throw
        End Try
        LogManager.Log($"BMInetSmsClientManager: ApplyLicense()=> called and licenseResult: {licenseResult}")
        Return licenseResult
    End Function
End Class
Anil
