public KeyValuePair <Guid, VirtualHostSetting>[] GetVirtualHosts() { lock (virtualHostLock) { return(VirtualHosts.ToArray()); } }
public List <Guid> ApplyVirtualHosts(Guid settingId, KeyValuePair <Guid, VirtualHostSetting>[] virtualHostSettings) { var affectedVirtualHosts = new List <Guid>(); var newHosts = new Dictionary <Guid, VirtualHostSetting>(); lock (virtualHostLock) { VirtualHostSettingId = settingId; foreach (var virtualHostSetting in virtualHostSettings) { var virtualHostId = virtualHostSetting.Key; var virtualHost = virtualHostSetting.Value; newHosts.Add(virtualHostId, virtualHost); if (VirtualHosts.TryGetValue(virtualHostId, out var oldVirtualHost)) { if (oldVirtualHost != virtualHost) { affectedVirtualHosts.Add(virtualHostId);//changed } VirtualHosts.Remove(virtualHostId); } else { affectedVirtualHosts.Add(virtualHostId);//added } } affectedVirtualHosts.AddRange(VirtualHosts.Keys);//removed VirtualHosts = newHosts; } return(affectedVirtualHosts); }
public void TestNoDefault() { using var runner = TestRunner.Run(VirtualHosts.Create()); using var response = runner.GetRequest().GetSafeResponse(); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); }
/// <summary> /// Responds to the save command from the current (sub) view model. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _currentViewModel_OnSaved(object sender, System.EventArgs e) { if (CurrentViewModel is VirtualHostVM) { var vHost = ((VirtualHostVM)CurrentViewModel).SelectedVirtualHost; if (vHost == null) { return; } var old = VirtualHosts.FirstOrDefault(p => p.Id == vHost.Id); if (old == null) { VirtualHosts.Add(vHost); } else { var idx = VirtualHosts.IndexOf(old); VirtualHosts.Remove(old); VirtualHosts.Insert(idx, vHost); } // This bypasses the INotify event. // Currently there doesn't seem much point firing the event, but this may change later. _selectedVirtualHost = vHost; } else if (CurrentViewModel is HostFileEntryVM) { var host = ((HostFileEntryVM)CurrentViewModel).CurrentHostFileEntry; if (host == null) { return; } var old = HostFileEntries.FirstOrDefault(p => p.Id == host.Id); if (old == null) { HostFileEntries.Add(host); } else { var idx = HostFileEntries.IndexOf(old); HostFileEntries.Remove(old); HostFileEntries.Insert(idx, host); } // This bypasses the INotify event. // Currently there doesn't seem much point firing the event, but this may change later. _selectedHostFileEntry = host; } }
public void TestDomains() { var hosts = VirtualHosts.Create() .Add("domain1.com", Layout.Create().Fallback(Content.From("domain1.com"))) .Add("domain2.com", Layout.Create().Fallback(Content.From("domain2.com"))) .Default(Layout.Create().Index(Content.From("default"))); using var runner = TestRunner.Run(hosts); TestHost(runner, "domain1.com"); TestHost(runner, "domain2.com"); TestHost(runner, "localhost", "default"); }
public static IHandlerBuilder Build(Environment environment, GatewayConfiguration config) { var hosts = VirtualHosts.Create(); if (config.Hosts != null) { foreach (var host in config.Hosts) { hosts.Add(host.Key, GetHandler(environment, host.Value)); } } return(hosts); }
public List <Guid> ApplyVirtualHosts(Guid settingId, BinaryReader inputStreamReader) //Return affected virtual hosts { var count = (int)inputStreamReader.ReadUInt16LittleEndian(); if (count == 0) { throw new InvalidDataException(); } var affectedVirtualHosts = new List <Guid>(); var newHosts = new Dictionary <Guid, VirtualHostSetting>(); for (int index = 0; index < count; index++) { var virtualHostId = inputStreamReader.ReadGuid(); var priority = inputStreamReader.ReadInt32LittleEndian(); var weight = inputStreamReader.ReadInt32LittleEndian(); VirtualHostSetting virtualHost = new VirtualHostSetting(priority, weight); newHosts.Add(virtualHostId, virtualHost); } lock (virtualHostLock) { VirtualHostSettingId = settingId; foreach (var item in newHosts) { var virtualHostId = item.Key; var virtualHost = item.Value; if (VirtualHosts.TryGetValue(virtualHostId, out var oldVirtualHost)) { if (oldVirtualHost != virtualHost) { affectedVirtualHosts.Add(virtualHostId);//changed } VirtualHosts.Remove(virtualHostId); } else { affectedVirtualHosts.Add(virtualHostId);//added } } affectedVirtualHosts.AddRange(VirtualHosts.Keys);//removed VirtualHosts = newHosts; } return(affectedVirtualHosts); }
public Dictionary <Guid, VirtualHostSetting> ApplyVirtualHosts(Guid settingId, string value, out List <Guid> affectedVirtualHosts) //from redis { affectedVirtualHosts = new List <Guid>(); var newHosts = new Dictionary <Guid, VirtualHostSetting>(); var texts = value.Split(','); foreach (var text in texts) { var setting = text.Split('-'); var virtualHostId = Guid.Parse(setting[0]); var priority = int.Parse(setting[1]); var weight = int.Parse(setting[2]); VirtualHostSetting virtualHost = new VirtualHostSetting(priority, weight); newHosts.Add(virtualHostId, virtualHost); } lock (virtualHostLock) { VirtualHostSettingId = settingId; foreach (var item in newHosts) { var virtualHostId = item.Key; var virtualHost = item.Value; if (VirtualHosts.TryGetValue(virtualHostId, out var oldVirtualHost)) { if (oldVirtualHost != virtualHost) { affectedVirtualHosts.Add(virtualHostId);//changed } VirtualHosts.Remove(virtualHostId); } else { affectedVirtualHosts.Add(virtualHostId);//added } } affectedVirtualHosts.AddRange(VirtualHosts.Keys);//deleted VirtualHosts = newHosts; } return(newHosts); }
/// <summary> /// Sets associated objects when required. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _objectViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e == null) { return; } object obj = null; switch (e.PropertyName) { case "CurrentHostFileEntry": // Set the backing value so we skip the actions that occur when assigning to the public property. _selectedVirtualHost = VirtualHosts.FirstOrDefault( p => p.ServerName == SelectedHostFileEntry.Url || p.ServerAlias == SelectedHostFileEntry.Url); // Assign found value to obj, even if null as this will tell the viewmodel to clear the property. obj = _selectedVirtualHost; // Now we need to raise the property changed event on the changed property to allow UI to react. OnPropertyChanged("SelectedVirtualHost"); break; case "SelectedVirtualHost": _selectedHostFileEntry = HostFileEntries.FirstOrDefault( p => p.Url == SelectedVirtualHost.ServerName || p.Url == SelectedVirtualHost.ServerAlias); obj = _selectedHostFileEntry; OnPropertyChanged("SelectedHostFileEntry"); break; default: // If not a property we want to act on we should return to prevent setting unwanted values. return; } CurrentViewModel.SetAssociatedObject(obj); }