Public Class NetComExampleStreamsForm
    Inherits System.Windows.Forms.Form

#Region "Private Members"
    'netcom client
    Private mNetComClient As MNetCom.MNetComClient

    'callback delegates
    Private mNetcomSECallback As MNetCom.MNC_SECallback
    Private mNetcomSTCallback As MNetCom.MNC_STCallback
    Private mNetcomTTCallback As MNetCom.MNC_TTCallback
    Private mNetcomCSCCallback As MNetCom.MNC_CSCCallback
    Private mNetcomEVCallback As MNetCom.MNC_EVCallback
    Private mNetcomVTCallback As MNetCom.MNC_VTCallback

    'Needed for proper UI updating in a multi-threaded application
    Private Delegate Sub AsyncRecordLogUpdate(ByRef updateText As String)

    'cheetah object list holders
    Private mCheetahObjectList As List(Of String)
    Private mCheetahTypesList As List(Of String)
#End Region

#Region "Constructor"
    Public Sub New()
        MyBase.New()

        'initialize class vars
        Me.mNetComClient = New MNetCom.MNetComClient

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

        'extra UI setup
        Me.btnDisconnect.Enabled = False
        Me.grpRecordLog.Enabled = False
        Me.grpStreamProps.Enabled = False

        'Set the logfile name
        If Not Me.mNetComClient.SetLogFileName(Application.StartupPath.ToString() & "\NetComExampleStreamsLogfile.txt") Then
            MessageBox.Show(Me, "Call to set the logfile name failed", "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        End If

        'register the callback functions
        Me.mNetcomSECallback = New MNetCom.MNC_SECallback(AddressOf NetComCallbackSE)
        Me.mNetComClient.SetCallbackFunctionSE(Me.mNetcomSECallback, Me)
        Me.mNetcomSTCallback = New MNetCom.MNC_STCallback(AddressOf NetComCallbackST)
        Me.mNetComClient.SetCallbackFunctionST(Me.mNetcomSTCallback, Me)
        Me.mNetcomTTCallback = New MNetCom.MNC_TTCallback(AddressOf NetComCallbackTT)
        Me.mNetComClient.SetCallbackFunctionTT(Me.mNetcomTTCallback, Me)
        Me.mNetcomCSCCallback = New MNetCom.MNC_CSCCallback(AddressOf NetComCallbackCSC)
        Me.mNetComClient.SetCallbackFunctionCSC(Me.mNetcomCSCCallback, Me)
        Me.mNetcomEVCallback = New MNetCom.MNC_EVCallback(AddressOf NetComCallbackEV)
        Me.mNetComClient.SetCallbackFunctionEV(Me.mNetcomEVCallback, Me)
        Me.mNetcomVTCallback = New MNetCom.MNC_VTCallback(AddressOf NetComCallbackVT)
        Me.mNetComClient.SetCallbackFunctionVT(Me.mNetcomVTCallback, Me)

    End Sub
#End Region

#Region " Windows Form Designer generated code "
    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents lblServerNameComment As System.Windows.Forms.Label
    Friend WithEvents txtServerName As System.Windows.Forms.TextBox
    Friend WithEvents btnDisconnect As System.Windows.Forms.Button
    Friend WithEvents btnConnect As System.Windows.Forms.Button
    Friend WithEvents lblServerName As System.Windows.Forms.Label
    Friend WithEvents grpStreamProps As System.Windows.Forms.GroupBox
    Friend WithEvents lblCheetahObjects As System.Windows.Forms.Label
    Friend WithEvents cmbCheetahObjects As System.Windows.Forms.ComboBox
    Friend WithEvents lblObjectType As System.Windows.Forms.Label
    Friend WithEvents lblObjectTypeString As System.Windows.Forms.Label
    Friend WithEvents lblObjectCountNum As System.Windows.Forms.Label
    Friend WithEvents lblObjectCount As System.Windows.Forms.Label
    Friend WithEvents grpRecordLog As System.Windows.Forms.GroupBox
    Friend WithEvents lbRecordLog As System.Windows.Forms.ListBox
    Friend WithEvents btnObjectRefresh As System.Windows.Forms.Button
    Friend WithEvents btnOpenStream As System.Windows.Forms.Button
    Friend WithEvents btnCloseStream As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.lblServerNameComment = New System.Windows.Forms.Label
        Me.txtServerName = New System.Windows.Forms.TextBox
        Me.btnDisconnect = New System.Windows.Forms.Button
        Me.btnConnect = New System.Windows.Forms.Button
        Me.lblServerName = New System.Windows.Forms.Label
        Me.grpStreamProps = New System.Windows.Forms.GroupBox
        Me.btnCloseStream = New System.Windows.Forms.Button
        Me.btnOpenStream = New System.Windows.Forms.Button
        Me.btnObjectRefresh = New System.Windows.Forms.Button
        Me.lblObjectCountNum = New System.Windows.Forms.Label
        Me.lblObjectCount = New System.Windows.Forms.Label
        Me.lblObjectTypeString = New System.Windows.Forms.Label
        Me.lblObjectType = New System.Windows.Forms.Label
        Me.cmbCheetahObjects = New System.Windows.Forms.ComboBox
        Me.lblCheetahObjects = New System.Windows.Forms.Label
        Me.grpRecordLog = New System.Windows.Forms.GroupBox
        Me.lbRecordLog = New System.Windows.Forms.ListBox
        Me.grpStreamProps.SuspendLayout()
        Me.grpRecordLog.SuspendLayout()
        Me.SuspendLayout()
        '
        'lblServerNameComment
        '
        Me.lblServerNameComment.Location = New System.Drawing.Point(136, 32)
        Me.lblServerNameComment.Name = "lblServerNameComment"
        Me.lblServerNameComment.Size = New System.Drawing.Size(208, 16)
        Me.lblServerNameComment.TabIndex = 21
        Me.lblServerNameComment.Text = "(User may enter pc name or IP address)"
        '
        'txtServerName
        '
        Me.txtServerName.Location = New System.Drawing.Point(96, 8)
        Me.txtServerName.Name = "txtServerName"
        Me.txtServerName.Size = New System.Drawing.Size(280, 20)
        Me.txtServerName.TabIndex = 20
        Me.txtServerName.Text = ""
        '
        'btnDisconnect
        '
        Me.btnDisconnect.Location = New System.Drawing.Point(464, 8)
        Me.btnDisconnect.Name = "btnDisconnect"
        Me.btnDisconnect.TabIndex = 19
        Me.btnDisconnect.Text = "Disconnect"
        '
        'btnConnect
        '
        Me.btnConnect.Location = New System.Drawing.Point(384, 8)
        Me.btnConnect.Name = "btnConnect"
        Me.btnConnect.TabIndex = 18
        Me.btnConnect.Text = "Connect"
        '
        'lblServerName
        '
        Me.lblServerName.Location = New System.Drawing.Point(16, 8)
        Me.lblServerName.Name = "lblServerName"
        Me.lblServerName.Size = New System.Drawing.Size(72, 16)
        Me.lblServerName.TabIndex = 17
        Me.lblServerName.Text = "Server Name"
        '
        'grpStreamProps
        '
        Me.grpStreamProps.Controls.Add(Me.btnCloseStream)
        Me.grpStreamProps.Controls.Add(Me.btnOpenStream)
        Me.grpStreamProps.Controls.Add(Me.btnObjectRefresh)
        Me.grpStreamProps.Controls.Add(Me.lblObjectCountNum)
        Me.grpStreamProps.Controls.Add(Me.lblObjectCount)
        Me.grpStreamProps.Controls.Add(Me.lblObjectTypeString)
        Me.grpStreamProps.Controls.Add(Me.lblObjectType)
        Me.grpStreamProps.Controls.Add(Me.cmbCheetahObjects)
        Me.grpStreamProps.Controls.Add(Me.lblCheetahObjects)
        Me.grpStreamProps.Location = New System.Drawing.Point(16, 64)
        Me.grpStreamProps.Name = "grpStreamProps"
        Me.grpStreamProps.Size = New System.Drawing.Size(520, 88)
        Me.grpStreamProps.TabIndex = 22
        Me.grpStreamProps.TabStop = False
        Me.grpStreamProps.Text = "Stream Properties"
        '
        'btnCloseStream
        '
        Me.btnCloseStream.Location = New System.Drawing.Point(192, 56)
        Me.btnCloseStream.Name = "btnCloseStream"
        Me.btnCloseStream.Size = New System.Drawing.Size(88, 23)
        Me.btnCloseStream.TabIndex = 8
        Me.btnCloseStream.Text = "Close Stream"
        '
        'btnOpenStream
        '
        Me.btnOpenStream.Location = New System.Drawing.Point(104, 56)
        Me.btnOpenStream.Name = "btnOpenStream"
        Me.btnOpenStream.Size = New System.Drawing.Size(80, 23)
        Me.btnOpenStream.TabIndex = 7
        Me.btnOpenStream.Text = "Open Stream"
        '
        'btnObjectRefresh
        '
        Me.btnObjectRefresh.Location = New System.Drawing.Point(16, 56)
        Me.btnObjectRefresh.Name = "btnObjectRefresh"
        Me.btnObjectRefresh.Size = New System.Drawing.Size(80, 23)
        Me.btnObjectRefresh.TabIndex = 6
        Me.btnObjectRefresh.Text = "Refresh List"
        '
        'lblObjectCountNum
        '
        Me.lblObjectCountNum.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
        Me.lblObjectCountNum.Location = New System.Drawing.Point(472, 29)
        Me.lblObjectCountNum.Name = "lblObjectCountNum"
        Me.lblObjectCountNum.Size = New System.Drawing.Size(32, 23)
        Me.lblObjectCountNum.TabIndex = 5
        '
        'lblObjectCount
        '
        Me.lblObjectCount.Location = New System.Drawing.Point(400, 32)
        Me.lblObjectCount.Name = "lblObjectCount"
        Me.lblObjectCount.Size = New System.Drawing.Size(72, 16)
        Me.lblObjectCount.TabIndex = 4
        Me.lblObjectCount.Text = "Object Count"
        '
        'lblObjectTypeString
        '
        Me.lblObjectTypeString.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
        Me.lblObjectTypeString.Location = New System.Drawing.Point(296, 29)
        Me.lblObjectTypeString.Name = "lblObjectTypeString"
        Me.lblObjectTypeString.Size = New System.Drawing.Size(88, 23)
        Me.lblObjectTypeString.TabIndex = 3
        '
        'lblObjectType
        '
        Me.lblObjectType.Location = New System.Drawing.Point(224, 32)
        Me.lblObjectType.Name = "lblObjectType"
        Me.lblObjectType.Size = New System.Drawing.Size(72, 16)
        Me.lblObjectType.TabIndex = 2
        Me.lblObjectType.Text = "Object Type"
        '
        'cmbCheetahObjects
        '
        Me.cmbCheetahObjects.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
        Me.cmbCheetahObjects.Location = New System.Drawing.Point(104, 30)
        Me.cmbCheetahObjects.Name = "cmbCheetahObjects"
        Me.cmbCheetahObjects.Size = New System.Drawing.Size(112, 21)
        Me.cmbCheetahObjects.TabIndex = 1
        '
        'lblCheetahObjects
        '
        Me.lblCheetahObjects.Location = New System.Drawing.Point(16, 32)
        Me.lblCheetahObjects.Name = "lblCheetahObjects"
        Me.lblCheetahObjects.Size = New System.Drawing.Size(88, 16)
        Me.lblCheetahObjects.TabIndex = 0
        Me.lblCheetahObjects.Text = "Cheetah Objects"
        '
        'grpRecordLog
        '
        Me.grpRecordLog.Controls.Add(Me.lbRecordLog)
        Me.grpRecordLog.Location = New System.Drawing.Point(16, 168)
        Me.grpRecordLog.Name = "grpRecordLog"
        Me.grpRecordLog.Size = New System.Drawing.Size(520, 240)
        Me.grpRecordLog.TabIndex = 23
        Me.grpRecordLog.TabStop = False
        Me.grpRecordLog.Text = "Record Log"
        '
        'lbRecordLog
        '
        Me.lbRecordLog.Location = New System.Drawing.Point(8, 16)
        Me.lbRecordLog.Name = "lbRecordLog"
        Me.lbRecordLog.Size = New System.Drawing.Size(504, 212)
        Me.lbRecordLog.TabIndex = 0
        '
        'NetComExampleStreamsForm
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(552, 422)
        Me.Controls.Add(Me.grpRecordLog)
        Me.Controls.Add(Me.grpStreamProps)
        Me.Controls.Add(Me.lblServerNameComment)
        Me.Controls.Add(Me.txtServerName)
        Me.Controls.Add(Me.btnDisconnect)
        Me.Controls.Add(Me.btnConnect)
        Me.Controls.Add(Me.lblServerName)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
        Me.Name = "NetComExampleStreamsForm"
        Me.Text = "NetCom Example - Streams"
        Me.grpStreamProps.ResumeLayout(False)
        Me.grpRecordLog.ResumeLayout(False)
        Me.ResumeLayout(False)

    End Sub

#End Region

#Region "Async UI Update"

    ''********************************************************************************************************************
    Private Sub RecordLogUpdate(ByRef updateText As String)
        Me.lbRecordLog.Items.Add(updateText)
        Me.lbRecordLog.SelectedItem = updateText
    End Sub

#End Region

#Region "UI Event Handlers"
    '****************************************************************************************************************
    '****************************************************************************************************************
    Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
        If Not Me.mNetComClient.AreWeConnected Then
            If Me.mNetComClient.ConnectToServer(Me.txtServerName.Text) Then
                Me.mNetComClient.SetApplicationName("NetCom Streams Example")

                'change ui to show connected status
                Me.txtServerName.Enabled = False
                Me.btnConnect.Enabled = False
                Me.btnDisconnect.Enabled = True
                Me.grpRecordLog.Enabled = True
                Me.grpStreamProps.Enabled = True

                'reset the array lists
                Me.mCheetahObjectList = New List(Of String)
                Me.mCheetahTypesList = New List(Of String)

                If Me.mNetComClient.GetDASObjectsAndTypes(Me.mCheetahObjectList, Me.mCheetahTypesList) Then
                    'load all object names into the combo box
                    For Each objectName As String In Me.mCheetahObjectList
                        Me.cmbCheetahObjects.Items.Add(objectName)
                    Next

                    'select the first object in the combo box, and update the ui
                    If Me.mCheetahObjectList.Count > 0 Then
                        Me.cmbCheetahObjects.SelectedIndex = 0
                        Me.lblObjectTypeString.Text = CType(Me.mCheetahTypesList.Item(0), String)
                        Me.lblObjectCountNum.Text = Me.mCheetahObjectList.Count.ToString()
                    End If
                Else

                    MessageBox.Show(Me, "Retrieval of Cheetah objects and types failed.  List must be refreshed.", "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
                End If

            Else
                MessageBox.Show(Me, "Connection to server failed", "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
            End If
        End If
    End Sub

    '****************************************************************************************************************
    '****************************************************************************************************************
    Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
        If Me.mNetComClient.AreWeConnected Then
            If Me.mNetComClient.DisconnectFromServer Then
                'change ui to show disconnected status
                Me.txtServerName.Enabled = True
                Me.btnConnect.Enabled = True
                Me.btnDisconnect.Enabled = False
                Me.cmbCheetahObjects.Items.Clear()
                Me.lbRecordLog.Items.Clear()
                Me.lblObjectCountNum.Text = ""
                Me.lblObjectTypeString.Text = ""
                Me.grpRecordLog.Enabled = False
                Me.grpStreamProps.Enabled = False
            Else
                MessageBox.Show(Me, "Disconnection from server failed", "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
            End If
        End If
    End Sub

    '****************************************************************************************************************
    '****************************************************************************************************************
    Private Sub btnObjectRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnObjectRefresh.Click


        'reset the cheetah lists
        Me.cmbCheetahObjects.Items.Clear()
        Me.mCheetahObjectList = New List(Of String)
        Me.mCheetahTypesList = New List(Of String)

        If Me.mNetComClient.GetDASObjectsAndTypes(Me.mCheetahObjectList, Me.mCheetahTypesList) Then
            'load all object names into the combo box
            For Each objectName As String In Me.mCheetahObjectList
                Me.cmbCheetahObjects.Items.Add(objectName)
            Next

            'select the first object in the combo box, and update the ui
            If Me.mCheetahObjectList.Count > 0 Then
                Me.cmbCheetahObjects.SelectedIndex = 0
                Me.lblObjectTypeString.Text = CType(Me.mCheetahTypesList.Item(0), String)
                Me.lblObjectCountNum.Text = Me.mCheetahObjectList.Count.ToString()
            End If
        Else

            MessageBox.Show(Me, "Retrieval of Cheetah objects and types failed.  List must be refreshed.", "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        End If

    End Sub

    '****************************************************************************************************************
    '****************************************************************************************************************
    Private Sub btnOpenStream_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenStream.Click

        Dim curIndex As Integer = Me.cmbCheetahObjects.SelectedIndex
        'ensure something is selected to open
        If curIndex = -1 Then
            MessageBox.Show(Me, "No object selected for stream open", "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
            Return
        End If

        'get the strings from the object list
        Dim curCheetahObject As String = CType(Me.mCheetahObjectList.Item(curIndex), String)
        Dim curCheetahType As String = CType(Me.mCheetahTypesList.Item(curIndex), String)

        If Not (mNetComClient.OpenStream(curCheetahObject)) Then
            MessageBox.Show(Me, "Could not open stream for ObjectName: " & curCheetahObject & " Type: " & curCheetahType, "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        End If

    End Sub

    '****************************************************************************************************************
    '****************************************************************************************************************
    Private Sub btnCloseStream_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCloseStream.Click

        Dim curIndex As Integer = Me.cmbCheetahObjects.SelectedIndex

        'ensure something is selected to close
        If curIndex = -1 Then
            MessageBox.Show(Me, "No object selected for stream close", "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
            Return
        End If

        'get the strings from the object list
        Dim curCheetahObject As String = CType(Me.mCheetahObjectList.Item(curIndex), String)
        Dim curCheetahType As String = CType(Me.mCheetahTypesList.Item(curIndex), String)

        If Not (mNetComClient.CloseStream(curCheetahObject)) Then
            MessageBox.Show(Me, "Could not close stream for ObjectName: " & curCheetahObject & " Type: " & curCheetahType, "NetCom Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        End If
    End Sub

    '****************************************************************************************************************
    '****************************************************************************************************************
    Private Sub cmbCheetahObjects_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbCheetahObjects.SelectedIndexChanged
        Dim curIndex As Integer = Me.cmbCheetahObjects.SelectedIndex
        If curIndex = -1 Then
            Return
        Else
            Me.lblObjectTypeString.Text = CType(Me.mCheetahTypesList(curIndex), String)
        End If

    End Sub
#End Region

#Region "NetCom Callback Functions"
    ''********************************************************************************************************************
    ''********************************************************************************************************************
    Private Sub NetComCallbackSE(ByVal sender As Object, ByVal records As MNetCom.MSERec, ByVal numRecords As Integer, ByVal objectName As String)


        'since we passed the Me pointer to the callback object, we can assume thet sender
        'is of type NetComExampleStreamsForm.  
        Dim thisClass As NetComExampleStreamsForm = CType(sender, NetComExampleStreamsForm)

        'add the object name to the textbox
        Dim msgString As String
        msgString = "Received SE Record For: " & objectName & " at Cheetah TS " & records.qwTimeStamp.ToString()

        Dim RecordLogUpdateDelegate As New AsyncRecordLogUpdate(AddressOf RecordLogUpdate)
        Me.lbRecordLog.BeginInvoke(RecordLogUpdateDelegate, New Object() {msgString})

    End Sub

    ''********************************************************************************************************************
    ''********************************************************************************************************************
    Private Sub NetComCallbackST(ByVal sender As Object, ByVal records As MNetCom.MSTRec, ByVal numRecords As Integer, ByVal objectName As String)


        'since we passed the Me pointer to the callback object, we can assume thet sender
        'is of type NetComExampleStreamsForm.  
        Dim thisClass As NetComExampleStreamsForm = CType(sender, NetComExampleStreamsForm)

        'add the object name to the textbox
        Dim msgString As String
        msgString = "Received ST Record For: " & objectName & " at Cheetah TS " & records.qwTimeStamp.ToString()

        Dim RecordLogUpdateDelegate As New AsyncRecordLogUpdate(AddressOf RecordLogUpdate)
        Me.lbRecordLog.BeginInvoke(RecordLogUpdateDelegate, New Object() {msgString})

    End Sub

    ''********************************************************************************************************************
    ''********************************************************************************************************************
    Private Sub NetComCallbackTT(ByVal sender As Object, ByVal records As MNetCom.MTTRec, ByVal numRecords As Integer, ByVal objectName As String)


        'since we passed the Me pointer to the callback object, we can assume thet sender
        'is of type NetComExampleStreamsForm.  
        Dim thisClass As NetComExampleStreamsForm = CType(sender, NetComExampleStreamsForm)

        'add the object name to the textbox
        Dim msgString As String
        msgString = "Received TT Record For: " & objectName & " at Cheetah TS " & records.qwTimeStamp.ToString()

        Dim RecordLogUpdateDelegate As New AsyncRecordLogUpdate(AddressOf RecordLogUpdate)
        Me.lbRecordLog.BeginInvoke(RecordLogUpdateDelegate, New Object() {msgString})

    End Sub

    ''********************************************************************************************************************
    ''********************************************************************************************************************
    Private Sub NetComCallbackCSC(ByVal sender As Object, ByVal records As MNetCom.MCRRec, ByVal numRecords As Integer, ByVal objectName As String)


        'since we passed the Me pointer to the callback object, we can assume thet sender
        'is of type NetComExampleStreamsForm.  
        Dim thisClass As NetComExampleStreamsForm = CType(sender, NetComExampleStreamsForm)

        'add the object name to the textbox
        Dim msgString As String
        msgString = "Received CSC Record For: " & objectName & " at Cheetah TS " & records.qwTimeStamp.ToString()

        Dim RecordLogUpdateDelegate As New AsyncRecordLogUpdate(AddressOf RecordLogUpdate)
        Me.lbRecordLog.BeginInvoke(RecordLogUpdateDelegate, New Object() {msgString})

    End Sub

    ''********************************************************************************************************************
    ''********************************************************************************************************************
    Private Sub NetComCallbackEV(ByVal sender As Object, ByVal records As MNetCom.MEventRec, ByVal numRecords As Integer, ByVal objectName As String)


        'since we passed the Me pointer to the callback object, we can assume thet sender
        'is of type NetComExampleStreamsForm.  
        Dim thisClass As NetComExampleStreamsForm = CType(sender, NetComExampleStreamsForm)

        'add the object name to the textbox
        Dim msgString As String
        msgString = "Received Event Record For: " & objectName & " at Cheetah TS " & records.qwTimeStamp.ToString()

        Dim RecordLogUpdateDelegate As New AsyncRecordLogUpdate(AddressOf RecordLogUpdate)
        Me.lbRecordLog.BeginInvoke(RecordLogUpdateDelegate, New Object() {msgString})

    End Sub

    ''********************************************************************************************************************
    ''********************************************************************************************************************
    Private Sub NetComCallbackVT(ByVal sender As Object, ByVal records As MNetCom.MVideoRec, ByVal numRecords As Integer, ByVal objectName As String)


        'since we passed the Me pointer to the callback object, we can assume thet sender
        'is of type NetComExampleStreamsForm.  
        Dim thisClass As NetComExampleStreamsForm = CType(sender, NetComExampleStreamsForm)

        'add the object name to the textbox
        Dim msgString As String
        msgString = "Received Video Record For: " & objectName & " at Cheetah TS " & records.qwTimeStamp.ToString()

        Dim RecordLogUpdateDelegate As New AsyncRecordLogUpdate(AddressOf RecordLogUpdate)
        Me.lbRecordLog.BeginInvoke(RecordLogUpdateDelegate, New Object() {msgString})

    End Sub
#End Region

    
End Class
