Changeset 326


Ignore:
Timestamp:
Sep 4, 2018, 2:33:52 PM (6 years ago)
Author:
alloc
Message:

More cleanup, allocation improvements

Location:
binary-improvements
Files:
36 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/7dtd-server-fixes/src/ChatHookExample.cs

    r325 r326  
    55
    66                public static bool Hook (ClientInfo _cInfo, EChatType _type, string _message, string _playerName) {
    7                         if (!string.IsNullOrEmpty (_message)) {
    8                                 if (_message.EqualsCaseInsensitive ("/alloc")) {
    9                                         if (_cInfo != null) {
    10                                                 Log.Out ("Sent chat hook reply to {0}", _cInfo.playerId);
    11                                                 _cInfo.SendPackage (new NetPackageChat (EChatType.Whisper, -1, ANSWER, "", false, null));
    12                                         } else {
    13                                                 Log.Error ("ChatHookExample: Argument _cInfo null on message: {0}", _message);
    14                                         }
    15 
    16                                         return false;
    17                                 }
     7                        if (string.IsNullOrEmpty (_message) || !_message.EqualsCaseInsensitive ("/alloc")) {
     8                                return true;
    189                        }
    1910
    20                         return true;
     11                        if (_cInfo != null) {
     12                                Log.Out ("Sent chat hook reply to {0}", _cInfo.playerId);
     13                                _cInfo.SendPackage (new NetPackageChat (EChatType.Whisper, -1, ANSWER, "", false, null));
     14                        } else {
     15                                Log.Error ("ChatHookExample: Argument _cInfo null on message: {0}", _message);
     16                        }
     17
     18                        return false;
     19
    2120                }
    2221        }
  • binary-improvements/7dtd-server-fixes/src/FileCache/MapTileCache.cs

    r325 r326  
    5454                        try {
    5555                                lock (cache) {
    56                                         if (cache [zoomlevel].filename != null) {
    57                                                 cache [zoomlevel].data = content;
    58                                                 File.WriteAllBytes (cache [zoomlevel].filename, content);
     56                                        if (cache [zoomlevel].filename == null) {
     57                                                return;
    5958                                        }
     59
     60                                        cache [zoomlevel].data = content;
     61                                        File.WriteAllBytes (cache [zoomlevel].filename, content);
    6062                                }
    6163                        } catch (Exception e) {
  • binary-improvements/7dtd-server-fixes/src/JSON/JSONNull.cs

    r325 r326  
    1010                        //Log.Out ("ParseNull enter (" + offset + ")");
    1111
    12                         if (json.Substring (offset, 4).Equals ("null")) {
    13                                 //Log.Out ("JSON:Parsed Null");
    14                                 offset += 4;
    15                                 return new JSONNull ();
     12                        if (!json.Substring (offset, 4).Equals ("null")) {
     13                                throw new MalformedJSONException ("No valid null value found");
    1614                        }
    1715
    18                         throw new MalformedJSONException ("No valid null value found");
     16                        //Log.Out ("JSON:Parsed Null");
     17                        offset += 4;
     18                        return new JSONNull ();
    1919                }
    2020        }
  • binary-improvements/7dtd-server-fixes/src/JSON/JSONObject.cs

    r325 r326  
    104104                                                //Log.Out ("JSON:Parsed Object: " + obj.ToString ());
    105105                                                return obj;
     106                                        default:
     107                                                break;
    106108                                }
    107109                        }
  • binary-improvements/7dtd-server-fixes/src/LandClaimList.cs

    r325 r326  
    1414                        Dictionary<Player, List<Vector3i>> result = new Dictionary<Player, List<Vector3i>> ();
    1515
    16                         if (d != null) {
    17                                 Dictionary<PersistentPlayerData, List<Vector3i>> owners =
    18                                         new Dictionary<PersistentPlayerData, List<Vector3i>> ();
    19                                 foreach (KeyValuePair<Vector3i, PersistentPlayerData> kvp in d) {
    20                                         bool allowed = true;
    21                                         if (_positionFilters != null) {
    22                                                 foreach (PositionFilter pf in _positionFilters) {
    23                                                         if (!pf (kvp.Key)) {
    24                                                                 allowed = false;
    25                                                                 break;
    26                                                         }
     16                        if (d == null) {
     17                                return result;
     18                        }
     19
     20                        Dictionary<PersistentPlayerData, List<Vector3i>> owners =
     21                                new Dictionary<PersistentPlayerData, List<Vector3i>> ();
     22                        foreach (KeyValuePair<Vector3i, PersistentPlayerData> kvp in d) {
     23                                bool allowed = true;
     24                                if (_positionFilters != null) {
     25                                        foreach (PositionFilter pf in _positionFilters) {
     26                                                if (!pf (kvp.Key)) {
     27                                                        allowed = false;
     28                                                        break;
    2729                                                }
    28                                         }
    29 
    30                                         if (allowed) {
    31                                                 if (!owners.ContainsKey (kvp.Value)) {
    32                                                         owners.Add (kvp.Value, new List<Vector3i> ());
    33                                                 }
    34 
    35                                                 owners [kvp.Value].Add (kvp.Key);
    3630                                        }
    3731                                }
    3832
    39                                 foreach (KeyValuePair<PersistentPlayerData, List<Vector3i>> kvp in owners) {
    40                                         Player p = PersistentContainer.Instance.Players [kvp.Key.PlayerId, false];
    41                                         if (p == null) {
    42                                                 p = new Player (kvp.Key.PlayerId);
     33                                if (allowed) {
     34                                        if (!owners.ContainsKey (kvp.Value)) {
     35                                                owners.Add (kvp.Value, new List<Vector3i> ());
    4336                                        }
    4437
    45                                         bool allowed = true;
    46                                         if (_ownerFilters != null) {
    47                                                 foreach (OwnerFilter of in _ownerFilters) {
    48                                                         if (!of (p)) {
    49                                                                 allowed = false;
    50                                                                 break;
    51                                                         }
     38                                        owners [kvp.Value].Add (kvp.Key);
     39                                }
     40                        }
     41
     42                        foreach (KeyValuePair<PersistentPlayerData, List<Vector3i>> kvp in owners) {
     43                                Player p = PersistentContainer.Instance.Players [kvp.Key.PlayerId, false];
     44                                if (p == null) {
     45                                        p = new Player (kvp.Key.PlayerId);
     46                                }
     47
     48                                bool allowed = true;
     49                                if (_ownerFilters != null) {
     50                                        foreach (OwnerFilter of in _ownerFilters) {
     51                                                if (!of (p)) {
     52                                                        allowed = false;
     53                                                        break;
    5254                                                }
    5355                                        }
     56                                }
    5457
    55                                         if (allowed) {
    56                                                 result.Add (p, new List<Vector3i> ());
    57                                                 foreach (Vector3i v in kvp.Value) {
    58                                                         result [p].Add (v);
    59                                                 }
     58                                if (allowed) {
     59                                        result.Add (p, new List<Vector3i> ());
     60                                        foreach (Vector3i v in kvp.Value) {
     61                                                result [p].Add (v);
    6062                                        }
    6163                                }
  • binary-improvements/7dtd-server-fixes/src/LiveData/Animals.cs

    r325 r326  
    44
    55                protected override EntityAnimal predicate (Entity _e) {
    6                         if (_e is EntityAnimal) {
    7                                 EntityAnimal ea = (EntityAnimal) _e;
    8 
    9                                 if (ea.IsAlive ()) {
    10                                         return ea;
    11                                 }
     6                        EntityAnimal ea = _e as EntityAnimal;
     7                        if (ea != null && ea.IsAlive ()) {
     8                                return ea;
    129                        }
    1310
  • binary-improvements/7dtd-server-fixes/src/LiveData/Hostiles.cs

    r325 r326  
    44
    55                protected override EntityEnemy predicate (Entity _e) {
    6                         if (_e is EntityEnemy) {
    7                                 if (_e.IsAlive ()) {
    8                                         return _e as EntityEnemy;
    9                                 }
     6                        EntityEnemy enemy = _e as EntityEnemy;
     7                        if (enemy != null && enemy.IsAlive ()) {
     8                                return enemy;
    109                        }
    1110
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Attributes.cs

    r325 r326  
    55        public class Attributes {
    66                private bool hideChatCommands;
    7                 private String hideChatCommandPrefix;
     7                private string hideChatCommandPrefix;
    88
    99                public bool HideChatCommands {
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Inventory.cs

    r325 r326  
    5858
    5959                private InvItem CreateInvItem (ItemValue _itemValue, int _count, int _playerId) {
    60                         if (_count > 0 && _itemValue != null && !_itemValue.Equals (ItemValue.None)) {
    61                                 ItemClass itemClass = ItemClass.list [_itemValue.type];
    62                                 int maxAllowed = itemClass.Stacknumber.Value;
    63                                 string name = itemClass.GetItemName ();
    64 
    65                                 if (_count > maxAllowed) {
    66                                         Log.Out ("Player with ID " + _playerId + " has stack for \"" + name + "\" greater than allowed (" +
    67                                                  _count + " > " + maxAllowed + ")");
    68                                 }
    69 
    70                                 InvItem item = null;
    71                                 if (_itemValue.HasQuality) {
    72                                         item = new InvItem (name, _count, _itemValue.Quality, _itemValue.MaxUseTimes, _itemValue.UseTimes);
    73                                 } else {
    74                                         item = new InvItem (name, _count, -1, _itemValue.MaxUseTimes, _itemValue.UseTimes);
    75                                 }
    76 
    77                                 item.icon = itemClass.GetIconName ();
    78 
    79                                 item.iconcolor = AllocsUtils.ColorToHex (itemClass.GetIconTint ());
    80 
    81                                 return item;
     60                        if (_count <= 0 || _itemValue == null || _itemValue.Equals (ItemValue.None)) {
     61                                return null;
    8262                        }
    8363
    84                         return null;
     64                        ItemClass itemClass = ItemClass.list [_itemValue.type];
     65                        int maxAllowed = itemClass.Stacknumber.Value;
     66                        string name = itemClass.GetItemName ();
     67
     68                        if (_count > maxAllowed) {
     69                                Log.Out ("Player with ID " + _playerId + " has stack for \"" + name + "\" greater than allowed (" +
     70                                         _count + " > " + maxAllowed + ")");
     71                        }
     72
     73                        InvItem item;
     74                        if (_itemValue.HasQuality) {
     75                                item = new InvItem (name, _count, _itemValue.Quality, _itemValue.MaxUseTimes, _itemValue.UseTimes);
     76                        } else {
     77                                item = new InvItem (name, _count, -1, _itemValue.MaxUseTimes, _itemValue.UseTimes);
     78                        }
     79
     80                        item.icon = itemClass.GetIconName ();
     81
     82                        item.iconcolor = AllocsUtils.ColorToHex (itemClass.GetIconTint ());
     83
     84                        return item;
    8585                }
    8686        }
  • binary-improvements/7dtd-server-fixes/src/PersistentData/PersistentContainer.cs

    r325 r326  
    5353
    5454                public static bool Load () {
    55                         if (File.Exists (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin")) {
    56                                 try {
    57                                         PersistentContainer obj;
    58                                         Stream stream = File.Open (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Open);
    59                                         BinaryFormatter bFormatter = new BinaryFormatter ();
    60                                         obj = (PersistentContainer) bFormatter.Deserialize (stream);
    61                                         stream.Close ();
    62                                         instance = obj;
    63                                         return true;
    64                                 } catch (Exception e) {
    65                                         Log.Error ("Exception in PersistentContainer.Load");
    66                                         Log.Exception (e);
    67                                 }
     55                        if (!File.Exists (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin")) {
     56                                return false;
     57                        }
     58
     59                        try {
     60                                PersistentContainer obj;
     61                                Stream stream = File.Open (GameUtils.GetSaveGameDir () + "/AllocsPeristentData.bin", FileMode.Open);
     62                                BinaryFormatter bFormatter = new BinaryFormatter ();
     63                                obj = (PersistentContainer) bFormatter.Deserialize (stream);
     64                                stream.Close ();
     65                                instance = obj;
     66                                return true;
     67                        } catch (Exception e) {
     68                                Log.Error ("Exception in PersistentContainer.Load");
     69                                Log.Exception (e);
    6870                        }
    6971
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs

    r325 r326  
    174174
    175175                public void SetOffline () {
    176                         if (clientInfo != null) {
    177                                 Log.Out ("Player set to offline: " + steamId);
    178                                 lastOnline = DateTime.Now;
    179                                 try {
    180                                         Vector3i lastPos = new Vector3i (Entity.GetPosition ());
    181                                         lastPositionX = lastPos.x;
    182                                         lastPositionY = lastPos.y;
    183                                         lastPositionZ = lastPos.z;
    184                                         totalPlayTime += (long) (Time.timeSinceLevelLoad - Entity.CreationTimeSinceLevelLoad);
    185                                 } catch (NullReferenceException) {
    186                                         Log.Out ("Entity not available. Something seems to be wrong here...");
    187                                 }
    188 
    189                                 clientInfo = null;
    190                         }
     176                        if (clientInfo == null) {
     177                                return;
     178                        }
     179
     180                        Log.Out ("Player set to offline: " + steamId);
     181                        lastOnline = DateTime.Now;
     182                        try {
     183                                Vector3i lastPos = new Vector3i (Entity.GetPosition ());
     184                                lastPositionX = lastPos.x;
     185                                lastPositionY = lastPos.y;
     186                                lastPositionZ = lastPos.z;
     187                                totalPlayTime += (long) (Time.timeSinceLevelLoad - Entity.CreationTimeSinceLevelLoad);
     188                        } catch (NullReferenceException) {
     189                                Log.Out ("Entity not available. Something seems to be wrong here...");
     190                        }
     191
     192                        clientInfo = null;
    191193                }
    192194
     
    206208
    207209                private void UpdateProgression (PlayerDataFile _pdf) {
    208                         if (_pdf.progressionData.Length > 0) {
    209                                 using (PooledBinaryReader pbr = MemoryPools.poolBinaryReader.AllocSync (false)) {
    210                                         pbr.SetBaseStream (_pdf.progressionData);
    211                                         Progression p = Progression.Read (pbr, null);
    212                                         expToNextLevel = (uint) p.ExpToNextLevel;
    213                                         level = p.Level;
    214                                 }
     210                        if (_pdf.progressionData.Length <= 0) {
     211                                return;
     212                        }
     213
     214                        using (PooledBinaryReader pbr = MemoryPools.poolBinaryReader.AllocSync (false)) {
     215                                pbr.SetBaseStream (_pdf.progressionData);
     216                                Progression p = Progression.Read (pbr, null);
     217                                expToNextLevel = (uint) p.ExpToNextLevel;
     218                                level = p.Level;
    215219                        }
    216220                }
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Players.cs

    r325 r326  
    66        [Serializable]
    77        public class Players {
    8                 private readonly Dictionary<string, Player> players = new Dictionary<string, Player> ();
     8                private readonly Dictionary<string, Player> players = new CaseInsensitiveStringDictionary<Player> ();
    99
    1010                public Player this [string steamId, bool create] {
     
    1818                                }
    1919
    20                                 if (create && steamId != null && steamId.Length == 17) {
    21                                         Log.Out ("Created new player entry for ID: " + steamId);
    22                                         Player p = new Player (steamId);
    23                                         players.Add (steamId, p);
    24                                         return p;
     20                                if (!create || steamId.Length != 17) {
     21                                        return null;
    2522                                }
    2623
    27                                 return null;
     24                                Log.Out ("Created new player entry for ID: " + steamId);
     25                                Player p = new Player (steamId);
     26                                players.Add (steamId, p);
     27                                return p;
    2828                        }
    2929                }
     
    5656                        }
    5757
    58                         int entityId = -1;
     58                        int entityId;
    5959                        if (int.TryParse (_nameOrId, out entityId)) {
    6060                                foreach (KeyValuePair<string, Player> kvp in players) {
     
    6565                        }
    6666
    67                         _nameOrId = _nameOrId.ToLower ();
    6867                        foreach (KeyValuePair<string, Player> kvp in players) {
    69                                 string name = kvp.Value.Name.ToLower ();
     68                                string name = kvp.Value.Name;
    7069                                if (_ignoreColorCodes) {
    7170                                        name = Regex.Replace (name, "\\[[0-9a-fA-F]{6}\\]", "");
    7271                                }
    7372
    74                                 if (kvp.Value.IsOnline && name.Equals (_nameOrId)) {
     73                                if (kvp.Value.IsOnline && name.EqualsCaseInsensitive (_nameOrId)) {
    7574                                        return kvp.Key;
    7675                                }
  • binary-improvements/AllocsCommands/Commands/Give.cs

    r325 r326  
    4747                                iv = new ItemValue (iv.type, true);
    4848
    49                                 int n = int.MinValue;
     49                                int n;
    5050                                if (!int.TryParse (_params [2], out n) || n <= 0) {
    5151                                        SdtdConsole.Instance.Output ("Amount is not an integer or not greater than zero.");
  • binary-improvements/AllocsCommands/Commands/ListKnownPlayers.cs

    r325 r326  
    3535
    3636                                if (_params.Count == 1) {
    37                                         long steamid = -1;
    38                                         if (_params [0].ToLower ().Equals ("-online")) {
     37                                        long steamid;
     38                                        if (_params [0].EqualsCaseInsensitive ("-online")) {
    3939                                                onlineOnly = true;
    40                                         } else if (_params [0].ToLower ().Equals ("-notbanned")) {
     40                                        } else if (_params [0].EqualsCaseInsensitive ("-notbanned")) {
    4141                                                notBannedOnly = true;
    4242                                        } else if (_params [0].Length == 17 && long.TryParse (_params [0], out steamid)) {
    4343                                                isSteamId = true;
    4444                                        } else {
    45                                                 nameFilter = _params [0].ToLower ();
     45                                                nameFilter = _params [0];
    4646                                        }
    4747                                }
     
    5353                                                SdtdConsole.Instance.Output (string.Format (
    5454                                                        "{0}. {1}, id={2}, steamid={3}, online={4}, ip={5}, playtime={6} m, seen={7}",
    55                                                         0, p.Name, p.EntityID, nameFilter, p.IsOnline, p.IP,
     55                                                        0, p.Name, p.EntityID, _params [0], p.IsOnline, p.IP,
    5656                                                        p.TotalPlayTime / 60,
    5757                                                        p.LastOnline.ToString ("yyyy-MM-dd HH:mm"))
    5858                                                );
    5959                                        } else {
    60                                                 SdtdConsole.Instance.Output (string.Format ("SteamID {0} unknown!", nameFilter));
     60                                                SdtdConsole.Instance.Output (string.Format ("SteamID {0} unknown!", _params [0]));
    6161                                        }
    6262                                } else {
     
    6868                                                        (!onlineOnly || p.IsOnline)
    6969                                                        && (!notBannedOnly || !admTools.IsBanned (sid))
    70                                                         && (nameFilter.Length == 0 || p.Name.ToLower ().Contains (nameFilter))
     70                                                        && (nameFilter.Length == 0 || p.Name.ContainsCaseInsensitive (nameFilter))
    7171                                                ) {
    7272                                                        SdtdConsole.Instance.Output (string.Format (
  • binary-improvements/AllocsCommands/Commands/ListLandProtection.cs

    r325 r326  
    2727                        try {
    2828                                if (_senderInfo.RemoteClientInfo != null) {
    29                                         if (_params.Count >= 1 && _params [0].ToLower ().Equals ("nearby")) {
     29                                        if (_params.Count >= 1 && _params [0].EqualsCaseInsensitive ("nearby")) {
    3030                                                _params.Add (_senderInfo.RemoteClientInfo.playerId);
    3131                                        }
     
    5050                                        long tempLong;
    5151
    52                                         if (_params [0].ToLower ().Equals ("summary")) {
     52                                        if (_params [0].EqualsCaseInsensitive ("summary")) {
    5353                                                summaryOnly = true;
    5454                                        } else if (_params [0].Length == 17 && long.TryParse (_params [0], out tempLong)) {
     
    6464                                        }
    6565                                } else if (_params.Count >= 2) {
    66                                         if (_params [0].ToLower ().Equals ("nearby")) {
     66                                        if (_params [0].EqualsCaseInsensitive ("nearby")) {
    6767                                                try {
    6868                                                        if (_params.Count == 3) {
     
    123123                                }
    124124
    125                                 if (steamIdFilter.Length == 0) {
     125                                if (string.IsNullOrEmpty (steamIdFilter)) {
    126126                                        SdtdConsole.Instance.Output ("Total of " + ppl.m_lpBlockMap.Count + " keystones in the game");
    127127                                }
  • binary-improvements/AllocsCommands/Commands/RemoveLandProtection.cs

    r325 r326  
    5959                private void removeByPosition (List<string> _coords) {
    6060                        try {
    61                                 int x = int.MinValue;
     61                                int x, y, z;
    6262                                int.TryParse (_coords [0], out x);
    63                                 int y = int.MinValue;
    6463                                int.TryParse (_coords [1], out y);
    65                                 int z = int.MinValue;
    6664                                int.TryParse (_coords [2], out z);
    6765
  • binary-improvements/AllocsCommands/PrivateMessageConnections.cs

    r325 r326  
    1111
    1212                public static ClientInfo GetLastPMSenderForPlayer (ClientInfo _player) {
    13                         if (senderOfLastPM.ContainsKey (_player.steamId)) {
    14                                 CSteamID recSteamId = senderOfLastPM [_player.steamId];
    15                                 ClientInfo recInfo = ConnectionManager.Instance.Clients.ForSteamId (recSteamId);
    16                                 return recInfo;
     13                        if (!senderOfLastPM.ContainsKey (_player.steamId)) {
     14                                return null;
    1715                        }
    1816
    19                         return null;
     17                        CSteamID recSteamId = senderOfLastPM [_player.steamId];
     18                        ClientInfo recInfo = ConnectionManager.Instance.Clients.ForSteamId (recSteamId);
     19                        return recInfo;
    2020                }
    2121        }
  • binary-improvements/MapRendering/API.cs

    r325 r326  
    1414                        // ReSharper disable once ObjectCreationAsStatement
    1515                        new Web ();
    16                         LogBuffer.Instance.GetType ();
     16                        LogBuffer.Init ();
    1717                }
    1818
  • binary-improvements/MapRendering/Commands/WebPermissionsCmd.cs

    r325 r326  
    2323                public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
    2424                        if (_params.Count >= 1) {
    25                                 switch (_params [0].ToLower ()) {
    26                                         case "add":
    27                                                 ExecuteAdd (_params);
    28                                                 break;
    29                                         case "remove":
    30                                                 ExecuteRemove (_params);
    31                                                 break;
    32                                         case "list":
    33                                                 ExecuteList ();
    34                                                 break;
    35                                         default:
    36                                                 SdtdConsole.Instance.Output ("Invalid sub command \"" + _params [0] + "\".");
    37                                                 return;
     25                                if (_params [0].EqualsCaseInsensitive ("add")) {
     26                                        ExecuteAdd (_params);
     27                                } else if (_params [0].EqualsCaseInsensitive ("remove")) {
     28                                        ExecuteRemove (_params);
     29                                } else if (_params [0].EqualsCaseInsensitive ("list")) {
     30                                        ExecuteList ();
     31                                } else {
     32                                        SdtdConsole.Instance.Output ("Invalid sub command \"" + _params [0] + "\".");
    3833                                }
    3934                        } else {
  • binary-improvements/MapRendering/Commands/WebTokens.cs

    r325 r326  
    2525                public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
    2626                        if (_params.Count >= 1) {
    27                                 switch (_params [0].ToLower ()) {
    28                                         case "add":
    29                                                 ExecuteAdd (_params);
    30                                                 break;
    31                                         case "remove":
    32                                                 ExecuteRemove (_params);
    33                                                 break;
    34                                         case "list":
    35                                                 ExecuteList ();
    36                                                 break;
    37                                         default:
    38                                                 SdtdConsole.Instance.Output ("Invalid sub command \"" + _params [0] + "\".");
    39                                                 return;
     27                                if (_params [0].EqualsCaseInsensitive ("add")) {
     28                                        ExecuteAdd (_params);
     29                                } else if (_params [0].EqualsCaseInsensitive ("remove")) {
     30                                        ExecuteRemove (_params);
     31                                } else if (_params [0].EqualsCaseInsensitive ("list")) {
     32                                        ExecuteList ();
     33                                } else {
     34                                        SdtdConsole.Instance.Output ("Invalid sub command \"" + _params [0] + "\".");
    4035                                }
    4136                        } else {
  • binary-improvements/MapRendering/MapRendering/MapRenderBlockBuffer.cs

    r325 r326  
    7171                private void loadTextureFromFile (string _fileName) {
    7272                        byte[] array = cache.LoadTile (zoomLevel, _fileName);
    73                         if (array == null || !blockMap.LoadImage (array) || blockMap.height != Constants.MAP_BLOCK_SIZE ||
    74                             blockMap.width != Constants.MAP_BLOCK_SIZE) {
    75                                 if (array != null) {
    76                                         Log.Error ("Map image tile " + _fileName + " has been corrupted, recreating tile");
    77                                 }
     73                        if (array != null && blockMap.LoadImage (array) && blockMap.height == Constants.MAP_BLOCK_SIZE &&
     74                            blockMap.width == Constants.MAP_BLOCK_SIZE) {
     75                                return;
     76                        }
    7877
    79                                 if (blockMap.height != Constants.MAP_BLOCK_SIZE || blockMap.width != Constants.MAP_BLOCK_SIZE) {
    80                                         blockMap.Resize (Constants.MAP_BLOCK_SIZE, Constants.MAP_BLOCK_SIZE);
    81                                 }
     78                        if (array != null) {
     79                                Log.Error ("Map image tile " + _fileName + " has been corrupted, recreating tile");
     80                        }
    8281
    83                                 for (int x = 0; x < Constants.MAP_BLOCK_SIZE; x++) {
    84                                         for (int y = 0; y < Constants.MAP_BLOCK_SIZE; y++) {
    85                                                 blockMap.SetPixel (x, y, nullColor);
    86                                         }
     82                        if (blockMap.height != Constants.MAP_BLOCK_SIZE || blockMap.width != Constants.MAP_BLOCK_SIZE) {
     83                                blockMap.Resize (Constants.MAP_BLOCK_SIZE, Constants.MAP_BLOCK_SIZE);
     84                        }
     85
     86                        for (int x = 0; x < Constants.MAP_BLOCK_SIZE; x++) {
     87                                for (int y = 0; y < Constants.MAP_BLOCK_SIZE; y++) {
     88                                        blockMap.SetPixel (x, y, nullColor);
    8789                                }
    8890                        }
  • binary-improvements/MapRendering/MapRendering/MapRendering.cs

    r325 r326  
    104104                        Texture2D fullMapTexture = null;
    105105
    106                         Vector2i minChunk = default (Vector2i), maxChunk = default (Vector2i);
    107                         Vector2i minPos = default (Vector2i), maxPos = default (Vector2i);
     106                        Vector2i minChunk, maxChunk;
     107                        Vector2i minPos, maxPos;
    108108                        int widthChunks, heightChunks, widthPix, heightPix;
    109109                        getWorldExtent (rfm, out minChunk, out maxChunk, out minPos, out maxPos, out widthChunks, out heightChunks,
     
    181181                                File.WriteAllBytes (Constants.MAP_DIRECTORY + "/map.png", array);
    182182                                Object.Destroy (fullMapTexture);
    183                                 fullMapTexture = null;
    184183                        }
    185184
     
    190189                }
    191190
    192                 private void SaveAllBlockMaps (object source, ElapsedEventArgs e) {
     191                private void SaveAllBlockMaps () {
    193192                        for (int i = 0; i < Constants.ZOOMLEVELS; i++) {
    194193                                zoomLevelBuffers [i].SaveBlock ();
     
    215214                        msw.ResetAndRestart ();
    216215
    217                         if (dirtyChunks.Count > 0) {
    218                                 List<Vector2i> keys = new List<Vector2i> (dirtyChunks.Keys);
    219                                 List<Vector2i> chunksDone = new List<Vector2i> ();
    220 
    221                                 Vector2i chunkPos = keys [0];
    222                                 chunksDone.Add (chunkPos);
    223 
    224                                 //Log.Out ("Start Dirty: " + chunkPos);
    225 
    226                                 Vector2i block = default (Vector2i), blockOffset = default (Vector2i);
    227                                 getBlockNumber (chunkPos, out block, out blockOffset, Constants.MAP_BLOCK_TO_CHUNK_DIV,
     216                        if (dirtyChunks.Count <= 0) {
     217                                return;
     218                        }
     219
     220                        List<Vector2i> keys = new List<Vector2i> (dirtyChunks.Keys);
     221                        List<Vector2i> chunksDone = new List<Vector2i> ();
     222
     223                        Vector2i chunkPos = keys [0];
     224                        chunksDone.Add (chunkPos);
     225
     226                        //Log.Out ("Start Dirty: " + chunkPos);
     227
     228                        Vector2i block, blockOffset;
     229                        getBlockNumber (chunkPos, out block, out blockOffset, Constants.MAP_BLOCK_TO_CHUNK_DIV,
     230                                Constants.MAP_CHUNK_SIZE);
     231
     232                        zoomLevelBuffers [Constants.ZOOMLEVELS - 1].LoadBlock (block);
     233
     234                        Vector2i v_block, v_blockOffset;
     235                        foreach (Vector2i v in keys) {
     236                                getBlockNumber (v, out v_block, out v_blockOffset, Constants.MAP_BLOCK_TO_CHUNK_DIV,
    228237                                        Constants.MAP_CHUNK_SIZE);
    229 
    230                                 zoomLevelBuffers [Constants.ZOOMLEVELS - 1].LoadBlock (block);
    231 
    232                                 Vector2i v_block = default (Vector2i), v_blockOffset = default (Vector2i);
    233                                 foreach (Vector2i v in keys) {
    234                                         getBlockNumber (v, out v_block, out v_blockOffset, Constants.MAP_BLOCK_TO_CHUNK_DIV,
    235                                                 Constants.MAP_CHUNK_SIZE);
    236                                         if (v_block.Equals (block)) {
    237                                                 //Log.Out ("Dirty: " + v + " render: true");
    238                                                 chunksDone.Add (v);
    239                                                 if (dirtyChunks [v].Length != Constants.MAP_CHUNK_SIZE * Constants.MAP_CHUNK_SIZE) {
    240                                                         Log.Error (string.Format ("Rendering chunk has incorrect data size of {0} instead of {1}",
    241                                                                 dirtyChunks [v].Length, Constants.MAP_CHUNK_SIZE * Constants.MAP_CHUNK_SIZE));
    242                                                 }
    243 
    244                                                 zoomLevelBuffers [Constants.ZOOMLEVELS - 1]
    245                                                         .SetPart (v_blockOffset, Constants.MAP_CHUNK_SIZE, dirtyChunks [v]);
    246                                         }
    247                                 }
    248 
    249                                 foreach (Vector2i v in chunksDone) {
    250                                         dirtyChunks.Remove (v);
    251                                 }
    252 
    253                                 RenderZoomLevel (Constants.ZOOMLEVELS - 1, block);
    254 
    255                                 SaveAllBlockMaps (null, null);
    256                         }
    257                 }
    258 
    259                 private void RenderZoomLevel (int level, Vector2i innerBlock) {
    260                         if (level > 0) {
    261                                 Vector2i block = default (Vector2i), blockOffset = default (Vector2i);
     238                                if (v_block.Equals (block)) {
     239                                        //Log.Out ("Dirty: " + v + " render: true");
     240                                        chunksDone.Add (v);
     241                                        if (dirtyChunks [v].Length != Constants.MAP_CHUNK_SIZE * Constants.MAP_CHUNK_SIZE) {
     242                                                Log.Error (string.Format ("Rendering chunk has incorrect data size of {0} instead of {1}",
     243                                                        dirtyChunks [v].Length, Constants.MAP_CHUNK_SIZE * Constants.MAP_CHUNK_SIZE));
     244                                        }
     245
     246                                        zoomLevelBuffers [Constants.ZOOMLEVELS - 1]
     247                                                .SetPart (v_blockOffset, Constants.MAP_CHUNK_SIZE, dirtyChunks [v]);
     248                                }
     249                        }
     250
     251                        foreach (Vector2i v in chunksDone) {
     252                                dirtyChunks.Remove (v);
     253                        }
     254
     255                        RenderZoomLevel (block);
     256
     257                        SaveAllBlockMaps ();
     258                }
     259
     260                private void RenderZoomLevel (Vector2i innerBlock) {
     261                        int level = Constants.ZOOMLEVELS - 1;
     262                        while (level > 0) {
     263                                Vector2i block, blockOffset;
    262264                                getBlockNumber (innerBlock, out block, out blockOffset, 2, Constants.MAP_BLOCK_SIZE / 2);
    263265
    264266                                zoomLevelBuffers [level - 1].LoadBlock (block);
    265                                 zoomLevelBuffers [level - 1].SetPart (blockOffset, Constants.MAP_BLOCK_SIZE / 2,
    266                                         zoomLevelBuffers [level].GetHalfScaled ());
    267 
    268                                 RenderZoomLevel (level - 1, block);
     267                                zoomLevelBuffers [level - 1].SetPart (blockOffset, Constants.MAP_BLOCK_SIZE / 2, zoomLevelBuffers [level].GetHalfScaled ());
     268
     269                                level = level - 1;
     270                                innerBlock = block;
    269271                        }
    270272                }
     
    290292
    291293                private bool LoadMapInfo () {
    292                         if (File.Exists (Constants.MAP_DIRECTORY + "/mapinfo.json")) {
    293                                 string json = File.ReadAllText (Constants.MAP_DIRECTORY + "/mapinfo.json", Encoding.UTF8);
    294                                 try {
    295                                         JSONNode node = Parser.Parse (json);
    296                                         if (node is JSONObject) {
    297                                                 JSONObject jo = (JSONObject) node;
    298                                                 if (jo.ContainsKey ("blockSize")) {
    299                                                         Constants.MAP_BLOCK_SIZE = ((JSONNumber) jo ["blockSize"]).GetInt ();
    300                                                 }
    301 
    302                                                 if (jo.ContainsKey ("maxZoom")) {
    303                                                         Constants.ZOOMLEVELS = ((JSONNumber) jo ["maxZoom"]).GetInt () + 1;
    304                                                 }
    305 
    306                                                 return true;
    307                                         }
    308                                 } catch (MalformedJSONException e) {
    309                                         Log.Out ("Exception in LoadMapInfo: " + e);
    310                                 } catch (InvalidCastException e) {
    311                                         Log.Out ("Exception in LoadMapInfo: " + e);
    312                                 }
     294                        if (!File.Exists (Constants.MAP_DIRECTORY + "/mapinfo.json")) {
     295                                return false;
     296                        }
     297
     298                        string json = File.ReadAllText (Constants.MAP_DIRECTORY + "/mapinfo.json", Encoding.UTF8);
     299                        try {
     300                                JSONNode node = Parser.Parse (json);
     301                                if (node is JSONObject) {
     302                                        JSONObject jo = (JSONObject) node;
     303                                        if (jo.ContainsKey ("blockSize")) {
     304                                                Constants.MAP_BLOCK_SIZE = ((JSONNumber) jo ["blockSize"]).GetInt ();
     305                                        }
     306
     307                                        if (jo.ContainsKey ("maxZoom")) {
     308                                                Constants.ZOOMLEVELS = ((JSONNumber) jo ["maxZoom"]).GetInt () + 1;
     309                                        }
     310
     311                                        return true;
     312                                }
     313                        } catch (MalformedJSONException e) {
     314                                Log.Out ("Exception in LoadMapInfo: " + e);
     315                        } catch (InvalidCastException e) {
     316                                Log.Out ("Exception in LoadMapInfo: " + e);
    313317                        }
    314318
  • binary-improvements/MapRendering/Web/API/GetLandClaims.cs

    r325 r326  
    5050
    5151                        foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
    52                                 try {
     52//                              try {
    5353                                        JSONObject owner = new JSONObject ();
    5454                                        claimOwners.Add (owner);
     
    7474                                                claimsJson.Add (claim);
    7575                                        }
    76                                 } catch {
    77                                 }
     76//                              } catch {
     77//                              }
    7878                        }
    7979
  • binary-improvements/MapRendering/Web/API/GetPlayerInventory.cs

    r325 r326  
    7575
    7676                internal static JSONNode GetJsonForItem (InvItem _item) {
    77                         if (_item != null) {
    78                                 JSONObject jsonItem = new JSONObject ();
    79                                 jsonItem.Add ("count", new JSONNumber (_item.count));
    80                                 jsonItem.Add ("name", new JSONString (_item.itemName));
    81                                 jsonItem.Add ("icon", new JSONString (_item.icon));
    82                                 jsonItem.Add ("iconcolor", new JSONString (_item.iconcolor));
    83                                 jsonItem.Add ("quality", new JSONNumber (_item.quality));
    84                                 if (_item.quality >= 0) {
    85                                         jsonItem.Add ("qualitycolor", new JSONString (QualityInfo.GetQualityColorHex (_item.quality)));
    86                                 }
    87 
    88                                 return jsonItem;
     77                        if (_item == null) {
     78                                return new JSONNull ();
    8979                        }
    9080
    91                         return new JSONNull ();
     81                        JSONObject jsonItem = new JSONObject ();
     82                        jsonItem.Add ("count", new JSONNumber (_item.count));
     83                        jsonItem.Add ("name", new JSONString (_item.itemName));
     84                        jsonItem.Add ("icon", new JSONString (_item.icon));
     85                        jsonItem.Add ("iconcolor", new JSONString (_item.iconcolor));
     86                        jsonItem.Add ("quality", new JSONNumber (_item.quality));
     87                        if (_item.quality >= 0) {
     88                                jsonItem.Add ("qualitycolor", new JSONString (QualityInfo.GetQualityColorHex (_item.quality)));
     89                        }
     90
     91                        return jsonItem;
     92
    9293                }
    9394        }
  • binary-improvements/MapRendering/Web/API/GetPlayerList.cs

    r325 r326  
    4040                                Player p = playersList [sid, false];
    4141
    42                                 ulong player_steam_ID = 0L;
     42                                ulong player_steam_ID;
    4343                                if (!ulong.TryParse (sid, out player_steam_ID)) {
    4444                                        player_steam_ID = 0L;
     
    6464                                        pJson.Add ("ping", new JSONNumber (p.IsOnline ? p.ClientInfo.ping : -1));
    6565
    66                                         JSONBoolean banned = null;
     66                                        JSONBoolean banned;
    6767                                        if (admTools != null) {
    6868                                                banned = new JSONBoolean (admTools.IsBanned (sid));
     
    132132
    133133                                if (colType == typeof (JSONBoolean)) {
    134                                         bool value = _filterVal.Trim ().ToLower () == "true";
    135                                         return _list.Where (line => (line [_filterCol] as JSONBoolean).GetBool () == value);
     134                                        bool value = StringParsers.ParseBool (_filterVal);
     135                                        return _list.Where (line => ((JSONBoolean) line [_filterCol]).GetBool () == value);
    136136                                }
    137137
     
    143143                                        //Log.Out ("GetPlayerList: Filter on String with Regex '" + _filterVal + "'");
    144144                                        Regex matcher = new Regex (_filterVal, RegexOptions.IgnoreCase);
    145                                         return _list.Where (line => matcher.IsMatch ((line [_filterCol] as JSONString).GetString ()));
     145                                        return _list.Where (line => matcher.IsMatch (((JSONString) line [_filterCol]).GetString ()));
    146146                                }
    147147                        }
     
    185185
    186186                                return _list.Where (delegate (JSONObject line) {
    187                                         double objVal = (line [_filterCol] as JSONNumber).GetDouble ();
     187                                        double objVal = ((JSONNumber) line [_filterCol]).GetDouble ();
    188188                                        switch (matchType) {
    189189                                                case NumberMatchType.Greater:
     
    216216                                if (colType == typeof (JSONNumber)) {
    217217                                        if (_ascending) {
    218                                                 return _list.OrderBy (line => (line [_sortCol] as JSONNumber).GetDouble ());
    219                                         }
    220 
    221                                         return _list.OrderByDescending (line => (line [_sortCol] as JSONNumber).GetDouble ());
     218                                                return _list.OrderBy (line => ((JSONNumber) line [_sortCol]).GetDouble ());
     219                                        }
     220
     221                                        return _list.OrderByDescending (line => ((JSONNumber) line [_sortCol]).GetDouble ());
    222222                                }
    223223
    224224                                if (colType == typeof (JSONBoolean)) {
    225225                                        if (_ascending) {
    226                                                 return _list.OrderBy (line => (line [_sortCol] as JSONBoolean).GetBool ());
    227                                         }
    228 
    229                                         return _list.OrderByDescending (line => (line [_sortCol] as JSONBoolean).GetBool ());
     226                                                return _list.OrderBy (line => ((JSONBoolean) line [_sortCol]).GetBool ());
     227                                        }
     228
     229                                        return _list.OrderByDescending (line => ((JSONBoolean) line [_sortCol]).GetBool ());
    230230                                }
    231231
  • binary-improvements/MapRendering/Web/API/GetPlayersLocation.cs

    r325 r326  
    3131
    3232                                if (listOffline || p.IsOnline) {
    33                                         ulong player_steam_ID = 0L;
     33                                        ulong player_steam_ID;
    3434                                        if (!ulong.TryParse (sid, out player_steam_ID)) {
    3535                                                player_steam_ID = 0L;
  • binary-improvements/MapRendering/Web/API/GetPlayersOnline.cs

    r325 r326  
    4141                                p.Add ("totalplaytime", new JSONNumber (player != null ? player.TotalPlayTime : -1));
    4242                                p.Add ("lastonline", new JSONString (player != null ? player.LastOnline.ToString ("s") : string.Empty));
    43                                 p.Add ("ping", new JSONNumber (ci != null ? ci.ping : -1));
     43                                p.Add ("ping", new JSONNumber (ci.ping));
    4444
    4545                                players.Add (p);
  • binary-improvements/MapRendering/Web/API/WebAPI.cs

    r325 r326  
    55namespace AllocsFixes.NetConnections.Servers.Web.API {
    66        public abstract class WebAPI {
     7                public readonly string Name;
     8
     9                protected WebAPI () {
     10                        Name = GetType ().Name;
     11                }
     12
    713                public static void WriteJSON (HttpListenerResponse resp, JSONNode root) {
    814                        StringBuilder sb = new StringBuilder ();
  • binary-improvements/MapRendering/Web/ConnectionHandler.cs

    r325 r326  
    55        public class ConnectionHandler {
    66                private readonly Dictionary<string, WebConnection> connections = new Dictionary<string, WebConnection> ();
    7                 private Web parent;
    8 
    9                 public ConnectionHandler (Web _parent) {
    10                         parent = _parent;
    11                 }
    127
    138                public WebConnection IsLoggedIn (string _sessionId, string _endpoint) {
  • binary-improvements/MapRendering/Web/Handlers/ApiHandler.cs

    r325 r326  
    77namespace AllocsFixes.NetConnections.Servers.Web.Handlers {
    88        public class ApiHandler : PathHandler {
    9                 private readonly Dictionary<string, WebAPI> apis = new Dictionary<string, WebAPI> ();
     9                private readonly Dictionary<string, WebAPI> apis = new CaseInsensitiveStringDictionary<WebAPI> ();
    1010                private readonly string staticPart;
    1111
     
    1818                                        if (ctor != null) {
    1919                                                WebAPI apiInstance = (WebAPI) ctor.Invoke (new object [0]);
    20                                                 addApi (t.Name.ToLower (), apiInstance);
     20                                                addApi (apiInstance.Name, apiInstance);
    2121                                        }
    2222                                }
     
    5252                        }
    5353
    54                         foreach (KeyValuePair<string, WebAPI> kvp in apis) {
    55                                 if (apiName.StartsWith (kvp.Key)) {
    56                                         try {
    57                                                 kvp.Value.HandleRequest (req, resp, user, permissionLevel);
    58                                                 return;
    59                                         } catch (Exception e) {
    60                                                 Log.Error ("Error in ApiHandler.HandleRequest(): Handler {0} threw an exception:", kvp.Key);
    61                                                 Log.Exception (e);
    62                                                 resp.StatusCode = (int) HttpStatusCode.InternalServerError;
    63                                                 return;
    64                                         }
     54                        WebAPI api;
     55                        if (apis.TryGetValue (apiName, out api)) {
     56                                try {
     57                                        api.HandleRequest (req, resp, user, permissionLevel);
     58                                        return;
     59                                } catch (Exception e) {
     60                                        Log.Error ("Error in ApiHandler.HandleRequest(): Handler {0} threw an exception:", api.Name);
     61                                        Log.Exception (e);
     62                                        resp.StatusCode = (int) HttpStatusCode.InternalServerError;
     63                                        return;
    6564                                }
    6665                        }
    67 
     66                       
    6867                        Log.Out ("Error in ApiHandler.HandleRequest(): No handler found for API \"" + apiName + "\"");
    6968                        resp.StatusCode = (int) HttpStatusCode.NotFound;
  • binary-improvements/MapRendering/Web/Handlers/ItemIconHandler.cs

    r325 r326  
    3737                        requestFileName = requestFileName.Remove (requestFileName.LastIndexOf ('.'));
    3838
    39                         if (icons.ContainsKey (requestFileName) && req.Url.AbsolutePath.ToLower ().EndsWith (".png")) {
     39                        if (icons.ContainsKey (requestFileName) && req.Url.AbsolutePath.EndsWith (".png", StringComparison.OrdinalIgnoreCase)) {
    4040                                resp.ContentType = MimeType.GetMimeType (".png");
    4141
     
    128128                                                        foreach (string file in Directory.GetFiles (modIconsPath)) {
    129129                                                                try {
    130                                                                         if (file.ToLower ().EndsWith (".png")) {
     130                                                                        if (file.EndsWith (".png", StringComparison.OrdinalIgnoreCase)) {
    131131                                                                                string name = Path.GetFileNameWithoutExtension (file);
    132132                                                                                Texture2D tex = new Texture2D (1, 1, TextureFormat.ARGB32, false);
  • binary-improvements/MapRendering/Web/LogBuffer.cs

    r325 r326  
    1515
    1616                private int listOffset;
     17
     18                public static void Init () {
     19                        if (instance == null) {
     20                                instance = new LogBuffer ();
     21                        };
     22                }
    1723
    1824                private LogBuffer () {
  • binary-improvements/MapRendering/Web/OpenID.cs

    r325 r326  
    8787                                                }
    8888
    89                                                 if (chainStatus.Status == X509ChainStatusFlags.UntrustedRoot && chainEl.Certificate == caCert) {
     89                                                if (chainStatus.Status == X509ChainStatusFlags.UntrustedRoot && chainEl.Certificate.Equals (caCert)) {
    9090                                                        // This status is about the cert being an untrusted root certificate but the certificate is one of those we added, ignore
    9191                                                        continue;
     
    149149
    150150                        string steamIdString = getValue (_req, "openid.claimed_id");
    151                         ulong steamId = 0;
     151                        ulong steamId;
    152152                        Match steamIdMatch = steamIdUrlMatcher.Match (steamIdString);
    153153                        if (steamIdMatch.Success) {
     
    190190
    191191                        HttpWebResponse response = (HttpWebResponse) request.GetResponse ();
    192                         string responseString = null;
     192                        string responseString;
    193193                        using (Stream st = response.GetResponseStream ()) {
    194194                                using (StreamReader str = new StreamReader (st)) {
     
    197197                        }
    198198
    199                         if (responseString.ToLower ().Contains ("is_valid:true")) {
     199                        if (responseString.ContainsCaseInsensitive ("is_valid:true")) {
    200200                                return steamId;
    201201                        }
  • binary-improvements/MapRendering/Web/Web.cs

    r325 r326  
    107107                                );
    108108
    109                                 connectionHandler = new ConnectionHandler (this);
     109                                connectionHandler = new ConnectionHandler ();
    110110
    111111                                _listener.Prefixes.Add (string.Format ("http://*:{0}/", webPort + 2));
     
    149149
    150150                private void HandleRequest (IAsyncResult result) {
    151                         if (_listener.IsListening) {
    152                                 Interlocked.Increment (ref handlingCount);
    153                                 Interlocked.Increment (ref currentHandlers);
     151                        if (!_listener.IsListening) {
     152                                return;
     153                        }
     154
     155                        Interlocked.Increment (ref handlingCount);
     156                        Interlocked.Increment (ref currentHandlers);
    154157
    155158//                              MicroStopwatch msw = new MicroStopwatch ();
    156                                 HttpListenerContext ctx = _listener.EndGetContext (result);
    157                                 _listener.BeginGetContext (HandleRequest, _listener);
    158                                 try {
    159                                         HttpListenerRequest request = ctx.Request;
    160                                         HttpListenerResponse response = ctx.Response;
    161                                         response.SendChunked = false;
    162 
    163                                         response.ProtocolVersion = new Version ("1.1");
    164 
    165                                         WebConnection conn;
    166                                         int permissionLevel = DoAuthentication (request, out conn);
    167 
    168 
    169                                         //Log.Out ("Login status: conn!=null: {0}, permissionlevel: {1}", conn != null, permissionLevel);
    170 
    171 
    172                                         if (conn != null) {
    173                                                 Cookie cookie = new Cookie ("sid", conn.SessionID, "/");
    174                                                 cookie.Expired = false;
    175                                                 cookie.Expires = new DateTime (2020, 1, 1);
    176                                                 cookie.HttpOnly = true;
    177                                                 cookie.Secure = false;
    178                                                 response.AppendCookie (cookie);
    179                                         }
    180 
    181                                         // No game yet -> fail request
    182                                         if (GameManager.Instance.World == null) {
    183                                                 response.StatusCode = (int) HttpStatusCode.ServiceUnavailable;
    184                                                 return;
    185                                         }
    186 
    187                                         if (request.Url.AbsolutePath.Length < 2) {
    188                                                 handlers ["/index.htm"].HandleRequest (request, response, conn, permissionLevel);
    189                                                 return;
    190                                         } else {
    191                                                 foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
    192                                                         if (request.Url.AbsolutePath.StartsWith (kvp.Key)) {
    193                                                                 if (!kvp.Value.IsAuthorizedForHandler (conn, permissionLevel)) {
    194                                                                         response.StatusCode = (int) HttpStatusCode.Forbidden;
    195                                                                         if (conn != null) {
    196                                                                                 //Log.Out ("Web.HandleRequest: user '{0}' not allowed to access '{1}'", conn.SteamID, kvp.Value.ModuleName);
    197                                                                         }
    198                                                                 } else {
    199                                                                         kvp.Value.HandleRequest (request, response, conn, permissionLevel);
     159                        HttpListenerContext ctx = _listener.EndGetContext (result);
     160                        _listener.BeginGetContext (HandleRequest, _listener);
     161                        try {
     162                                HttpListenerRequest request = ctx.Request;
     163                                HttpListenerResponse response = ctx.Response;
     164                                response.SendChunked = false;
     165
     166                                response.ProtocolVersion = new Version ("1.1");
     167
     168                                WebConnection conn;
     169                                int permissionLevel = DoAuthentication (request, out conn);
     170
     171
     172                                //Log.Out ("Login status: conn!=null: {0}, permissionlevel: {1}", conn != null, permissionLevel);
     173
     174
     175                                if (conn != null) {
     176                                        Cookie cookie = new Cookie ("sid", conn.SessionID, "/");
     177                                        cookie.Expired = false;
     178                                        cookie.Expires = new DateTime (2020, 1, 1);
     179                                        cookie.HttpOnly = true;
     180                                        cookie.Secure = false;
     181                                        response.AppendCookie (cookie);
     182                                }
     183
     184                                // No game yet -> fail request
     185                                if (GameManager.Instance.World == null) {
     186                                        response.StatusCode = (int) HttpStatusCode.ServiceUnavailable;
     187                                        return;
     188                                }
     189
     190                                if (request.Url.AbsolutePath.Length < 2) {
     191                                        handlers ["/index.htm"].HandleRequest (request, response, conn, permissionLevel);
     192                                        return;
     193                                } else {
     194                                        foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
     195                                                if (request.Url.AbsolutePath.StartsWith (kvp.Key)) {
     196                                                        if (!kvp.Value.IsAuthorizedForHandler (conn, permissionLevel)) {
     197                                                                response.StatusCode = (int) HttpStatusCode.Forbidden;
     198                                                                if (conn != null) {
     199                                                                        //Log.Out ("Web.HandleRequest: user '{0}' not allowed to access '{1}'", conn.SteamID, kvp.Value.ModuleName);
    200200                                                                }
    201 
    202                                                                 return;
     201                                                        } else {
     202                                                                kvp.Value.HandleRequest (request, response, conn, permissionLevel);
    203203                                                        }
     204
     205                                                        return;
    204206                                                }
    205207                                        }
    206 
    207                                         // Not really relevant for non-debugging purposes:
    208                                         //Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + request.Url.AbsolutePath + "\"");
    209                                         response.StatusCode = (int) HttpStatusCode.NotFound;
    210                                 } catch (IOException e) {
    211                                         if (e.InnerException is SocketException) {
    212                                                 Log.Out ("Error in Web.HandleRequest(): Remote host closed connection: " +
    213                                                          e.InnerException.Message);
    214                                         } else {
    215                                                 Log.Out ("Error (IO) in Web.HandleRequest(): " + e);
    216                                         }
    217                                 } catch (Exception e) {
    218                                         Log.Out ("Error in Web.HandleRequest(): " + e);
    219                                 } finally {
    220                                         if (ctx != null && !ctx.Response.SendChunked) {
    221                                                 ctx.Response.Close ();
    222                                         }
     208                                }
     209
     210                                // Not really relevant for non-debugging purposes:
     211                                //Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + request.Url.AbsolutePath + "\"");
     212                                response.StatusCode = (int) HttpStatusCode.NotFound;
     213                        } catch (IOException e) {
     214                                if (e.InnerException is SocketException) {
     215                                        Log.Out ("Error in Web.HandleRequest(): Remote host closed connection: " +
     216                                                 e.InnerException.Message);
     217                                } else {
     218                                        Log.Out ("Error (IO) in Web.HandleRequest(): " + e);
     219                                }
     220                        } catch (Exception e) {
     221                                Log.Out ("Error in Web.HandleRequest(): " + e);
     222                        } finally {
     223                                if (ctx != null && !ctx.Response.SendChunked) {
     224                                        ctx.Response.Close ();
     225                                }
    223226
    224227//                                      msw.Stop ();
    225228//                                      totalHandlingTime += msw.ElapsedMicroseconds;
    226229//                                      Log.Out ("Web.HandleRequest(): Took {0} µs", msw.ElapsedMicroseconds);
    227                                         Interlocked.Decrement (ref currentHandlers);
    228                                 }
     230                                Interlocked.Decrement (ref currentHandlers);
    229231                        }
    230232                }
  • binary-improvements/MapRendering/Web/WebConnection.cs

    r325 r326  
    66        public class WebConnection : ConsoleConnectionAbstract {
    77                private readonly DateTime login;
    8                 private readonly List<string> outputLines = new List<string> ();
     8//              private readonly List<string> outputLines = new List<string> ();
    99                private DateTime lastAction;
    1010                private readonly string conDescription;
     
    3030
    3131                public static bool CanViewAllPlayers (int _permissionLevel) {
    32                         bool val = false;
     32                        const int defaultPermissionLevel = 0;
    3333
    34                         try {
    35                                 const int defaultPermissionLevel = 0;
     34                        bool val = _permissionLevel <= defaultPermissionLevel;
    3635
    37                                 val = _permissionLevel <= defaultPermissionLevel;
    38 
    39                                 foreach (WebPermissions.WebModulePermission wap in WebPermissions.Instance.GetModules ()) {
    40                                         if (wap.module.Trim ().ToLower () == "webapi.viewallplayers") {
    41                                                 val = _permissionLevel <= wap.permissionLevel;
    42                                         }
     36                        foreach (WebPermissions.WebModulePermission wap in WebPermissions.Instance.GetModules ()) {
     37                                if (wap.module.EqualsCaseInsensitive ("webapi.viewallplayers")) {
     38                                        val = _permissionLevel <= wap.permissionLevel;
    4339                                }
    44                         } catch {
    4540                        }
    4641
     
    4944
    5045                public static bool CanViewAllClaims (int _permissionLevel) {
    51                         bool val = false;
     46                        const int defaultPermissionLevel = 0;
    5247
    53                         try {
    54                                 const int defaultPermissionLevel = 0;
     48                        bool val = _permissionLevel <= defaultPermissionLevel;
    5549
    56                                 val = _permissionLevel <= defaultPermissionLevel;
    57 
    58                                 foreach (WebPermissions.WebModulePermission wap in WebPermissions.Instance.GetModules ()) {
    59                                         if (wap.module.Trim ().ToLower () == "webapi.viewallclaims") {
    60                                                 val = _permissionLevel <= wap.permissionLevel;
    61                                         }
     50                        foreach (WebPermissions.WebModulePermission wap in WebPermissions.Instance.GetModules ()) {
     51                                if (wap.module.EqualsCaseInsensitive ("webapi.viewallclaims")) {
     52                                        val = _permissionLevel <= wap.permissionLevel;
    6253                                }
    63                         } catch {
    6454                        }
    6555
     
    7666
    7767                public override void SendLine (string _text) {
    78                         outputLines.Add (_text);
     68//                      outputLines.Add (_text);
    7969                }
    8070
    8171                public override void SendLines (List<string> _output) {
    82                         outputLines.AddRange (_output);
     72//                      outputLines.AddRange (_output);
    8373                }
    8474
  • binary-improvements/MapRendering/Web/WebPermissions.cs

    r325 r326  
    1212                        new Dictionary<string, WebModulePermission> ();
    1313
    14                 private Dictionary<string, AdminToken> admintokens;
     14                private readonly Dictionary<string, AdminToken> admintokens = new CaseInsensitiveStringDictionary<AdminToken> ();
    1515                private FileSystemWatcher fileWatcher;
    1616
    17                 private Dictionary<string, WebModulePermission> modules;
     17                private readonly Dictionary<string, WebModulePermission> modules = new CaseInsensitiveStringDictionary<WebModulePermission> ();
    1818
    1919                public WebPermissions () {
     
    4949
    5050                public WebModulePermission GetModulePermission (string _module) {
    51                         if (modules.ContainsKey (_module.ToLower ())) {
    52                                 return modules [_module.ToLower ()];
     51                        WebModulePermission result;
     52                        if (modules.TryGetValue (_module, out result)) {
     53                                return result;
    5354                        }
    5455
     
    8384                public AdminToken[] GetAdmins () {
    8485                        AdminToken[] result = new AdminToken[admintokens.Count];
    85                         admintokens.Values.CopyTo (result, 0);
     86                        admintokens.CopyValuesTo (result);
    8687                        return result;
    8788                }
     
    9091                // Commands
    9192                public void AddModulePermission (string _module, int _permissionLevel, bool _save = true) {
    92                         WebModulePermission p = new WebModulePermission (_module.ToLower (), _permissionLevel);
     93                        WebModulePermission p = new WebModulePermission (_module, _permissionLevel);
    9394                        lock (this) {
    9495                                modules [_module] = p;
     
    100101
    101102                public void AddKnownModule (string _module, int _defaultPermission) {
    102                         if (!string.IsNullOrEmpty (_module)) {
    103                                 lock (this) {
    104                                         if (!IsKnownModule (_module)) {
    105                                                 knownModules.Add (_module, new WebModulePermission (_module, _defaultPermission));
    106                                         }
    107 
    108                                         if (_defaultPermission > 0 && !modules.ContainsKey (_module.ToLower ())) {
    109                                                 AddModulePermission (_module, _defaultPermission);
    110                                         }
     103                        if (string.IsNullOrEmpty (_module)) {
     104                                return;
     105                        }
     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);
    111114                                }
    112115                        }
     
    114117
    115118                public bool IsKnownModule (string _module) {
    116                         if (!string.IsNullOrEmpty (_module)) {
    117                                 lock (this) {
    118                                         return knownModules.ContainsKey (_module);
    119                                 }
    120                         }
    121 
    122                         return false;
     119                        if (string.IsNullOrEmpty (_module)) {
     120                                return false;
     121                        }
     122
     123                        lock (this) {
     124                                return knownModules.ContainsKey (_module);
     125                        }
     126
    123127                }
    124128
    125129                public void RemoveModulePermission (string _module, bool _save = true) {
    126130                        lock (this) {
    127                                 modules.Remove (_module.ToLower ());
     131                                modules.Remove (_module);
    128132                                if (_save) {
    129133                                        Save ();
     
    174178
    175179                public void Load () {
    176                         admintokens = new Dictionary<string, AdminToken> ();
    177                         modules = new Dictionary<string, WebModulePermission> ();
     180                        admintokens.Clear ();
     181                        modules.Clear ();
    178182
    179183                        if (!Utils.FileExists (GetFullPath ())) {
     
    190194                                xmlDoc.Load (GetFullPath ());
    191195                        } catch (XmlException e) {
    192                                 Log.Error (string.Format ("Failed loading permissions file: {0}", e.Message));
     196                                Log.Error ("Failed loading permissions file: " + e.Message);
    193197                                return;
    194198                        }
     
    196200                        XmlNode adminToolsNode = xmlDoc.DocumentElement;
    197201
     202                        if (adminToolsNode == null) {
     203                                Log.Error ("Failed loading permissions file: No DocumentElement found");
     204                                return;
     205                        }
     206                       
    198207                        foreach (XmlNode childNode in adminToolsNode.ChildNodes) {
    199208                                if (childNode.Name == "admintokens") {
     
    230239                                                string name = lineItem.GetAttribute ("name");
    231240                                                string token = lineItem.GetAttribute ("token");
    232                                                 int permissionLevel = 2000;
     241                                                int permissionLevel;
    233242                                                if (!int.TryParse (lineItem.GetAttribute ("permission_level"), out permissionLevel)) {
    234243                                                        Log.Warning (
     
    267276                                                }
    268277
    269                                                 int permissionLevel = 0;
     278                                                int permissionLevel;
    270279                                                if (!int.TryParse (lineItem.GetAttribute ("permission_level"), out permissionLevel)) {
    271280                                                        Log.Warning (
     
    275284                                                }
    276285
    277                                                 AddModulePermission (lineItem.GetAttribute ("module").ToLower (), permissionLevel, false);
     286                                                AddModulePermission (lineItem.GetAttribute ("module"), permissionLevel, false);
    278287                                        }
    279288                                }
Note: See TracChangeset for help on using the changeset viewer.