コード例 #1
0
        private void StartPipe()
        {
            // create named pipe binding
            _callbackService = new HudNamedPipeBindingCallbackService();

            InstanceContext context = new InstanceContext(_callbackService);

            _namedPipeBindingFactory = new DuplexChannelFactory <IHudNamedPipeBindingService>(context, "HudNamedPipeBindingServiceEndpoint");
            _namedPipeBindingProxy   = CreateProxyChannel(_namedPipeBindingFactory);

            while (!hudClient.HasExited)
            {
                try
                {
                    Task.Delay(delayMS).Wait();

                    if (_cancellationTokenSource != null && _cancellationTokenSource.IsCancellationRequested)
                    {
                        LogProvider.Log.Info(this, "Initialize canceled");
                        return;
                    }

                    ((IClientChannel)_namedPipeBindingProxy).Open();

                    if (settingsModel.GeneralSettings.IsAdvancedLoggingEnabled)
                    {
                        LogProvider.Log.Info(this, "Successfully connected to the HUD service.");
                    }

                    return;
                }
                catch (EndpointNotFoundException)
                {
                    LogProvider.Log.Info(this, "Service hasn't been created yet.");

                    ((IClientChannel)_namedPipeBindingProxy).Abort();

                    ((IClientChannel)_namedPipeBindingProxy).Faulted -= Pipe_Faulted;
                    ((IClientChannel)_namedPipeBindingProxy).Opened  -= Pipe_Opened;

                    _namedPipeBindingProxy = CreateProxyChannel(_namedPipeBindingFactory);
                }
                catch (Exception ex)
                {
                    LogProvider.Log.Error(this, ex);
                }
            }
        }
コード例 #2
0
        private void Close()
        {
            try
            {
                if (_initializeTask != null && _initializeTask.Status != TaskStatus.RanToCompletion)
                {
                    try
                    {
                        _cancellationTokenSource.Cancel();
                        _initializeTask.Wait();
                    }
                    catch (Exception ex)
                    {
                        LogProvider.Log.Error(this, ex);
                    }
                }

                isInitialized = false;

                _initializeTask          = null;
                _cancellationTokenSource = null;

                if (_namedPipeBindingFactory != null)
                {
                    _namedPipeBindingFactory.Faulted -= Pipe_Faulted;
                    _namedPipeBindingFactory.Opened  -= Pipe_Opened;
                    _namedPipeBindingFactory.Abort();

                    _namedPipeBindingFactory = null;
                    _namedPipeBindingProxy   = null;
                    _callbackService         = null;
                }

                if (hudClient != null && !hudClient.HasExited)
                {
                    hudClient.Kill();
                }
            }
            catch (Exception e)
            {
                LogProvider.Log.Error(this, "HUD transmitter could not be stopped.", e);
            }
        }