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

📄 connectionmanager.vb

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

Public Class ConnectionManager

    Private messageWindow As New ConnectionManagerMessageWindow(Me)
    Private connectionInfo As NativeMethods.CONNMGR_CONNECTIONINFO = New NativeMethods.CONNMGR_CONNECTIONINFO
    Private handle As IntPtr

    Public Sub New()
        Me.connectionInfo.cbSize = Marshal.SizeOf(Me.connectionInfo)
        Me.connectionInfo.dwFlags = NativeMethods.CONNMGR_FLAG.NO_ERROR_MSGS
        Me.connectionInfo.dwParams = NativeMethods.CONNMGR_PARAM.GUIDDESTNET
        Me.connectionInfo.dwPriority = ConnectionPriority.HighPriorityBackground
        Me.connectionInfo.hWnd = messageWindow.Hwnd
        Me.connectionInfo.uMsg = ConnectionManagerMessageWindow.WM_ConnectionManager
    End Sub

    Public Event ConnectionStatusChanged As ConnectionStatusChangedEventHandler

    Friend Sub OnConnectionStatusChanged(ByVal e As ConnectionStatusChangedEventArgs)
        RaiseEvent ConnectionStatusChanged(e)
    End Sub

    Public Sub EstablishConnection(ByVal destination As Guid)
        Me.ReleaseConnection()
        Me.connectionInfo.guidDestNet = destination
        Dim hresult As Integer = NativeMethods.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 = NativeMethods.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 = NativeMethods.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 = NativeMethods.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 = NativeMethods.ConnMgrConnectionStatus(Me.handle, status)
            End If
            Return status
        End Get
    End Property

End Class

Friend Class ConnectionManagerMessageWindow
    Inherits MessageWindow

    Private connectionManager As ConnectionManager
    Friend Shared WM_ConnectionManager As Integer = NativeMethods.RegisterWindowMessage("ConnectionManagerEvent")

    Friend Sub New(ByVal parent As ConnectionManager)
        Me.connectionManager = parent
    End Sub

    Protected Overrides Sub WndProc(ByRef m As Message)
        If (m.Msg = ConnectionManagerMessageWindow.WM_ConnectionManager) Then
            Dim status As ConnectionStatus = DirectCast(m.WParam.ToInt32, ConnectionStatus)
            Me.connectionManager.OnConnectionStatusChanged(New ConnectionStatusChangedEventArgs(status))
        End If
        MyBase.WndProc((m))
    End Sub


End Class


Public Delegate Sub ConnectionStatusChangedEventHandler(ByVal e As ConnectionStatusChangedEventArgs)


Public Class ConnectionStatusChangedEventArgs
    Inherits EventArgs

    Public Sub New(ByVal status As ConnectionStatus)
        m_connectionStatus = status
    End Sub

    Private m_connectionStatus As ConnectionStatus

    Public ReadOnly Property ConnectionStatus() As ConnectionStatus
        Get
            Return m_connectionStatus
        End Get
    End Property

End Class


Friend Class NativeMethods


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

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

    <DllImport("cellcore", SetLastError:=True)> _
    Friend 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)> _
    Friend Shared Function ConnMgrMapURL(ByVal pwszURL As String, <Out()> ByRef pguid As Guid, ByRef pdwIndex As Integer) As Integer
    End Function

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

    <DllImport("coredll", SetLastError:=True)> _
    Friend Shared Function RegisterWindowMessage(ByVal lpString As String) As Integer
    End Function

    <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 + -