© BigSpeed Computing Inc. - Mastering algorithms
Public Class CFMain
'Visual Basic 2005 sample of secure voice chat client
'To keep this VB 2005 example simple, we are going to support
'only the default user account (Guest)
Public Peers As New Collection
Friend ThePeer, SelPeer As CPeer
Dim FSettings As CFSettings
Dim FConnect As CFConnect
Dim FAlert As CFAlert
'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
Friend Function PeerFromHandle(ByVal aHandle As Long) As CPeer
Dim Pr As CPeer
PeerFromHandle = Nothing
For Each Pr In Peers ' Iterate through elements.
If Pr.Handle = aHandle Then
PeerFromHandle = Pr
Exit For ' Exit loop.
End If
Next
End Function
Public Function PickPeer(ByVal aHandle As Long) As Boolean
ThePeer = PeerFromHandle(aHandle)
PickPeer = Not (ThePeer Is Nothing)
End Function
Public Function SelectPeer() As Boolean
SelectPeer = False
If lvPeers.SelectedItems.Count = 0 Then Exit Function
SelPeer = lvPeers.SelectedItems(0).Tag
SelectPeer = Not (SelPeer Is Nothing)
End Function
'Update the button state and the status text
Private Sub UpdateStatus()
If VoiCln.SessionOpen Then
'already connected
btnConnect.Enabled = False
btnCancel.Enabled = False
btnDisconnect.Enabled = True
StatusBar.Panels(0).Text = " Session open"
StatusBar.Panels(1).Text = " Server: " + VoiCln.ServerAddress + ":" + Str(VoiCln.ServerPort)
If VoiCln.Username > "" Then
StatusBar.Panels(2).Text = " User: " + VoiCln.Username
Else
StatusBar.Panels(2).Text = " User: Guest"
End If
Else
StatusBar.Panels(1).Text = ""
StatusBar.Panels(2).Text = ""
If VoiCln.SessionOpening Then
'now connecting
btnConnect.Enabled = False
btnCancel.Enabled = True
btnDisconnect.Enabled = False
StatusBar.Panels(0).Text = " Connecting to the server"
Else
'not connected
btnConnect.Enabled = True
btnCancel.Enabled = False
btnDisconnect.Enabled = False
StatusBar.Panels(0).Text = " Session closed"
End If
End If
UpdateButtons()
End Sub
Private Sub UpdateButtons()
btnAlert.Enabled = lvPeers.SelectedItems.Count > 0
btnChat.Enabled = lvPeers.SelectedItems.Count > 0
btnRemove.Enabled = lvPeers.SelectedItems.Count > 0
btnMakeCall.Enabled = False
If lvPeers.SelectedItems.Count > 0 Then
If (VoiCln.GetCallingPeer = 0) And (VoiCln.GetCallPeer = 0) Then
btnMakeCall.Enabled = True
End If
End If
btnCancelCalling.Enabled = VoiCln.GetCallingPeer <> 0
btnEndCall.Enabled = VoiCln.GetCallPeer <> 0
chkMuteRecording.Enabled = btnEndCall.Enabled
chkMutePlayback.Enabled = btnEndCall.Enabled
End Sub
'Set the component properties
Private Sub SetSettings()
If FSettings.radSecret.Checked Then
VoiCln.SecurityMode = 1
Else
If FSettings.radPublic.Checked Then
VoiCln.SecurityMode = 2
Else
VoiCln.SecurityMode = 0
End If
End If
VoiCln.SecretKey = FSettings.txtSecret.Text
VoiCln.PublicKey = FSettings.txtPublic.Text
VoiCln.PrivateKey = FSettings.txtPrivate.Text
VoiCln.Fingerprints = FSettings.txtFingerprints.Text
VoiCln.ListeningPort = Val(FSettings.txtPort.Text)
VoiCln.BindAddress = FSettings.txtAddr.Text
End Sub
Sub DeletePeer(ByVal aPeer As CPeer)
If aPeer Is Nothing Then Exit Sub
Peers.Remove(Str(aPeer.Handle))
VoiCln.DisconnectPeer(aPeer.Handle)
lvPeers.Items.Remove(aPeer.ListItem)
End Sub
'Initializations
Private Sub fMain_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
FSettings = New CFSettings 'create the settings form
FSettings.FMain = Me
FConnect = New CFConnect 'create the connection form
SetSettings()
FAlert = New CFAlert 'create the alert form
UpdateStatus()
End Sub
Private Sub lvPeers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvPeers.SelectedIndexChanged
UpdateStatus()
End Sub
'Connecting to the server
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
If FConnect.ShowDialog <> DialogResult.OK Then Exit Sub
If Not VoiCln.OpenSession(FConnect.txtSrvAddr.Text, Val(FConnect.txtSrvPort.Text), FConnect.txtUsername.Text, FConnect.txtPassword.Text) Then
MsgBox("Cannot initiate a new session: " + Str(VoiCln.LastError))
End If
UpdateStatus()
End Sub
'Disconnect from the server
Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
VoiCln.CloseSession()
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
If FSettings.ShowDialog <> DialogResult.OK Then Exit Sub
SetSettings()
UpdateStatus()
End Sub
Private Sub btnSettings_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSettings.Click
If FSettings.ShowDialog <> DialogResult.OK Then Exit Sub
SetSettings()
UpdateStatus()
End Sub
Private Sub btnIP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIP.Click
MsgBox(VoiCln.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
' Events
'Just connected to the server
Private Sub VoiCln_OnSessionOpen(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnSessionOpen
UpdateStatus()
LogMsg("Connected to the server " + VoiCln.ServerAddress + ":" + Str(VoiCln.ServerPort))
End Sub
'Unsuccessful connection to the server
Private Sub VoiCln_OnSessionRejected(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnSessionRejected
LogMsg("Cannot open a session to" + FConnect.txtSrvAddr.Text + ":" + FConnect.txtSrvPort.Text + " Error- " + ErrorText(VoiCln.LastError))
MsgBox("Cannot open the session! Error: " + ErrorText(VoiCln.LastError))
UpdateStatus()
End Sub
'Just disconnected from the server
Private Sub VoiCln_OnSessionClosed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnSessionClosed
UpdateStatus()
LogMsg("Disconnected from the server")
End Sub
'A new peer is just connected
Private Sub VoiCln_OnPeerConnected(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnPeerConnectedEvent) Handles VoiCln.OnPeerConnected
Dim Pr As New CPeer
Dim LI As ListViewItem
Pr.Handle = e.aHandle
Peers.Add(Pr, Str(Pr.Handle))
Pr.Username = NiceName(VoiCln.GetPeerName(Pr.Handle))
'create the chat form
Pr.FChat = New CFChat
Pr.FChat.FMain = Me
Pr.FChat.Peer = Pr
Pr.FChat.Text = "Chat with " + Pr.Username
LI = lvPeers.Items.Add(NiceName(VoiCln.GetPeerName(e.aHandle))) 'Name
LI.SubItems.Add(VoiCln.GetPeerAddress(e.aHandle)) 'Address
LI.SubItems.Add(VoiCln.GetPeerPort(e.aHandle)) 'port
LI.SubItems.Add("Online") 'status
LI.Tag = Pr
Pr.ListItem = LI
If lvPeers.SelectedItems.Count = 0 Then
LI.Selected = True
End If
UpdateStatus()
LogMsg("New peer at " + LI.SubItems(1).Text + ":" + LI.SubItems(2).Text)
End Sub
'A peer is just disconnected
Private Sub VoiCln_OnPeerDisconnected(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnPeerDisconnectedEvent) Handles VoiCln.OnPeerDisconnected
Dim Pr As CPeer
Pr = PeerFromHandle(e.aHandle)
If Pr Is Nothing Then Exit Sub
LogMsg("Disconnected peer " + Pr.ListItem.Text + " " + Pr.ListItem.SubItems(1).Text + ":" + Pr.ListItem.SubItems(2).Text)
DeletePeer(Pr)
End Sub
' *** Alert
Private Sub btnAlert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlert.Click
If Not SelectPeer() Then Exit Sub
FAlert.txtMsg.Text = ""
If lvPeers.SelectedItems.Count > 0 Then
FAlert.radSingle.Text = "User " + lvPeers.SelectedItems(0).Text
FAlert.radSingle.Enabled = True
FAlert.radSingle.Checked = True
Else
FAlert.radAll.Checked = True
FAlert.radSingle.Text = "Single user"
FAlert.radSingle.Enabled = False
End If
If FAlert.ShowDialog <> DialogResult.OK Then Exit Sub
If FAlert.radSingle.Checked Then
VoiCln.SendAlertMessage(SelPeer.Handle, FAlert.txtMsg.Text)
Else
For Each Pr As CPeer In Peers
VoiCln.SendAlertMessage(Pr.Handle, FAlert.txtMsg.Text)
Next
End If
End Sub
'An alert message is available
Private Sub VoiCln_OnHaveAlertMessage(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnHaveAlertMessageEvent) Handles VoiCln.OnHaveAlertMessage
If Not PickPeer(e.aHandle) Then Exit Sub
MsgBox(e.aText, , "Alert from " + ThePeer.Username)
End Sub
' *** Chat
Private Sub btnChat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChat.Click
If Not SelectPeer() Then Exit Sub
ShowForm(SelPeer.FChat)
End Sub
'A chat message is available
Private Sub VoiCln_OnHaveChatMessage(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnHaveChatMessageEvent) Handles VoiCln.OnHaveChatMessage
If Not PickPeer(e.aHandle) Then Exit Sub
ThePeer.FChat.HaveChatMessage(e.aText)
End Sub
Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click
If Not SelectPeer() Then Exit Sub
DeletePeer(SelPeer)
End Sub
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
txtLog.Clear()
End Sub
Private Sub VoiCln_OnCallRequested(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnCallRequestedEvent) Handles VoiCln.OnCallRequested
Dim Pr As CPeer
Pr = PeerFromHandle(e.aHandle)
If Pr Is Nothing Then Exit Sub
LogMsg("Call is requested from " + Pr.Username + " " + Pr.ListItem.SubItems(1).Text + ":" + Pr.ListItem.SubItems(2).Text)
If MsgBox("Call is requested from " + Pr.Username + " " + Pr.ListItem.SubItems(1).Text + ":" + Pr.ListItem.SubItems(2).Text, MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then
e.aOkay = True
End If
End Sub
Private Sub VoiCln_OnCallTaken(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnCallTakenEvent) Handles VoiCln.OnCallTaken
Dim Pr As CPeer
Pr = PeerFromHandle(e.aHandle)
If Pr Is Nothing Then Exit Sub
Pr.ListItem.SubItems(3).Text = "Talking"
lblCaller.Text = Pr.ListItem.Text
VoiCln.TriggerLevel = udTrigerLevel.Value
UpdateButtons()
LogMsg("Call from " + Pr.Username + " is taken")
End Sub
Private Sub VoiCln_OnCallAccepted(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnCallAcceptedEvent) Handles VoiCln.OnCallAccepted
Dim Pr As CPeer
Pr = PeerFromHandle(e.aHandle)
If Pr Is Nothing Then Exit Sub
Pr.ListItem.SubItems(3).Text = "Talking"
lblCaller.Text = Pr.ListItem.Text
VoiCln.TriggerLevel = udTrigerLevel.Value
UpdateButtons()
LogMsg("Call from " + Pr.Username + " is accepted")
End Sub
Private Sub VoiCln_OnCallRejected(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnCallRejectedEvent) Handles VoiCln.OnCallRejected
Dim Pr As CPeer
Pr = PeerFromHandle(e.aHandle)
If Pr Is Nothing Then Exit Sub
Pr.ListItem.SubItems(3).Text = "Online"
UpdateButtons()
MsgBox("Call from " + Pr.Username + " is rejected")
LogMsg("Call from " + Pr.Username + " is rejected")
End Sub
Private Sub VoiCln_OnCallTerminated(ByVal sender As System.Object, ByVal e As AxbsVoiChatCln.IbsVoiChatClnXEvents_OnCallTerminatedEvent) Handles VoiCln.OnCallTerminated
Dim Pr As CPeer
Pr = PeerFromHandle(e.aHandle)
If Pr Is Nothing Then Exit Sub
lblCaller.Text = ""
Pr.ListItem.SubItems(3).Text = "Online"
UpdateButtons()
MsgBox("Call from " + Pr.Username + " is terminated")
LogMsg("Call from " + Pr.Username + " is terminated")
End Sub
Private Sub VoiCln_OnStartDelaying(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnStartDelaying
lblDelaying.Visible = True
End Sub
Private Sub VoiCln_OnStopDelaying(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnStopDelaying
lblDelaying.Visible = False
End Sub
Private Sub VoiCln_OnStartOverloading(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnStartOverloading
lblOverloading.Visible = True
End Sub
Private Sub VoiCln_OnStopOverloading(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnStopOverloading
lblOverloading.Visible = False
End Sub
Private Sub VoiCln_OnStartRecording(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnStartRecording
lblRecording.Visible = True
End Sub
Private Sub VoiCln_OnStopRecording(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VoiCln.OnStopRecording
lblRecording.Visible = False
End Sub
Private Sub chkMuteRecording_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMuteRecording.CheckedChanged
VoiCln.MuteRecording = chkMuteRecording.Checked
End Sub
Private Sub chkMutePlayback_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMutePlayback.CheckedChanged
VoiCln.MutePlayback = chkMutePlayback.Checked
End Sub
Private Sub btnMakeCall_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMakeCall.Click
If Not SelectPeer() Then Exit Sub
If VoiCln.MakeCall(SelPeer.Handle) Then
lvPeers.SelectedItems(0).SubItems(3).Text = "Calling"
Else
MsgBox("Cannot make a call, code: " + Str(VoiCln.LastError))
End If
UpdateButtons()
End Sub
Private Sub btnEndCall_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEndCall.Click
VoiCln.TerminateCall(0) 'end the conversation with all peers
lblCaller.Text = ""
Dim i As Long
For i = 0 To lvPeers.Items.Count - 1
lvPeers.Items.Item(0).SubItems(3).Text = "Online"
Next i
UpdateButtons()
End Sub
Private Sub udTrigerLevel_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles udTrigerLevel.ValueChanged
If Not Me.Visible Then Exit Sub
If VoiCln Is Nothing Then Exit Sub
If VoiCln.GetCallPeer = 0 Then Exit Sub
VoiCln.TriggerLevel = udTrigerLevel.Value
End Sub
End Class
© BigSpeed Computing Inc. - Mastering algorithms