public void StartInstanceAndConfigure(string appSecret, params Type[] services) { try { InstanceConfigure(appSecret); StartInstance(services); } catch (MobileCenterException ex) { MobileCenterLog.Warn(MobileCenterLog.LogTag, ex.Message); } }
internal void StartInstance(params Type[] services) { if (services == null) { throw new MobileCenterException("Services array is null."); } if (!_instanceConfigured) { throw new MobileCenterException("Mobile Center has not been configured."); } var startServiceLog = new StartServiceLog(); foreach (var serviceType in services) { if (serviceType == null) { MobileCenterLog.Warn(MobileCenterLog.LogTag, "Skipping null service. Please check that you did not pass a null argument."); continue; } try { // We don't support distribute in UWP, not even a custom start. if (IsDistributeService(serviceType)) { MobileCenterLog.Warn(MobileCenterLog.LogTag, "Distribute service is not yet supported on UWP."); } else { var serviceInstance = serviceType.GetRuntimeProperty("Instance")?.GetValue(null) as IMobileCenterService; if (serviceInstance == null) { throw new MobileCenterException("Service type does not contain static 'Instance' property of type IMobileCenterService"); } StartService(serviceInstance); startServiceLog.Services.Add(serviceInstance.ServiceName); } } catch (MobileCenterException ex) { MobileCenterLog.Warn(MobileCenterLog.LogTag, $"Failed to start service '{serviceType.Name}'; skipping it.", ex); } } // Enqueue a log indicating which services have been initialized if (startServiceLog.Services.Count > 0) { _channel.Enqueue(startServiceLog); } }
private void StartService(IMobileCenterService service) { if (service == null) { throw new MobileCenterException("Attempted to start an invalid Mobile Center service."); } if (_services.Contains(service)) { MobileCenterLog.Warn(MobileCenterLog.LogTag, $"Mobile Center has already started the service with class name '{service.GetType().Name}'"); return; } service.OnChannelGroupReady(_channelGroup, _appSecret); _services.Add(service); MobileCenterLog.Info(MobileCenterLog.LogTag, $"'{service.GetType().Name}' service started."); }
// Internal for testing internal void InstanceConfigure(string appSecretOrSecrets) { if (_instanceConfigured) { MobileCenterLog.Warn(MobileCenterLog.LogTag, "Mobile Center may only be configured once."); return; } _appSecret = GetSecretForPlatform(appSecretOrSecrets, PlatformIdentifier); // If a factory has been supplied, use it to construct the channel group - this is designed for testing. // Normal scenarios will use new ChannelGroup(string). _channelGroup = _channelGroupFactory?.CreateChannelGroup(_appSecret) ?? new ChannelGroup(_appSecret); ApplicationLifecycleHelper.Instance.UnhandledExceptionOccurred += (sender, e) => _channelGroup.ShutdownAsync(); _channel = _channelGroup.AddChannel(ChannelName, Constants.DefaultTriggerCount, Constants.DefaultTriggerInterval, Constants.DefaultTriggerMaxParallelRequests); if (_logUrl != null) { _channelGroup.SetLogUrl(_logUrl); } _instanceConfigured = true; MobileCenterLog.Assert(MobileCenterLog.LogTag, "Mobile Center SDK configured successfully."); }