Ignore:
Timestamp:
Nov 16, 2018, 10:38:46 PM (6 years ago)
Author:
alloc
Message:

*Latest optimizations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/MapRendering/Web/WebPermissions.cs

    r326 r332  
    11using System.Collections.Generic;
     2using System.Collections.ObjectModel;
    23using System.IO;
    34using System.Xml;
     5using UniLinq;
    46
    57namespace AllocsFixes.NetConnections.Servers.Web {
     
    1012
    1113                private readonly Dictionary<string, WebModulePermission> knownModules =
    12                         new Dictionary<string, WebModulePermission> ();
     14                        new CaseInsensitiveStringDictionary<WebModulePermission> ();
    1315
    1416                private readonly Dictionary<string, AdminToken> admintokens = new CaseInsensitiveStringDictionary<AdminToken> ();
     
    1820
    1921                public WebPermissions () {
     22                        allModulesList = new List<WebModulePermission> ();
     23                        allModulesListRO = new ReadOnlyCollection<WebModulePermission> (allModulesList);
    2024                        Directory.CreateDirectory (GetFilePath ());
    2125                        InitFileWatcher ();
     
    5458                        }
    5559
     60                        if (knownModules.TryGetValue (_module, out result)) {
     61                                return result;
     62                        }
     63
    5664                        return defaultModulePermission;
    5765                }
     
    93101                        WebModulePermission p = new WebModulePermission (_module, _permissionLevel);
    94102                        lock (this) {
     103                                allModulesList.Clear ();
    95104                                modules [_module] = p;
    96105                                if (_save) {
     
    104113                                return;
    105114                        }
    106 
    107                         lock (this) {
    108                                 if (!IsKnownModule (_module)) {
    109                                         knownModules.Add (_module, new WebModulePermission (_module, _defaultPermission));
    110                                 }
    111 
    112                                 if (_defaultPermission > 0 && !modules.ContainsKey (_module)) {
    113                                         AddModulePermission (_module, _defaultPermission);
    114                                 }
     115                       
     116                        WebModulePermission p = new WebModulePermission (_module, _defaultPermission);
     117
     118                        lock (this) {
     119                                allModulesList.Clear ();
     120                                knownModules [_module] = p;
    115121                        }
    116122                }
     
    129135                public void RemoveModulePermission (string _module, bool _save = true) {
    130136                        lock (this) {
     137                                allModulesList.Clear ();
    131138                                modules.Remove (_module);
    132139                                if (_save) {
     
    136143                }
    137144
    138                 public List<WebModulePermission> GetModules () {
    139                         List<WebModulePermission> result = new List<WebModulePermission> ();
    140                         foreach (string module in knownModules.Keys) {
    141                                 if (modules.ContainsKey (module)) {
    142                                         result.Add (modules [module]);
    143                                 } else {
    144                                         result.Add (knownModules [module]);
    145                                 }
    146                         }
    147 
    148                         return result;
     145                private readonly List<WebModulePermission> allModulesList;
     146                private readonly ReadOnlyCollection<WebModulePermission> allModulesListRO;
     147
     148                public IList<WebModulePermission> GetModules () {
     149                        if (allModulesList.Count == 0) {
     150                                foreach (KeyValuePair<string, WebModulePermission> kvp in knownModules) {
     151                                        if (modules.ContainsKey (kvp.Key)) {
     152                                                allModulesList.Add (modules [kvp.Key]);
     153                                        } else {
     154                                                allModulesList.Add (kvp.Value);
     155                                        }
     156                                }
     157                        }
     158
     159                        return allModulesListRO;
    149160                }
    150161
     
    302313                                sw.WriteLine (
    303314                                        "               <!-- <token name=\"adminuser1\" token=\"supersecrettoken\" permission_level=\"0\" /> -->");
    304                                 foreach (AdminToken at in admintokens.Values) {
    305                                         sw.WriteLine ("         <token name=\"{0}\" token=\"{1}\" permission_level=\"{2}\" />", at.name, at.token,
    306                                                 at.permissionLevel);
     315                                foreach (KeyValuePair<string, AdminToken> kvp in admintokens) {
     316                                        sw.WriteLine ("         <token name=\"{0}\" token=\"{1}\" permission_level=\"{2}\" />", kvp.Value.name,
     317                                                kvp.Value.token, kvp.Value.permissionLevel);
    307318                                }
    308319
     
    310321                                sw.WriteLine ();
    311322                                sw.WriteLine (" <permissions>");
    312                                 foreach (WebModulePermission wap in modules.Values) {
    313                                         sw.WriteLine ("         <permission module=\"{0}\" permission_level=\"{1}\" />", wap.module,
    314                                                 wap.permissionLevel);
     323                                foreach (KeyValuePair<string, WebModulePermission> kvp in modules) {
     324                                        sw.WriteLine ("         <permission module=\"{0}\" permission_level=\"{1}\" />", kvp.Value.module,
     325                                                kvp.Value.permissionLevel);
    315326                                }
    316327
Note: See TracChangeset for help on using the changeset viewer.