ConnectionRequestedEventArgs ConnectionRequestedEventArgs ConnectionRequestedEventArgs ConnectionRequestedEventArgs Class

Contains properties that are passed to an application with the ConnectionRequested event.

Syntax

Declaration

public sealed class ConnectionRequestedEventArgspublic sealed class ConnectionRequestedEventArgsPublic NotInheritable Class ConnectionRequestedEventArgspublic sealed class ConnectionRequestedEventArgs

Remarks

Examples

var started = false;

// Click event for "Advertise" button.
function advertiseForPeers(launchedFromTap) {
    Windows.Networking.Proximity.PeerFinder.displayName = displayNameTextBox.Text;

    if (Windows.Networking.Proximity.PeerFinder.supportedDiscoveryTypes &
        Windows.Networking.Proximity.PeerDiscoveryTypes.triggered) {

        Windows.Networking.Proximity.PeerFinder.addEventListener(
            "triggeredconnectionstatechanged", triggeredConnectionStateChanged);

        id("messageDiv").innerHTML +=
            "You can tap to connect a peer device that is " +
            "also advertising for a connection.<br />";
    } else {
        id("messageDiv").innerHTML +=
      "Tap to connect is not supported.<br />";
    }

    if (!launchedFromTap) {
        if (!(Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes &
              Windows.Networking.Proximity.PeerDiscoveryTypes.Browse)) {
            id("messageDiv").innerHTML +=
                "Peer discovery using Wi-Fi Direct is not supported.<br />";
        }
    }

    if (!started) {
        Windows.Networking.Proximity.PeerFinder.start();
        started = true;
    }
}

function triggeredConnectionStateChanged(e) {
    if (e.state === Windows.Networking.Proximity.TriggeredConnectState.peerFound) {
        id("messageDiv").innerHTML +=
            "Peer found. You may now pull your devices out of proximity.<br />";
    }
    if (e.state === Windows.Networking.Proximity.TriggeredConnectState.completed) {
        id("messageDiv").innerHTML += "Connected. You may now send a message.<br />";
        sendMessage(e.socket);
    }
}


// Click event for "Browse" button.
function findPeers() {
    if (Windows.Networking.Proximity.PeerFinder.supportedDiscoveryTypes &
        Windows.Networking.Proximity.PeerDiscoveryTypes.browse) {

        Windows.Networking.Proximity.PeerFinder.findAllPeersAsync().done(
    function (peerInfoCollection) {
        if (peerInfoCollection.length > 0) {
            // Connect to first peer found - example only.
            // In your app, provide the user with a list of available peers.
            connectToPeer(peerInfoCollection[0]);
        }
    },
    function (err) {
        id("messageDiv").innerHTML += "Error finding peers: " + err + "<br />";
    });
    } else {
        id("messageDiv").innerHTML +=
  "Peer discovery using Wi-Fi Direct is not supported.<br />";
    }
}

function connectToPeer(peerInfo) {
    id("messageDiv").innerHTML += ("Peer found. Connecting to " + peerInfo.displayName + "<br />");
    Windows.Networking.Proximity.PeerFinder.connectAsync(peerInfo).done(
        function (socket) {
            id("messageDiv").innerHTML += "Connection successful. You may now send messages.<br />";
            sendMessage(socket);
        },
        function (err) {
            id("messageDiv").innerHTML += "Connection failed: " + err + "<br />";
        });

    requestingPeer = null;
}

function stopFindingPeers() {
    Windows.Networking.Proximity.PeerFinder.stop();
    started = false;
    if (proximitySocket != null) { closeSocket(); }
}

// Handle external connection requests.
var requestingPeer;

function connectionRequested(e) {
    id("messageDiv").innerHTML +=
        "Connection requested by " + e.peerInformation.DisplayName + ". " +
        "Click 'Accept Connection' to connect.";
    requestingPeer = e.PeerInformation;
}

function acceptConnection() {
    if (requestingPeer == null) {
        id("messageDiv").innerHTML += "No peer connection has been requested.";
        return;
    }

    connectToPeer(requestingPeer);
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    DisplayNameTextBox.Text = Windows.Networking.Proximity.PeerFinder.DisplayName;
    Windows.Networking.Proximity.PeerFinder.ConnectionRequested += ConnectionRequested;

    // If activated from launch or from the background, create a peer connection.
    var args = e.Parameter as Windows.ApplicationModel.Activation.LaunchActivatedEventArgs;
    if (args != null && args.Kind == Windows.ApplicationModel.Activation.ActivationKind.Launch)
    {
        if (args.Arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket")
        {
            AdvertiseForPeersButton_Click(null, null);
        }
    }
}

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    if (_started)
    {
        // Detach the callback handler (there can only be one PeerConnectProgress handler).
        Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged -= TriggeredConnectionStateChanged;
        // Detach the incoming connection request event handler.
        Windows.Networking.Proximity.PeerFinder.ConnectionRequested -= ConnectionRequested;
        Windows.Networking.Proximity.PeerFinder.Stop();
        CloseSocket();
        _started = false;
    }
}

// Write a message to MessageBlock on the UI thread.
private Windows.UI.Core.CoreDispatcher messageDispatcher = Window.Current.CoreWindow.Dispatcher;

async private void WriteMessageText(string message, bool overwrite = false)
{
    await messageDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
        () =>
        {
            if (overwrite)
                MessageBlock.Text = message;
            else
                MessageBlock.Text += message;
        });
}

bool _started = false;

// Click event handler for "Advertise" button.
private void AdvertiseForPeersButton_Click(object sender, RoutedEventArgs e)
{
    if (_started) 
    {
        WriteMessageText("You are already advertising for a connection.\n");
        return; 
    }

    Windows.Networking.Proximity.PeerFinder.DisplayName = DisplayNameTextBox.Text;

    if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes &
         Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered) ==
         Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered)
    {
        Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged +=
            TriggeredConnectionStateChanged;

        WriteMessageText("You can tap to connect a peer device that is " +
                         "also advertising for a connection.\n");
    }
    else
    {
        WriteMessageText("Tap to connect is not supported.\n");
    }

    if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes &
         Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) !=
         Windows.Networking.Proximity.PeerDiscoveryTypes.Browse)
    {
        WriteMessageText("Peer discovery using Wi-Fi Direct is not supported.\n");
    }

   Windows.Networking.Proximity.PeerFinder.Start();
   _started = true;
}

private void TriggeredConnectionStateChanged(
    object sender,
    Windows.Networking.Proximity.TriggeredConnectionStateChangedEventArgs e)
{
    if (e.State == Windows.Networking.Proximity.TriggeredConnectState.PeerFound)
    {
        WriteMessageText("Peer found. You may now pull your devices out of proximity.\n");
    }
    if (e.State == Windows.Networking.Proximity.TriggeredConnectState.Completed)
    {
        WriteMessageText("Connected. You may now send a message.\n");
        SendMessage(e.Socket);
    }
}

// Click event handler for "Browse" button.
async private void FindPeersButton_Click(object sender, RoutedEventArgs e)
{
    if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes &
         Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) !=
         Windows.Networking.Proximity.PeerDiscoveryTypes.Browse)
    {
        WriteMessageText("Peer discovery using Wi-Fi Direct is not supported.\n");
        return;
    }

    try
    {
        var peerInfoCollection = await Windows.Networking.Proximity.PeerFinder.FindAllPeersAsync();
        if (peerInfoCollection.Count > 0)
        {
            // Connect to first peer found - example only.
            // In your app, provide the user with a list of available peers.
            ConnectToPeer(peerInfoCollection[0]);
        }
    }
    catch (Exception err)
    {
        WriteMessageText("Error finding peers: " + err.Message + "\n");
    }
}

async private void ConnectToPeer(Windows.Networking.Proximity.PeerInformation peerInfo)
{
    WriteMessageText("Peer found. Connecting to " + peerInfo.DisplayName + "\n");
    try
    {
        Windows.Networking.Sockets.StreamSocket socket =
            await Windows.Networking.Proximity.PeerFinder.ConnectAsync(peerInfo);

        WriteMessageText("Connection successful. You may now send messages.\n");
        SendMessage(socket);
    }
    catch (Exception err)
    {
        WriteMessageText("Connection failed: " + err.Message + "\n");
    }

    requestingPeer = null;
}

// Click event handler for "Stop" button.
private void StopFindingPeersButton_Click(object sender, RoutedEventArgs e)
{
    _started = false;
    Windows.Networking.Proximity.PeerFinder.Stop();
    if (proximitySocket != null) { CloseSocket(); }
}

// Handle external connection requests.
Windows.Networking.Proximity.PeerInformation requestingPeer;

private void ConnectionRequested(object sender,
    Windows.Networking.Proximity.ConnectionRequestedEventArgs e)
{
    requestingPeer = e.PeerInformation;
    WriteMessageText("Connection requested by " + requestingPeer.DisplayName + ". " +
        "Click 'Accept Connection' to connect.");
}

private void AcceptConnectionButton_Click(object sender, RoutedEventArgs e)
{
    if (requestingPeer == null)
    {
        WriteMessageText("No peer connection has been requested.");
        return;
    }

    ConnectToPeer(requestingPeer);
}
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
    DisplayNameTextBox.Text = Windows.Networking.Proximity.PeerFinder.DisplayName
    AddHandler Windows.Networking.Proximity.PeerFinder.ConnectionRequested, AddressOf ConnectionRequested

    ' If activated from launch or from the background, create a peer connection.
    Dim args = TryCast(e.Parameter, Windows.ApplicationModel.Activation.LaunchActivatedEventArgs)
    If args IsNot Nothing AndAlso args.Kind = Windows.ApplicationModel.Activation.ActivationKind.Launch Then

        If args.Arguments = "Windows.Networking.Proximity.PeerFinder:StreamSocket" Then
            AdvertiseForPeersButton_Click()
        End If
    End If
End Sub

Protected Overrides Sub OnNavigatingFrom(e As Navigation.NavigatingCancelEventArgs)
    If _started Then
        ' Detach the callback handler (there can only be one PeerConnectProgress handler).
        RemoveHandler Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged, AddressOf TriggeredConnectionStateChanged
        ' Detach the incoming connection request event handler.
        RemoveHandler Windows.Networking.Proximity.PeerFinder.ConnectionRequested, AddressOf ConnectionRequested
        Windows.Networking.Proximity.PeerFinder.Stop()
        CloseSocket()
        _started = False
    End If
End Sub

' Write a message to MessageBlock on the UI thread.
Private Async Sub WriteMessageText(message As String, Optional overwrite As Boolean = False)
    Await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
        Sub()
            If overwrite Then
                MessageBlock.Text = message
            Else
                MessageBlock.Text &= message
            End If
        End Sub)
End Sub

Private _started As Boolean = False

' Click event handler for "Advertise" button.
Private Sub AdvertiseForPeersButton_Click()

    If _started Then
        WriteMessageText("You are already advertising for a connection." & vbCrLf)
        Return
    End If

    Windows.Networking.Proximity.PeerFinder.DisplayName = DisplayNameTextBox.Text

    If ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes And
         Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered) =
         Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered) Then

        AddHandler Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged,
            AddressOf TriggeredConnectionStateChanged

        WriteMessageText("You can tap to connect a peer device that is " &
                         "also advertising for a connection." & vbCrLf)
    Else
        WriteMessageText("Tap to connect is not supported." & vbCrLf)
    End If

    If (Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes And
        Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) <>
        Windows.Networking.Proximity.PeerDiscoveryTypes.Browse Then

        WriteMessageText("Peer discovery using Wifi-Direct is not supported." & vbCrLf)
    End If

    Windows.Networking.Proximity.PeerFinder.Start()
    _started = True
End Sub

Private Sub TriggeredConnectionStateChanged(
    sender As Object,
    e As Windows.Networking.Proximity.TriggeredConnectionStateChangedEventArgs)

    If e.State = Windows.Networking.Proximity.TriggeredConnectState.PeerFound Then

        WriteMessageText("Peer found. You may now pull your devices out of proximity." & vbCrLf)
    End If

    If e.State = Windows.Networking.Proximity.TriggeredConnectState.Completed Then
        WriteMessageText("Connected. You may now send a message." & vbCrLf)
        SendMessage(e.Socket)
    End If
End Sub

' Click event handler for "Browse" button.
Private Async Sub FindPeersButton_Click()
    If (Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes And
        Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) <>
        Windows.Networking.Proximity.PeerDiscoveryTypes.Browse Then

        WriteMessageText("Peer discovery using Wifi-Direct is not supported." & vbCrLf)
        Return
    End If

    Try
        Dim peerInfoCollection = Await Windows.Networking.Proximity.PeerFinder.FindAllPeersAsync()
        If peerInfoCollection.Count > 0 Then
            ' Connect to first peer found - example only.
            ' In your app, provide the user with a list of available peers.
            ConnectToPeer(peerInfoCollection(0))
        End If
    Catch err As Exception
        WriteMessageText("Error finding peers: " & err.Message & vbCrLf)
    End Try
End Sub

Private Async Sub ConnectToPeer(peerInfo As Windows.Networking.Proximity.PeerInformation)

    WriteMessageText("Peer found. Connecting to " & peerInfo.DisplayName & vbCrLf)
    Try
        Dim socket = Await Windows.Networking.Proximity.PeerFinder.ConnectAsync(peerInfo)

        WriteMessageText("Connection successful. You may now send messages." & vbCrLf)
        SendMessage(socket)
    Catch err As Exception
        WriteMessageText("Connection failed: " & err.Message & vbCrLf)
    End Try

    requestingPeer = Nothing
End Sub

' Click event handler for "Stop" button.
Private Sub StopFindingPeersButton_Click()

    _started = False
    Windows.Networking.Proximity.PeerFinder.Stop()
    If proximitySocket IsNot Nothing Then CloseSocket()
End Sub

' Handle external connection requests.
Private requestingPeer As Windows.Networking.Proximity.PeerInformation

Private Sub ConnectionRequested(sender As Object,
    e As Windows.Networking.Proximity.ConnectionRequestedEventArgs)

    requestingPeer = e.PeerInformation

    WriteMessageText("Connection requested by " & requestingPeer.DisplayName & ". " &
        "Click 'Accept Connection' to connect.")
End Sub

Private Sub AcceptConnectionButton_Click()
    If requestingPeer Is Nothing Then
        WriteMessageText("No peer connection has been requested.")
        Return
    End If

    ConnectToPeer(requestingPeer)
End Sub

Properties summary

Gets the information for a peer that's requesting a connection.

Properties

  • PeerInformation
    PeerInformation
    PeerInformation
    PeerInformation

    Gets the information for a peer that's requesting a connection.

    public PeerInformation PeerInformation { get; }public PeerInformation PeerInformation { get; }Public ReadOnly Property PeerInformation As PeerInformationpublic PeerInformation PeerInformation { get; }

    Property Value

    Remarks

    Pass this reference to the ConnectAsync(PeerInformation) method to accept the request.

    Examples

    var started = false;
    
    // Click event for "Advertise" button.
    function advertiseForPeers(launchedFromTap) {
        Windows.Networking.Proximity.PeerFinder.displayName = displayNameTextBox.Text;
    
        if (Windows.Networking.Proximity.PeerFinder.supportedDiscoveryTypes &
            Windows.Networking.Proximity.PeerDiscoveryTypes.triggered) {
    
            Windows.Networking.Proximity.PeerFinder.addEventListener(
                "triggeredconnectionstatechanged", triggeredConnectionStateChanged);
    
            id("messageDiv").innerHTML +=
                "You can tap to connect a peer device that is " +
                "also advertising for a connection.<br />";
        } else {
            id("messageDiv").innerHTML +=
          "Tap to connect is not supported.<br />";
        }
    
        if (!launchedFromTap) {
            if (!(Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes &
                  Windows.Networking.Proximity.PeerDiscoveryTypes.Browse)) {
                id("messageDiv").innerHTML +=
                    "Peer discovery using Wi-Fi Direct is not supported.<br />";
            }
        }
    
        if (!started) {
            Windows.Networking.Proximity.PeerFinder.start();
            started = true;
        }
    }
    
    function triggeredConnectionStateChanged(e) {
        if (e.state === Windows.Networking.Proximity.TriggeredConnectState.peerFound) {
            id("messageDiv").innerHTML +=
                "Peer found. You may now pull your devices out of proximity.<br />";
        }
        if (e.state === Windows.Networking.Proximity.TriggeredConnectState.completed) {
            id("messageDiv").innerHTML += "Connected. You may now send a message.<br />";
            sendMessage(e.socket);
        }
    }
    
    
    // Click event for "Browse" button.
    function findPeers() {
        if (Windows.Networking.Proximity.PeerFinder.supportedDiscoveryTypes &
            Windows.Networking.Proximity.PeerDiscoveryTypes.browse) {
    
            Windows.Networking.Proximity.PeerFinder.findAllPeersAsync().done(
        function (peerInfoCollection) {
            if (peerInfoCollection.length > 0) {
                // Connect to first peer found - example only.
                // In your app, provide the user with a list of available peers.
                connectToPeer(peerInfoCollection[0]);
            }
        },
        function (err) {
            id("messageDiv").innerHTML += "Error finding peers: " + err + "<br />";
        });
        } else {
            id("messageDiv").innerHTML +=
      "Peer discovery using Wi-Fi Direct is not supported.<br />";
        }
    }
    
    function connectToPeer(peerInfo) {
        id("messageDiv").innerHTML += ("Peer found. Connecting to " + peerInfo.displayName + "<br />");
        Windows.Networking.Proximity.PeerFinder.connectAsync(peerInfo).done(
            function (socket) {
                id("messageDiv").innerHTML += "Connection successful. You may now send messages.<br />";
                sendMessage(socket);
            },
            function (err) {
                id("messageDiv").innerHTML += "Connection failed: " + err + "<br />";
            });
    
        requestingPeer = null;
    }
    
    function stopFindingPeers() {
        Windows.Networking.Proximity.PeerFinder.stop();
        started = false;
        if (proximitySocket != null) { closeSocket(); }
    }
    
    // Handle external connection requests.
    var requestingPeer;
    
    function connectionRequested(e) {
        id("messageDiv").innerHTML +=
            "Connection requested by " + e.peerInformation.DisplayName + ". " +
            "Click 'Accept Connection' to connect.";
        requestingPeer = e.PeerInformation;
    }
    
    function acceptConnection() {
        if (requestingPeer == null) {
            id("messageDiv").innerHTML += "No peer connection has been requested.";
            return;
        }
    
        connectToPeer(requestingPeer);
    }
    
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        DisplayNameTextBox.Text = Windows.Networking.Proximity.PeerFinder.DisplayName;
        Windows.Networking.Proximity.PeerFinder.ConnectionRequested += ConnectionRequested;
    
        // If activated from launch or from the background, create a peer connection.
        var args = e.Parameter as Windows.ApplicationModel.Activation.LaunchActivatedEventArgs;
        if (args != null && args.Kind == Windows.ApplicationModel.Activation.ActivationKind.Launch)
        {
            if (args.Arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket")
            {
                AdvertiseForPeersButton_Click(null, null);
            }
        }
    }
    
    protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
        if (_started)
        {
            // Detach the callback handler (there can only be one PeerConnectProgress handler).
            Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged -= TriggeredConnectionStateChanged;
            // Detach the incoming connection request event handler.
            Windows.Networking.Proximity.PeerFinder.ConnectionRequested -= ConnectionRequested;
            Windows.Networking.Proximity.PeerFinder.Stop();
            CloseSocket();
            _started = false;
        }
    }
    
    // Write a message to MessageBlock on the UI thread.
    private Windows.UI.Core.CoreDispatcher messageDispatcher = Window.Current.CoreWindow.Dispatcher;
    
    async private void WriteMessageText(string message, bool overwrite = false)
    {
        await messageDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
            () =>
            {
                if (overwrite)
                    MessageBlock.Text = message;
                else
                    MessageBlock.Text += message;
            });
    }
    
    bool _started = false;
    
    // Click event handler for "Advertise" button.
    private void AdvertiseForPeersButton_Click(object sender, RoutedEventArgs e)
    {
        if (_started) 
        {
            WriteMessageText("You are already advertising for a connection.\n");
            return; 
        }
    
        Windows.Networking.Proximity.PeerFinder.DisplayName = DisplayNameTextBox.Text;
    
        if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes &
             Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered) ==
             Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered)
        {
            Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged +=
                TriggeredConnectionStateChanged;
    
            WriteMessageText("You can tap to connect a peer device that is " +
                             "also advertising for a connection.\n");
        }
        else
        {
            WriteMessageText("Tap to connect is not supported.\n");
        }
    
        if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes &
             Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) !=
             Windows.Networking.Proximity.PeerDiscoveryTypes.Browse)
        {
            WriteMessageText("Peer discovery using Wi-Fi Direct is not supported.\n");
        }
    
       Windows.Networking.Proximity.PeerFinder.Start();
       _started = true;
    }
    
    private void TriggeredConnectionStateChanged(
        object sender,
        Windows.Networking.Proximity.TriggeredConnectionStateChangedEventArgs e)
    {
        if (e.State == Windows.Networking.Proximity.TriggeredConnectState.PeerFound)
        {
            WriteMessageText("Peer found. You may now pull your devices out of proximity.\n");
        }
        if (e.State == Windows.Networking.Proximity.TriggeredConnectState.Completed)
        {
            WriteMessageText("Connected. You may now send a message.\n");
            SendMessage(e.Socket);
        }
    }
    
    // Click event handler for "Browse" button.
    async private void FindPeersButton_Click(object sender, RoutedEventArgs e)
    {
        if ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes &
             Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) !=
             Windows.Networking.Proximity.PeerDiscoveryTypes.Browse)
        {
            WriteMessageText("Peer discovery using Wi-Fi Direct is not supported.\n");
            return;
        }
    
        try
        {
            var peerInfoCollection = await Windows.Networking.Proximity.PeerFinder.FindAllPeersAsync();
            if (peerInfoCollection.Count > 0)
            {
                // Connect to first peer found - example only.
                // In your app, provide the user with a list of available peers.
                ConnectToPeer(peerInfoCollection[0]);
            }
        }
        catch (Exception err)
        {
            WriteMessageText("Error finding peers: " + err.Message + "\n");
        }
    }
    
    async private void ConnectToPeer(Windows.Networking.Proximity.PeerInformation peerInfo)
    {
        WriteMessageText("Peer found. Connecting to " + peerInfo.DisplayName + "\n");
        try
        {
            Windows.Networking.Sockets.StreamSocket socket =
                await Windows.Networking.Proximity.PeerFinder.ConnectAsync(peerInfo);
    
            WriteMessageText("Connection successful. You may now send messages.\n");
            SendMessage(socket);
        }
        catch (Exception err)
        {
            WriteMessageText("Connection failed: " + err.Message + "\n");
        }
    
        requestingPeer = null;
    }
    
    // Click event handler for "Stop" button.
    private void StopFindingPeersButton_Click(object sender, RoutedEventArgs e)
    {
        _started = false;
        Windows.Networking.Proximity.PeerFinder.Stop();
        if (proximitySocket != null) { CloseSocket(); }
    }
    
    // Handle external connection requests.
    Windows.Networking.Proximity.PeerInformation requestingPeer;
    
    private void ConnectionRequested(object sender,
        Windows.Networking.Proximity.ConnectionRequestedEventArgs e)
    {
        requestingPeer = e.PeerInformation;
        WriteMessageText("Connection requested by " + requestingPeer.DisplayName + ". " +
            "Click 'Accept Connection' to connect.");
    }
    
    private void AcceptConnectionButton_Click(object sender, RoutedEventArgs e)
    {
        if (requestingPeer == null)
        {
            WriteMessageText("No peer connection has been requested.");
            return;
        }
    
        ConnectToPeer(requestingPeer);
    }
    
    Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
        DisplayNameTextBox.Text = Windows.Networking.Proximity.PeerFinder.DisplayName
        AddHandler Windows.Networking.Proximity.PeerFinder.ConnectionRequested, AddressOf ConnectionRequested
    
        ' If activated from launch or from the background, create a peer connection.
        Dim args = TryCast(e.Parameter, Windows.ApplicationModel.Activation.LaunchActivatedEventArgs)
        If args IsNot Nothing AndAlso args.Kind = Windows.ApplicationModel.Activation.ActivationKind.Launch Then
    
            If args.Arguments = "Windows.Networking.Proximity.PeerFinder:StreamSocket" Then
                AdvertiseForPeersButton_Click()
            End If
        End If
    End Sub
    
    Protected Overrides Sub OnNavigatingFrom(e As Navigation.NavigatingCancelEventArgs)
        If _started Then
            ' Detach the callback handler (there can only be one PeerConnectProgress handler).
            RemoveHandler Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged, AddressOf TriggeredConnectionStateChanged
            ' Detach the incoming connection request event handler.
            RemoveHandler Windows.Networking.Proximity.PeerFinder.ConnectionRequested, AddressOf ConnectionRequested
            Windows.Networking.Proximity.PeerFinder.Stop()
            CloseSocket()
            _started = False
        End If
    End Sub
    
    ' Write a message to MessageBlock on the UI thread.
    Private Async Sub WriteMessageText(message As String, Optional overwrite As Boolean = False)
        Await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
            Sub()
                If overwrite Then
                    MessageBlock.Text = message
                Else
                    MessageBlock.Text &= message
                End If
            End Sub)
    End Sub
    
    Private _started As Boolean = False
    
    ' Click event handler for "Advertise" button.
    Private Sub AdvertiseForPeersButton_Click()
    
        If _started Then
            WriteMessageText("You are already advertising for a connection." & vbCrLf)
            Return
        End If
    
        Windows.Networking.Proximity.PeerFinder.DisplayName = DisplayNameTextBox.Text
    
        If ((Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes And
             Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered) =
             Windows.Networking.Proximity.PeerDiscoveryTypes.Triggered) Then
    
            AddHandler Windows.Networking.Proximity.PeerFinder.TriggeredConnectionStateChanged,
                AddressOf TriggeredConnectionStateChanged
    
            WriteMessageText("You can tap to connect a peer device that is " &
                             "also advertising for a connection." & vbCrLf)
        Else
            WriteMessageText("Tap to connect is not supported." & vbCrLf)
        End If
    
        If (Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes And
            Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) <>
            Windows.Networking.Proximity.PeerDiscoveryTypes.Browse Then
    
            WriteMessageText("Peer discovery using Wifi-Direct is not supported." & vbCrLf)
        End If
    
        Windows.Networking.Proximity.PeerFinder.Start()
        _started = True
    End Sub
    
    Private Sub TriggeredConnectionStateChanged(
        sender As Object,
        e As Windows.Networking.Proximity.TriggeredConnectionStateChangedEventArgs)
    
        If e.State = Windows.Networking.Proximity.TriggeredConnectState.PeerFound Then
    
            WriteMessageText("Peer found. You may now pull your devices out of proximity." & vbCrLf)
        End If
    
        If e.State = Windows.Networking.Proximity.TriggeredConnectState.Completed Then
            WriteMessageText("Connected. You may now send a message." & vbCrLf)
            SendMessage(e.Socket)
        End If
    End Sub
    
    ' Click event handler for "Browse" button.
    Private Async Sub FindPeersButton_Click()
        If (Windows.Networking.Proximity.PeerFinder.SupportedDiscoveryTypes And
            Windows.Networking.Proximity.PeerDiscoveryTypes.Browse) <>
            Windows.Networking.Proximity.PeerDiscoveryTypes.Browse Then
    
            WriteMessageText("Peer discovery using Wifi-Direct is not supported." & vbCrLf)
            Return
        End If
    
        Try
            Dim peerInfoCollection = Await Windows.Networking.Proximity.PeerFinder.FindAllPeersAsync()
            If peerInfoCollection.Count > 0 Then
                ' Connect to first peer found - example only.
                ' In your app, provide the user with a list of available peers.
                ConnectToPeer(peerInfoCollection(0))
            End If
        Catch err As Exception
            WriteMessageText("Error finding peers: " & err.Message & vbCrLf)
        End Try
    End Sub
    
    Private Async Sub ConnectToPeer(peerInfo As Windows.Networking.Proximity.PeerInformation)
    
        WriteMessageText("Peer found. Connecting to " & peerInfo.DisplayName & vbCrLf)
        Try
            Dim socket = Await Windows.Networking.Proximity.PeerFinder.ConnectAsync(peerInfo)
    
            WriteMessageText("Connection successful. You may now send messages." & vbCrLf)
            SendMessage(socket)
        Catch err As Exception
            WriteMessageText("Connection failed: " & err.Message & vbCrLf)
        End Try
    
        requestingPeer = Nothing
    End Sub
    
    ' Click event handler for "Stop" button.
    Private Sub StopFindingPeersButton_Click()
    
        _started = False
        Windows.Networking.Proximity.PeerFinder.Stop()
        If proximitySocket IsNot Nothing Then CloseSocket()
    End Sub
    
    ' Handle external connection requests.
    Private requestingPeer As Windows.Networking.Proximity.PeerInformation
    
    Private Sub ConnectionRequested(sender As Object,
        e As Windows.Networking.Proximity.ConnectionRequestedEventArgs)
    
        requestingPeer = e.PeerInformation
    
        WriteMessageText("Connection requested by " & requestingPeer.DisplayName & ". " &
            "Click 'Accept Connection' to connect.")
    End Sub
    
    Private Sub AcceptConnectionButton_Click()
        If requestingPeer Is Nothing Then
            WriteMessageText("No peer connection has been requested.")
            Return
        End If
    
        ConnectToPeer(requestingPeer)
    End Sub
    

Device family

Windows 10 (introduced v10.0.10240.0)

API contract

Windows.Foundation.UniversalApiContract (introduced v1)

Capabilities

ID_CAP_PROXIMITY [Windows Phone] ID_CAP_PROXIMITY [Windows Phone]
proximity

Attributes

Windows.Foundation.Metadata.ContractVersionAttribute
Windows.Foundation.Metadata.MarshalingBehaviorAttribute

Details

Assembly

Windows.Networking.Proximity.dll