You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

547 lines
26 KiB

VERSION 5.00
Object = "{6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.0#0"; "COMCTL32.OCX"
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Begin VB.Form frmChat
BorderStyle = 1 'Fixed Single
Caption = "Inter Net Voice"
ClientHeight = 3030
ClientLeft = 2625
ClientTop = 1530
ClientWidth = 4170
FillColor = &H00808080&
Icon = "chat.frx":0000
LinkTopic = "Form1"
LockControls = -1 'True
MaxButton = 0 'False
ScaleHeight = 3030
ScaleWidth = 4170
WhatsThisButton = -1 'True
WhatsThisHelp = -1 'True
Begin VB.PictureBox Picture3
Height = 2565
Left = 60
ScaleHeight = 2505
ScaleWidth = 3945
TabIndex = 0
Top = 390
Width = 4005
Begin VB.CommandButton cmdTalk
Caption = "&Talk"
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 345
Left = 540
TabIndex = 4
Top = 2130
Width = 2865
End
Begin VB.ListBox ConnectionList
Height = 1065
ItemData = "chat.frx":0442
Left = 60
List = "chat.frx":0444
TabIndex = 2
Top = 840
Width = 3825
End
Begin VB.ComboBox txtServer
Height = 315
ItemData = "chat.frx":0446
Left = 630
List = "chat.frx":0448
Sorted = -1 'True
TabIndex = 1
Top = 60
Width = 3255
End
Begin VB.Image outLight
Height = 345
Left = 3510
Picture = "chat.frx":044A
Stretch = -1 'True
Top = 2130
Width = 345
End
Begin VB.Image inLight
Height = 345
Left = 60
Picture = "chat.frx":0754
Stretch = -1 'True
Top = 2130
Width = 345
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "Conference List:"
Height = 195
Left = 60
TabIndex = 3
Top = 600
Width = 1425
End
Begin VB.Image imgStatus
Appearance = 0 'Flat
Height = 390
Left = 90
Picture = "chat.frx":0A5E
Stretch = -1 'True
Top = 30
Width = 420
End
End
Begin ComctlLib.Toolbar Tools
Align = 1 'Align Top
Height = 390
Left = 0
TabIndex = 5
Top = 0
Width = 4170
_ExtentX = 7355
_ExtentY = 688
ImageList = "ImgIcons"
BeginProperty Buttons {0713E452-850A-101B-AFC0-4210102A8DA7}
NumButtons = 5
BeginProperty Button1 {0713F354-850A-101B-AFC0-4210102A8DA7}
Style = 3
EndProperty
BeginProperty Button2 {0713F354-850A-101B-AFC0-4210102A8DA7}
Object.ToolTipText = "Call"
ImageIndex = 4
EndProperty
BeginProperty Button3 {0713F354-850A-101B-AFC0-4210102A8DA7}
Enabled = 0 'False
Object.ToolTipText = "Hangup"
ImageIndex = 5
EndProperty
BeginProperty Button4 {0713F354-850A-101B-AFC0-4210102A8DA7}
Style = 3
EndProperty
BeginProperty Button5 {0713F354-850A-101B-AFC0-4210102A8DA7}
Object.ToolTipText = "Auto Answering"
ImageIndex = 1
Style = 1
Value = 1
EndProperty
EndProperty
End
Begin MSWinsockLib.Winsock TCPSocket
Index = 0
Left = 3720
Top = 3600
_ExtentX = 741
_ExtentY = 741
End
Begin ComctlLib.ImageList ImgIcons
Left = 4290
Top = 2070
_ExtentX = 1005
_ExtentY = 1005
BackColor = -2147483643
ImageWidth = 16
ImageHeight = 16
BeginProperty Images {0713E8C2-850A-101B-AFC0-4210102A8DA7}
NumListImages = 11
BeginProperty ListImage1 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":0EA0
Key = ""
EndProperty
BeginProperty ListImage2 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":11BA
Key = ""
EndProperty
BeginProperty ListImage3 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":14D4
Key = ""
EndProperty
BeginProperty ListImage4 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":17EE
Key = ""
EndProperty
BeginProperty ListImage5 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":1B08
Key = ""
EndProperty
BeginProperty ListImage6 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":1E22
Key = ""
EndProperty
BeginProperty ListImage7 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":213C
Key = ""
EndProperty
BeginProperty ListImage8 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":2456
Key = ""
EndProperty
BeginProperty ListImage9 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":2770
Key = ""
EndProperty
BeginProperty ListImage10 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":2A8A
Key = ""
EndProperty
BeginProperty ListImage11 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
Picture = "chat.frx":2DA4
Key = ""
EndProperty
EndProperty
End
End
Attribute VB_Name = "frmChat"
Attribute VB_Base = "0{0E3A2BAD-DE40-11CF-8FDF-D0AF03C10000}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_TemplateDerived = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Public CLOSINGAPPLICATION As Boolean ' Application status flag
Public wStream As Object
'--------------------------------------------------------------
Private Sub cmdTalk_Click() ' Activates Audio PlayBack
'--------------------------------------------------------------
Dim rc As Long ' Return Code Variable
Dim iPort As Integer ' Local Port
Dim itm As Integer ' Current listitem
'--------------------------------------------------------------
If (Not wStream.Playing And wStream.PlayDeviceFree And _
Not wStream.Recording And wStream.RecDeviceFree) Then ' Validate Audio Device Status
wStream.Playing = True ' Turn Playing Status On
cmdTalk.Caption = "&Playing" ' Modify Button Status Caption
Screen.MousePointer = vbHourglass ' Set Pointer To HourGlass
iPort = wStream.StreamInQueue
Do While (iPort <> NULLPORTID) ' While socket ports have data to playback
inLight.Picture = ImgIcons.ListImages(speakON).Picture ' Flash playback image
inLight.Refresh ' Repaint picture image
For itm = 0 To ConnectionList.ListCount - 1 ' Search for listitem currently playing sound data
If (ConnectionList.ItemData(itm) = iPort) Then ' If a match is found...
ConnectionList.TopIndex = itm ' Set that listitem to top of listbox
ConnectionList.Selected(itm) = True ' Select listitem to show who is currently talking...
Exit For ' Quit listitem search
End If
Next ' Check next listitem
rc = wStream.PlayWave(Me.hWnd, iPort) ' Play wave data in iPort...
Call wStream.RemoveStreamFromQueue(iPort) ' Remove PortID From PlayWave Queue
iPort = wStream.StreamInQueue
inLight.Picture = ImgIcons.ListImages(speakOFF).Picture ' Show done talking image...
inLight.Refresh ' Repaint image...
Loop ' Search for next socket in playback queue
ConnectionList.TopIndex = 0 ' Reset top image...
If (ConnectionList.ListCount > 0) Then
ConnectionList.Selected(0) = True ' Deselect previously listitem
ConnectionList.Selected(0) = False ' Deselect currently selected listitem
End If
Screen.MousePointer = vbDefault ' Set Pointer To Normal
cmdTalk.Caption = "&Talk" ' Modify Button Status Caption
wStream.Playing = False ' Turn Playing Status Off
End If
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
'--------------------------------------------------------------
Private Sub cmdTalk_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
' Activates Audio Recording...
'--------------------------------------------------------------
Dim rc As Long ' Return Code Variable
'--------------------------------------------------------------
If (Not wStream.Playing And _
Not wStream.Recording And _
wStream.RecDeviceFree And _
wStream.PlayDeviceFree) Then ' Check Audio Device Status
wStream.Recording = True ' Set Recording Flag
cmdTalk.Caption = "&Talking" ' Update Button Status To "Talking"
Screen.MousePointer = vbHourglass ' Set Hourglass
outLight.Picture = ImgIcons.ListImages(mikeON).Picture ' Show outgoing message image
outLight.Refresh ' Repaint image
rc = wStream.RecordWave(Me.hWnd, TCPSocket) ' Record voice and send to all connected sockets
outLight.Picture = ImgIcons.ListImages(mikeOFF).Picture ' Show done image
outLight.Refresh ' Repaint image
Screen.MousePointer = vbDefault ' Reset Mouse Pointer
cmdTalk.Caption = "&Talk" ' Reset Button Status
If Not wStream.Playing And _
wStream.PlayDeviceFree And _
wStream.RecDeviceFree Then ' Is Audio Device Free?
Call cmdTalk_Click ' Active Playback Of Any Inbound Messages...
End If
End If
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
Private Sub cmdTalk_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
wStream.Recording = False ' Stop Recording
End Sub
Private Sub connectionlist_Click()
Tools.Buttons(tbHANGUP).Enabled = True
End Sub
'--------------------------------------------------------------
Private Sub ConnectionList_DblClick()
'--------------------------------------------------------------
Dim MemberID As String ' (Server)(TCPidx)(RemoteIP)
Dim Idx As Long ' TCP idx
'--------------------------------------------------------------
If (ConnectionList.Text = "") Then Exit Sub
MemberID = ConnectionList.List(ConnectionList.ListIndex) ' Get The Conversation MemberID String From List Box
Call GetIdxFromMemberID(TCPSocket, MemberID, Idx) ' Get TCP idx From Member ID
Call RemoveConnectionFromList(TCPSocket(Idx), ConnectionList) ' Clear ListBox Entry(s)...
Call Disconnect(TCPSocket(Idx)) ' Disconnect Socket Connection
Unload TCPSocket(Idx) ' Destroy socket instance
cmdTalk.Enabled = (ConnectionList.ListCount > 0) ' Enable/Disable Talk Button...
Tools.Buttons(tbHANGUP).Enabled = (ConnectionList.Text <> "")
If Not cmdTalk.Enabled Then
inLight.Picture = ImgIcons.ListImages(speakNO).Picture
outLight.Picture = ImgIcons.ListImages(mikeNO).Picture
End If
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
'--------------------------------------------------------------
Private Sub Form_Load()
'--------------------------------------------------------------
Dim rc As Long ' Return Code Variable
Dim Idx As Long ' Current TCP idx variable
Dim TCPidx As Long ' Newly created TCP idx value
'--------------------------------------------------------------
CLOSINGAPPLICATION = False ' Set status to not closing
Call InitServerList(txtServer) ' Get Common Servers List
txtServer.Text = txtServer.List(0) ' Display First Name In The List
imgStatus = ImgIcons.ListImages(phoneHungUp).Picture ' Change Icon To Phone HungUp
Set wStream = CreateObject("WaveStreaming.WaveStream")
Call wStream.InitACMCodec(WAVE_FORMAT_GSM610, TIMESLICE)
' Call wStream.InitACMCodec(WAVE_FORMAT_ADPCM, TIMESLICE)
' Call wStream.InitACMCodec(WAVE_FORMAT_MSN_AUDIO, TIMESLICE)
' Call wStream.InitACMCodec(WAVE_FORMAT_PCM, TIMESLICE)
cmdTalk.Enabled = False ' Disable Until Connect
Tools.Buttons(tbHANGUP).Enabled = (ConnectionList.Text <> "")
inLight.Picture = ImgIcons.ListImages(speakNO).Picture
outLight.Picture = ImgIcons.ListImages(mikeNO).Picture
Call Listen(TCPSocket(0)) ' Listen For TCP Connection
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
'--------------------------------------------------------------
Private Sub Form_Unload(Cancel As Integer)
'--------------------------------------------------------------
Dim Idx As Long ' TCP socket index
Dim Socket As Winsock ' TCP socket control
'--------------------------------------------------------------
CLOSINGAPPLICATION = True ' Set status flag to closing...
For Each Socket In TCPSocket ' For each socket instance
Call Disconnect(Socket) ' Close connection/listen
Next ' Next Cntl
Set wStream = Nothing
End ' End Program
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
'--------------------------------------------------------------
Private Sub TCPSocket_Close(Index As Integer)
' Closing Current TCP Connection...
'--------------------------------------------------------------
Call RemoveConnectionFromList(TCPSocket(Index), ConnectionList) ' Remove Connection From List
Call Disconnect(TCPSocket(Index)) ' Close Port Connection...
cmdTalk.Enabled = (ConnectionList.ListCount > 0) ' Enable/Disable Talk Button...
If Not cmdTalk.Enabled Then
inLight.Picture = ImgIcons.ListImages(speakNO).Picture
outLight.Picture = ImgIcons.ListImages(mikeNO).Picture
End If
Tools.Buttons(tbHANGUP).Enabled = (ConnectionList.Text <> "")
If cmdTalk.Enabled Then
imgStatus = ImgIcons.ListImages(phoneHungUp).Picture ' Show Phone HungUp Icon...
End If
Unload TCPSocket(Index) ' Destroy socket instance
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
'--------------------------------------------------------------
Private Sub TCPSocket_Connect(Index As Integer)
' TCP Connection Has Been Accepted And Is Open...
'--------------------------------------------------------------
Call AddConnectionToList(TCPSocket(Index), ConnectionList) ' Add New Connection To List
imgStatus = ImgIcons.ListImages(phoneRingIng).Picture ' Show Phone Ringing Icon
Call ResPlaySound(RingOutId)
imgStatus = ImgIcons.ListImages(phoneAnswered).Picture ' Show Phone Answered Icon
cmdTalk.Enabled = True ' Enabled For Connection...
Tools.Buttons(tbHANGUP).Enabled = (ConnectionList.Text <> "")
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
'--------------------------------------------------------------
Private Sub TCPSocket_ConnectionRequest(Index As Integer, ByVal requestID As Long)
' Accepting Inbound TCP Connection Request...
'--------------------------------------------------------------
Dim rc As Long
Dim Idx As Long
Dim RemHost As String
'--------------------------------------------------------------
If (TCPSocket(Index).RemoteHost <> "") Then
RemHost = UCase(TCPSocket(Index).RemoteHost)
Else
RemHost = UCase(TCPSocket(Index).RemoteHostIP)
End If
If (Tools.Buttons(tbAUTOANSWER).Value = tbrUnpressed) Then
rc = MsgBox("Incomming call from [" & RemHost & "]..." & vbCrLf & _
"Do you wish to answer?", vbYesNo) ' Prompt user to answer...
Else
rc = vbYes
End If
If (rc = vbYes) Then
Idx = InstanceTCP(TCPSocket) ' Instance TCP Control...
If (Idx > 0) Then ' Validate that control instance was created...
TCPSocket(Idx).LocalPort = 0 ' Set local port to 0, in order to get next available port.
Call TCPSocket(Idx).Accept(requestID) ' Accept connection
Call AddConnectionToList(TCPSocket(Idx), ConnectionList) ' Add New Connection To List
imgStatus = ImgIcons.ListImages(phoneRingIng).Picture ' Show Phone Ringing Icon
Call ResPlaySound(RingInId)
imgStatus = ImgIcons.ListImages(phoneAnswered).Picture ' Show Phone Answered Icon
cmdTalk.Enabled = True ' Enabled For Connection...
Tools.Buttons(tbHANGUP).Enabled = (ConnectionList.Text <> "")
End If
End If
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
'--------------------------------------------------------------
Private Sub TCPSocket_DataArrival(Index As Integer, ByVal BytesTotal As Long)
' Incomming Buffer On...
'--------------------------------------------------------------
Dim rc As Long ' Return Code Variable
Dim WaveData() As Byte ' Byte array of wave data
Static ExBytes(MAXTCP) As Long ' Extra bytes in frame buffer
Static ExData(MAXTCP) As Variant ' Extra bytes from frame buffer
'--------------------------------------------------------------
With wStream
If (TCPSocket(Index).BytesReceived > 0) Then ' Validate that bytes where actually received
Do While (TCPSocket(Index).BytesReceived > 0) ' While data available...
If (ExBytes(Index) = 0) Then ' Was there leftover data from last time
If (.waveChunkSize <= TCPSocket(Index).BytesReceived) Then ' Can we get and entire wave buffer of data
Call TCPSocket(Index).GetData(WaveData, vbByte + vbArray, .waveChunkSize) ' Get 1 wave buffer of data
Call .SaveStreamBuffer(Index, WaveData) ' Save wave data to buffer
Call .AddStreamToQueue(Index) ' Queue current stream for playback
Else
ExBytes(Index) = TCPSocket(Index).BytesReceived ' Save Extra bytes
Call TCPSocket(Index).GetData(ExData(Index), vbByte + vbArray, ExBytes(Index)) ' Get Extra data
End If
Else
Call TCPSocket(Index).GetData(WaveData, vbByte + vbArray, .waveChunkSize - ExBytes(Index)) ' Get leftover bits
ExData(Index) = MidB(ExData(Index), 1) & MidB(WaveData, 1) ' Sync wave bits...
Call .SaveStreamBuffer(Index, ExData(Index)) ' Save the current wave data to the wave buffer
Call .AddStreamToQueue(Index) ' Queue the current wave stream
ExBytes(Index) = 0 ' Clear Extra byte count
ExData(Index) = "" ' Clear Extra data buffer
End If
Loop ' Look for next Data Chunk
If (Not .Playing And .PlayDeviceFree And _
Not .Recording And .RecDeviceFree) Then ' Check Audio Device Status
Call cmdTalk_Click ' Start PlayBack...
End If
End If
End With
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------
Private Sub TCPSocket_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
TCPSocket(Index).Close ' Close down socket
Debug.Print "TCPSocket_Error: Number:", Number
Debug.Print "TCPSocket_Error: Scode:", Hex(Scode)
Debug.Print "TCPSocket_Error: Source:", Source
Debug.Print "TCPSocket_Error: HelpFile:", HelpFile
Debug.Print "TCPSocket_Error: HelpContext:", HelpContext
Debug.Print "TCPSocket_Error: Description:", Description
Call DebugSocket(TCPSocket(Index))
End Sub
'--------------------------------------------------------------
Private Sub Tools_ButtonClick(ByVal Button As Button)
'--------------------------------------------------------------
Dim rc As Long ' Return Code Variable
Dim Idx As Long ' TCP Socket control index
Dim LocalPort As Long ' LocalPort Setting
Dim RemotePort As Long ' RemotePort Setting
'--------------------------------------------------------------
Select Case Button.Index
Case tbCALL
Idx = InstanceTCP(TCPSocket) ' Instance TCP Control...
If (Idx > 0) Then ' Did control instance get created???
Button.Enabled = False ' Disable Connect Button
ConnectionList.Enabled = False ' Disable connection list box
On Error Resume Next
If Not Connect(TCPSocket(Idx), txtServer.Text, VOICEPORT) Then ' Attempt to connect
Unload TCPSocket(Idx) ' Connect failed unload control instance
End If
ConnectionList.Enabled = True ' Renable connection list box
Button.Enabled = True ' Enable Connect Button
End If
Case tbHANGUP
ConnectionList_DblClick
Case tbAUTOANSWER
If (Button.Value = tbrPressed) Then
Button.Image = phoneHungUp
Else
Button.Image = phoneAnswered
End If
End Select
End Sub
'--------------------------------------------------------------
Private Sub txtServer_KeyPress(KeyAscii As Integer)
'--------------------------------------------------------------
Dim Conn As Long ' Index counter
'--------------------------------------------------------------
If (KeyAscii = vbKeyReturn) Then ' If Return Key Was Pressed...
For Conn = 0 To txtServer.ListCount ' Search Each Entry In ListBox
If (UCase(txtServer.Text) = UCase(txtServer.List(Conn))) Then Exit Sub
Next ' If Found Then Exit
txtServer.AddItem UCase(txtServer.Text) ' Add Server To List
End If
'--------------------------------------------------------------
End Sub
'--------------------------------------------------------------