⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connectionmanager.vb

📁 清华大学出版社出版的 移动应用开发宝典 张大威(2008)的附书源代码
💻 VB
字号:
Imports System.Runtime.InteropServices

Public Class ConnectionManager

    Private connectionInfo As CONNMGR_CONNECTIONINFO = New CONNMGR_CONNECTIONINFO
    Private handle As IntPtr

    Public Sub New()
        Me.connectionInfo.cbSize = Marshal.SizeOf(Me.connectionInfo)
        Me.connectionInfo.dwFlags = CONNMGR_FLAG.NO_ERROR_MSGS
        Me.connectionInfo.dwParams = CONNMGR_PARAM.GUIDDESTNET
        Me.connectionInfo.dwPriority = ConnectionPriority.HighPriorityBackground
    End Sub

    <DllImport("cellcore", SetLastError:=True)> _
    Private Shared Function ConnMgrConnectionStatus(ByVal hConnection As IntPtr, <Out()> ByRef pdwStatus As ConnectionStatus) As Integer
    End Function

    <DllImport("cellcore", SetLastError:=True)> _
    Private Shared Function ConnMgrEstablishConnection(ByRef pConnInfo As CONNMGR_CONNECTIONINFO, <Out()> ByRef phConnection As IntPtr) As Integer
    End Function

    <DllImport("cellcore", SetLastError:=True)> _
    Private Shared Function ConnMgrEstablishConnectionSync(ByRef pConnInfo As CONNMGR_CONNECTIONINFO, <Out()> ByRef phConnection As IntPtr, ByVal dwTimeout As Integer, <Out()> ByRef pdwStatus As ConnectionStatus) As Integer
    End Function

    <DllImport("cellcore", SetLastError:=True)> _
    Private Shared Function ConnMgrMapURL(ByVal pwszURL As String, <Out()> ByRef pguid As Guid, ByRef pdwIndex As Integer) As Integer
    End Function

    <DllImport("cellcore", SetLastError:=True)> _
    Private Shared Function ConnMgrReleaseConnection(ByVal hConnection As IntPtr, ByVal lCache As Integer) As Integer
    End Function

    Public Sub EstablishConnection(ByVal destination As Guid)
        Me.ReleaseConnection()
        Me.connectionInfo.guidDestNet = destination
        Dim hresult As Integer = ConnectionManager.ConnMgrEstablishConnection(Me.connectionInfo, Me.handle)
    End Sub

    Public Function EstablishConnectionSync(ByVal destination As Guid, ByVal timeout As TimeSpan) As ConnectionStatus
        Dim status As ConnectionStatus
        Me.ReleaseConnection()
        Dim hresult As Integer = ConnectionManager.ConnMgrEstablishConnectionSync(Me.connectionInfo, Me.handle, Convert.ToInt32(timeout.TotalMilliseconds), status)
        Return status
    End Function

    Public Shared Function MapUrl(ByVal url As Uri) As Guid()
        Dim al As New ArrayList
        Dim index As Integer = 0
        Dim hresult As Integer = 0
        Do While (hresult = 0)
            Dim g As Guid
            hresult = ConnectionManager.ConnMgrMapURL(url.ToString, g, index)
            If (hresult = 0) Then
                al.Add(g)
            End If
        Loop
        Return DirectCast(al.ToArray(GetType(Guid)), Guid())
    End Function

    Public Sub ReleaseConnection()
        If (Me.handle <> IntPtr.Zero) Then
            Dim hresult As Integer = ConnectionManager.ConnMgrReleaseConnection(Me.handle, 0)
            Me.handle = IntPtr.Zero
        End If
    End Sub

    Public ReadOnly Property ConnectionStatus() As ConnectionStatus
        Get
            Dim status As ConnectionStatus = ConnectionStatus.Unknown
            If (Me.handle <> IntPtr.Zero) Then
                Dim hresult As Integer = ConnectionManager.ConnMgrConnectionStatus(Me.handle, status)
            End If
            Return status
        End Get
    End Property


    <StructLayout(LayoutKind.Sequential)> _
    Friend Structure CONNMGR_CONNECTIONINFO

        Public cbSize As Integer
        Public dwParams As CONNMGR_PARAM
        Public dwFlags As CONNMGR_FLAG
        Public dwPriority As ConnectionPriority
        Public bExclusive As Integer
        Public bDisabled As Integer
        Public guidDestNet As Guid
        Public hWnd As IntPtr
        Public uMsg As UInt32
        Public lParam As UInt32
        Public ulMaxCost As UInt32
        Public ulMinRcvBw As UInt32
        Public ulMaxConnLatency As UInt32

    End Structure

    <Flags()> _
    Friend Enum CONNMGR_FLAG

        PROXY_HTTP = 1
        PROXY_WAP = 2
        PROXY_SOCKS4 = 4
        PROXY_SOCKS5 = 8
        SUSPEND_AWARE = &H10
        REGISTERED_HOME = &H20
        NO_ERROR_MSGS = &H40

    End Enum

    <Flags()> _
    Friend Enum CONNMGR_PARAM
        GUIDDESTNET = 1
        MAXCOST = 2
        MINRCVBW = 4
        MAXCONNLATENCY = 8
    End Enum

End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -