© BigSpeed Computing Inc. - Mastering algorithms
Public Class CFMain

  'Visual Basic 2005 sample of secure voice chat server
  'To keep this VB 2005 example simple, we are going to support
  'only the default user account (Guest)



Dim FSettings As CFSettings




  Private Function GetUsername(ByVal aHandle As Integer) As String
    GetUsername = VoiSrv.GetPeerName(aHandle)
    If GetUsername = "" Then
      GetUsername = "Guest"
    End If
  End Function




  'Update the status text
  Private Sub UpdateStatus()
    If VoiSrv.Running Then
      StatusBar.Panels.Item(0).Text = "Started"
      btnStart.Enabled = False
      btnStop.Enabled = True
    Else
      StatusBar.Panels.Item(0).Text = "Stopped"
      btnStart.Enabled = True
      btnStop.Enabled = False
    End If

    If lvPeers.Items.Count = 0 Then
      StatusBar.Panels.Item(1).Text = "No active connection"
    Else
      StatusBar.Panels.Item(1).Text = Str(lvPeers.Items.Count) + " connection(s)"
    End If

    btnRemove.Enabled = lvPeers.SelectedItems.Count > 0
  End Sub



  'Set the component properties
  Private Sub SetSettings()

    VoiSrv.ListeningPort = Val(FSettings.txtPort.Text)

    If FSettings.radSecret.Checked Then
      VoiSrv.SecurityMode = 1
    Else
      If FSettings.radPublic.Checked Then
        VoiSrv.SecurityMode = 2
      Else
        VoiSrv.SecurityMode = 0
      End If
    End If

    VoiSrv.SecretKey = FSettings.txtSecret.Text

    VoiSrv.PublicKey = FSettings.txtPublic.Text
    VoiSrv.PrivateKey = FSettings.txtPrivate.Text
    VoiSrv.Fingerprints = FSettings.txtFingerprints.Text

  End Sub



'Add a message to the log
Private Sub LogMsg(ByVal aText As String)
    Dim Line As String
    If txtLog.Text > "" Then
      Line = Chr(13) & Chr(10)
    Else
      Line = ""
    End If
    Line = Line & "[" & Now.ToLongTimeString & "] : "
    Line = Line & aText
    txtLog.SelectionStart = Len(txtLog.Text)
    txtLog.SelectedText = Line
End Sub




  Private Function ItemFromHandle(ByVal aHandle As Long) As ListViewItem
    'iterate on the list
    Dim i As Integer
    For i = 0 To lvPeers.Items.Count - 1
      If lvPeers.Items(i).Tag = aHandle Then
        ItemFromHandle = lvPeers.Items(i)
        Exit Function
      End If
    Next i
    ItemFromHandle = Nothing
  End Function




  'Initializations
  Private Sub CFoMain_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
    FSettings = New CFSettings   'create the settings form
    FSettings.FMain = Me
    SetSettings()
    UpdateStatus()
  End Sub




  'Start the server
  Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
    If VoiSrv.Start Then
      LogMsg(("Server is started"))
    Else
      Call MsgBox("Cannot start the server!", "Error")
    End If

    UpdateStatus()
  End Sub



  'Stop the server
  Private Sub btnStop_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles btnStop.Click
    Dim i As Integer

    VoiSrv.Stop()

    For i = lvPeers.Items.Count - 1 To 0 Step -1
      VoiSrv.DisconnectPeer(lvPeers.Items(i).Tag)
    Next i

    UpdateStatus()
    LogMsg("Server is stopped")
  End Sub



  'Modify the settings
  Private Sub btnSettings_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles btnSettings.Click
    If FSettings.ShowDialog <> DialogResult.OK Then Exit Sub
    SetSettings()
    UpdateStatus()
  End Sub


  'Show my IP address
  Private Sub btnIP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIP.Click
    MsgBox(VoiSrv.LocalIPList, , "My IP address")
  End Sub


  Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
    End
  End Sub


  'Remove a peer connection
  Private Sub btnRemove_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles btnRemove.Click
    If lvPeers.SelectedItems.Count = 0 Then Exit Sub
    VoiSrv.DisconnectPeer(lvPeers.SelectedItems(0).Tag)
    UpdateStatus()
  End Sub


  'Clear the log
  Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
    txtLog.Text = ""
  End Sub

  'A list view item is clicked
  Private Sub lvPeers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvPeers.SelectedIndexChanged
    UpdateStatus()
  End Sub



  ' *** VoiSrv events ***


  'A request from a new peer
  Private Sub VoiSrv_OnConnectionRequest(ByVal sender As System.Object, ByVal e As AxbsVoiChatSrv.IbsVoiChatSrvXEvents_OnConnectionRequestEvent) Handles VoiSrv.OnConnectionRequest
    If e.aUsername = "" Then
      'this is a Guest user, go ahead
      e.aAction = 1
    Else
      'Unknown user, we accept only guests
      e.aAction = 0
    End If
  End Sub



  'A new peer is just connected
  Private Sub VoiSrv_OnPeerConnected(ByVal sender As System.Object, ByVal e As AxbsVoiChatSrv.IbsVoiChatSrvXEvents_OnPeerConnectedEvent) Handles VoiSrv.OnPeerConnected
    Dim LI As ListViewItem

    LI = lvPeers.Items.Add("Guest")
    LI.Tag = e.aHandle
    LI.SubItems.Add(VoiSrv.GetPeerAddress(e.aHandle))
    LI.SubItems.Add(Str(VoiSrv.GetPeerPort(e.aHandle)))
    LI.SubItems.Add(Now.ToLongTimeString)
    LI.SubItems.Add("Connected")

    UpdateStatus()
    LogMsg(("New peer at " + LI.SubItems(1).Text + ":" + LI.SubItems(2).Text))
  End Sub


  'A connection is broken
  Private Sub VoiSrv_OnPeerDisconnected(ByVal sender As System.Object, ByVal e As AxbsVoiChatSrv.IbsVoiChatSrvXEvents_OnPeerDisconnectedEvent) Handles VoiSrv.OnPeerDisconnected
    Dim LI As ListViewItem
    LI = ItemFromHandle(e.aHandle)
    If LI Is Nothing Then Exit Sub
    LogMsg(("Disconnected " & LI.Text & " " & VoiSrv.GetPeerAddress(e.aHandle) & ":" & Str(VoiSrv.GetPeerPort(e.aHandle))))
    lvPeers.Items.Remove(LI)
  End Sub



  'A connection is refused
  Private Sub VoiSrv_OnPeerRejected(ByVal sender As System.Object, ByVal e As AxbsVoiChatSrv.IbsVoiChatSrvXEvents_OnPeerRejectedEvent) Handles VoiSrv.OnPeerRejected
    LogMsg(("Rejected peer from " & VoiSrv.GetPeerAddress(e.aHandle) & ":" & Str(VoiSrv.GetPeerPort(e.aHandle))))
  End Sub


End Class
© BigSpeed Computing Inc. - Mastering algorithms