public void StartDiscovery(string serviceId, TimeSpan?advertisingTimeout, IDiscoveryListener listener)
 {
     Misc.CheckNotNull <string>(serviceId, nameof(serviceId));
     Misc.CheckNotNull <IDiscoveryListener>(listener, nameof(listener));
     using (NativeEndpointDiscoveryListenerHelper discoveryListener = NativeNearbyConnectionsClient.ToDiscoveryListener(listener))
         this.mManager.StartDiscovery(serviceId, NativeNearbyConnectionsClient.ToTimeoutMillis(advertisingTimeout), discoveryListener);
 }
 public void StartAdvertising(string name, List <string> appIdentifiers, TimeSpan?advertisingDuration, Action <AdvertisingResult> resultCallback, Action <ConnectionRequest> requestCallback)
 {
     Misc.CheckNotNull <List <string> >(appIdentifiers, nameof(appIdentifiers));
     Misc.CheckNotNull <Action <AdvertisingResult> >(resultCallback, nameof(resultCallback));
     Misc.CheckNotNull <Action <ConnectionRequest> >(requestCallback, "connectionRequestCallback");
     if (advertisingDuration.HasValue && advertisingDuration.Value.Ticks < 0L)
     {
         throw new InvalidOperationException("advertisingDuration must be positive");
     }
     resultCallback  = Callbacks.AsOnGameThreadCallback <AdvertisingResult>(resultCallback);
     requestCallback = Callbacks.AsOnGameThreadCallback <ConnectionRequest>(requestCallback);
     this.mManager.StartAdvertising(name, appIdentifiers.Select <string, NativeAppIdentifier>(new Func <string, NativeAppIdentifier>(NativeAppIdentifier.FromString)).ToList <NativeAppIdentifier>(), NativeNearbyConnectionsClient.ToTimeoutMillis(advertisingDuration), (Action <long, NativeStartAdvertisingResult>)((localClientId, result) => resultCallback(result.AsResult())), (Action <long, NativeConnectionRequest>)((localClientId, request) => requestCallback(request.AsRequest())));
 }