다음을 통해 공유


PeerFinder.Role 속성

정의

피어 투 피어 연결에서 앱의 역할을 가져오거나 설정합니다.

public:
 static property PeerRole Role { PeerRole get(); void set(PeerRole value); };
static PeerRole Role();

static void Role(PeerRole value);
public static PeerRole Role { get; set; }
var peerRole = PeerFinder.role;
PeerFinder.role = peerRole;
Public Shared Property Role As PeerRole

속성 값

피어 투 피어 연결에서 앱의 역할입니다.

Windows 요구 사항

앱 기능
ID_CAP_NETWORKING [Windows Phone] ID_CAP_NETWORKING [Windows Phone] proximity ID_CAP_PROXIMITY [Windows Phone]

예제

// Default to the peer role.
Windows.Networking.Proximity.PeerRole appRole = Windows.Networking.Proximity.PeerRole.Peer;
bool launchedByTap = false;

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    LaunchActivatedEventArgs launchArgs = e.Parameter as LaunchActivatedEventArgs;

    if (launchArgs.Arguments.Contains("Windows.Networking.Proximity.PeerFinder:StreamSocket"))
    {
        launchedByTap = true;

        if (launchArgs.Arguments.Contains("Role=Host"))
        {
            appRole = Windows.Networking.Proximity.PeerRole.Host;
        }
        else if (launchArgs.Arguments.Contains("Role=Client"))
        {
            appRole = Windows.Networking.Proximity.PeerRole.Client;
        }
        else
        {
            appRole = Windows.Networking.Proximity.PeerRole.Peer;
        }
    }
}

bool started = false;

// Click event for "Advertise" button.
void AdvertiseForPeers(object sender, RoutedEventArgs e)
{
    if (!started)
    {
        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");
        }

        // Set the peer role selected by the user.  
        if (launchedByTap)
        {
            Windows.Networking.Proximity.PeerFinder.Role = appRole;
        }
        else
        {
            switch (GetRoleFromUser())
            {
                case "Peer":
                    Windows.Networking.Proximity.PeerFinder.Role =
                        Windows.Networking.Proximity.PeerRole.Peer;
                    break;
                case "Host":
                    Windows.Networking.Proximity.PeerFinder.Role =
                        Windows.Networking.Proximity.PeerRole.Host;
                    break;
                case "Client":
                    Windows.Networking.Proximity.PeerFinder.Role =
                        Windows.Networking.Proximity.PeerRole.Client;
                    break;
            }
        }

        // Set discoveryData property with user supplied text. 
        var discData = GetDiscoveryDataFromUser();
        var writer = new Windows.Storage.Streams.DataWriter(
            new Windows.Storage.Streams.InMemoryRandomAccessStream());
        writer.WriteString(discData);
        Windows.Networking.Proximity.PeerFinder.DiscoveryData =
            writer.DetachBuffer();

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

// 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;
        });
}

설명

Role 속성은 다중 피어 앱 연결에서 피어 앱이 호스트 또는 클라이언트인지 또는 피어 앱이 피어로 2 피어 연결에 참여하는지 여부를 식별하는 데 사용됩니다. 다중 피어 앱 연결의 경우 Start 메서드를 호출하기 전에 Role 속성을 설정해야 합니다. Role 속성이 설정되지 않은 경우 기본값은 Peer입니다.

다중 피어 앱 시나리오에서 역할은 연결할 앱의 기능을 식별합니다. 호스트 앱은 최대 5개의 클라이언트 앱에 연결할 수 있습니다. 호스트 앱은 클라이언트 앱으로 보급하는 앱만 검색할 수 있습니다. 클라이언트 앱은 호스트 앱으로 보급하는 앱만 검색할 수 있습니다. 피어 역할은 두 개의 앱 시나리오를 식별합니다. 따라서 피어 앱은 다른 피어 앱만 검색할 수 있습니다. 탭 제스처를 사용하여 연결된 피어 앱에 동일한 규칙이 적용됩니다. 예를 들어 호스트 앱으로 광고하는 앱은 를 탭하여 클라이언트 앱으로 광고하는 앱과만 연결할 수 있습니다.

적용 대상

추가 정보