예제 #1
0
        private static void Main(string[] args)
        {
            var calculatorImp    = new CalculatorImp();
            var dispatcherThread = new DispatcherThread(Dispatcher.Run);

            dispatcherThread.Start();

            var server = new IpcServer <ICalculator>(calculatorImp, dispatcherThread.Dispatcher, IPAddress.Any, 62005, new JsonDotNetSerializer());

            server.ClientConnected    += OnClientConnected;
            server.ClientDisconnected += OnClientDisconnected;

            server.Listen();

            var multiCastAddress = IPAddress.Parse("239.0.0.222");
            var advertiser       = new ServiceAdvertiser <ICalculator>(multiCastAddress, 2222, TimeSpan.FromMilliseconds(1000));

            advertiser.OnAdvertisement += dt => Console.WriteLine("[{0}]", dt);

            Console.ReadLine();

            server.ClientDisconnected -= OnClientDisconnected;
            server.ClientConnected    -= OnClientConnected;


            advertiser.Dispose();
        }
        public ServiceAdvertiser GetAdvertiser(WFDSvcWrapperHandle handle)
        {
            ThrowIfDisposed();
            ServiceAdvertiser advertiser = advertiserCollection[handle];

            if (advertiser == null)
            {
                throw new Exception(String.Format(CultureInfo.InvariantCulture, "Advertiser not found for handle={0}", handle));
            }

            return(advertiser);
        }
        public WFDSvcWrapperHandle GetLastAdvertiserSession(
            ServiceAdvertiser advertiser,
            bool autoAccept
            )
        {
            WiFiDirectTestLogger.Log("Waiting for Advertiser to get session connection (Advertiser={0})", advertiser.Handle);
            if (autoAccept)
            {
                advertiser.WaitForAutoAcceptSessionConnected();
            }
            else
            {
                advertiser.WaitForSessionRequested();
            }

            WFDSvcWrapperHandle sessionHandle = advertiser.LastConnectedSession;

            return(sessionHandle);
        }
        public void UnPublishService(ServiceAdvertiser advertiser, bool fRemove = false)
        {
            ThrowIfDisposed();

            WFDSvcWrapperHandle handle = advertiser.Handle;

            WiFiDirectTestLogger.Log("Unpublishing advertiser (Advertiser={0} ServiceName={1})", handle, advertiser.Advertiser.ServiceName);

            advertiser.Advertiser.Stop();

            if (fRemove)
            {
                WiFiDirectTestLogger.Log("Removing advertiser (Advertiser={0} ServiceName={1})", handle, advertiser.Advertiser.ServiceName);
                advertiser.Dispose();

                advertiserCollection.Remove(handle);
            }

            WiFiDirectTestLogger.Log("Unpublish service done (Advertiser={0})", handle);
        }
예제 #5
0
        /// <summary>
        /// Stop and deinitialize native Obj-C side gracefully.
        /// </summary>
        private static void StopAndDeinitializeNative()
        {
#if (UNITY_IOS || UNITY_TVOS || UNITY_STANDALONE_OSX) && (!UNITY_EDITOR || UNITY_EDITOR_OSX || UNITY_EDITOR_OVERRIDE)
            if (_isDeinitialized)
            {
                return;
            }

            Session.StopSession();
            ServiceAdvertiser.StopAdvertising();
            CustomServiceAdvertiser.StopAdvertising();
            PeerDiscovery.CloseBrowser();
            CustomPeerDiscovery.StopDiscovery();
            NativeMethods.Events.UMC_UMCUnityEvents_SetEventListener(null);
            IntPtr error;
#if !UNITY_EDITOR_OSX && (UNITY_IOS || UNITY_TVOS)
            NativeMethods.UMCMediatorFacade.SetViewController(IntPtr.Zero, out error);
#else
            NativeMethods.UMCMediatorFacade.SetMainWindow(IntPtr.Zero, out error);
#endif
            _isDeinitialized = true;
#endif
        }
예제 #6
0
        private static void Main(string[] args)
        {
            var calculatorImp = new CalculatorImp();
            var dispatcherThread = new DispatcherThread(Dispatcher.Run);
            dispatcherThread.Start();

            var server = new IpcServer<ICalculator>(calculatorImp, dispatcherThread.Dispatcher, IPAddress.Any, 62005, new JsonDotNetSerializer());
            server.ClientConnected += OnClientConnected;
            server.ClientDisconnected += OnClientDisconnected;

            server.Listen();

            var multiCastAddress = IPAddress.Parse("239.0.0.222");
            var advertiser = new ServiceAdvertiser<ICalculator>(multiCastAddress, 2222, TimeSpan.FromMilliseconds(1000));
            advertiser.OnAdvertisement += dt => Console.WriteLine("[{0}]", dt);

            Console.ReadLine();

            server.ClientDisconnected -= OnClientDisconnected;
            server.ClientConnected -= OnClientConnected;


            advertiser.Dispose();
        }
        /// <summary>
        /// Start advertising a service
        /// </summary>
        /// <param name="serviceName"></param>
        /// <param name="autoAccept"></param>
        /// <param name="preferGO"></param>
        /// <param name="configMethods"></param>
        /// <param name="status"></param>
        /// <param name="customStatus"></param>
        /// <param name="serviceInfo"></param>
        /// <param name="deferredServiceInfo"></param>
        /// <returns></returns>
        public WFDSvcWrapperHandle PublishService(
            string serviceName,
            bool autoAccept = true,
            bool preferGO   = true,
            List <WiFiDirectServiceConfigurationMethod> configMethods = null,
            WiFiDirectServiceStatus status = WiFiDirectServiceStatus.Available,
            uint customStatus          = 0,
            string serviceInfo         = "",
            string deferredServiceInfo = "",
            List <String> prefixList   = null
            )
        {
            ThrowIfDisposed();

            WiFiDirectTestLogger.Log("Creating Service: \"{0}\"", serviceName);

            WiFiDirectServiceAdvertiser advertiser = new WiFiDirectServiceAdvertiser(serviceName);

            advertiser.AutoAcceptSession       = autoAccept;
            advertiser.PreferGroupOwnerMode    = preferGO;
            advertiser.ServiceStatus           = status;
            advertiser.CustomServiceStatusCode = customStatus;

            if (serviceInfo != null && serviceInfo.Length > 0)
            {
                using (var serviceInfoDataWriter = new Windows.Storage.Streams.DataWriter(new Windows.Storage.Streams.InMemoryRandomAccessStream()))
                {
                    serviceInfoDataWriter.WriteString(serviceInfo);
                    advertiser.ServiceInfo = serviceInfoDataWriter.DetachBuffer();
                }
                WiFiDirectTestLogger.Log("Included Service Info: \"{0}\"", WiFiDirectTestUtilities.GetTruncatedString(serviceInfo));
            }
            else
            {
                advertiser.ServiceInfo = null;
            }

            if (deferredServiceInfo != null && deferredServiceInfo.Length > 0)
            {
                using (var deferredSessionInfoDataWriter = new Windows.Storage.Streams.DataWriter(new Windows.Storage.Streams.InMemoryRandomAccessStream()))
                {
                    deferredSessionInfoDataWriter.WriteString(deferredServiceInfo);
                    advertiser.DeferredSessionInfo = deferredSessionInfoDataWriter.DetachBuffer();
                }
                WiFiDirectTestLogger.Log("Included Session Info: \"{0}\"", WiFiDirectTestUtilities.GetTruncatedString(deferredServiceInfo));
            }
            else
            {
                advertiser.DeferredSessionInfo = null;
            }

            if (configMethods != null)
            {
                advertiser.PreferredConfigurationMethods.Clear();
                foreach (var configMethod in configMethods)
                {
                    advertiser.PreferredConfigurationMethods.Add(configMethod);
                    WiFiDirectTestLogger.Log("Added config method {0}", configMethod.ToString());
                }
            }

            if (prefixList != null && prefixList.Count > 0)
            {
                advertiser.ServiceNamePrefixes.Clear();
                foreach (var prefix in prefixList)
                {
                    advertiser.ServiceNamePrefixes.Add(prefix);
                    WiFiDirectTestLogger.Log("Added prefix {0}", prefix);
                }
            }

            ServiceAdvertiser advertiserWrapper = new ServiceAdvertiser(advertiser, this, this, this);

            advertiserCollection.Add(advertiserWrapper.Handle, advertiserWrapper);

            WiFiDirectTestLogger.Log("Starting Service: \"{1}\" (Advertiser={0})", advertiserWrapper.Handle, serviceName);
            advertiser.Start();

            return(advertiserWrapper.Handle);
        }