public void Update(ChannelInstance instance) { runner.Run(() => { var setup = ChannelUtils.SetupString(instance); setups.TryGetValue(instance.Id, out string current); if (current == null || current != setup) { OnDelete(instance.Id); string ip = ChannelUtils.IPAccess(instance.Access); if (ip != null) { string executable = ChannelUtils.ExecutableName(instance.Type); var arguments = string.Format("{0} {1} {2} {3}", ip, instance.Port, executable, instance.Config); states?.Invoke(instance.Id, string.Empty); setups[instance.Id] = setup; controllers[instance.Id] = new Controller("SharpChannel.Manager.Instance.exe", arguments); logger.Info("{0} Endpoint {1}:{2}", instance.Id, ip, instance.Port); logger.Info("{0} Executable {1}", instance.Id, executable); logger.Info("{0} Config {1}", instance.Id, instance.Config); } } }); }