Changeset 389


Ignore:
Timestamp:
Aug 7, 2022, 1:11:51 AM (2 years ago)
Author:
alloc
Message:

Finished up REST API base
Made API handler look for APIs in all loaded mods

Location:
binary-improvements2
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2

    • Property svn:ignore
      •  

        old new  
         1.idea
        12bin
        2 .idea
         3server-fixes.sln.DotSettings.user
  • binary-improvements2/7dtd-server-fixes

    • Property svn:ignore
      •  

        old new  
         1bin
        12obj
  • binary-improvements2/7dtd-server-fixes/src/JSON/JSONBoolean.cs

    r351 r389  
    3434                        throw new MalformedJSONException ("No valid boolean found");
    3535                }
     36
     37                public override string AsString => value ? "true" : "false";
     38                public override int AsInt => value ? 1 : 0;
     39                public override double AsDouble => AsInt;
    3640        }
    3741}
  • binary-improvements2/7dtd-server-fixes/src/JSON/JSONNull.cs

    r351 r389  
     1using System;
    12using System.Text;
    23
     
    1819                        return new JSONNull ();
    1920                }
     21
     22                public override string AsString => throw new NotSupportedException ();
     23                public override int AsInt => throw new NotSupportedException ();
     24                public override double AsDouble => throw new NotSupportedException ();
    2025        }
    2126}
  • binary-improvements2/7dtd-server-fixes/src/JSON/JSONNumber.cs

    r351 r389  
    109109                        throw new MalformedJSONException ("End of JSON reached before parsing number finished");
    110110                }
     111
     112                public override string AsString => value.ToCultureInvariantString ();
     113                public override int AsInt => GetInt ();
     114                public override double AsDouble => value;
    111115        }
    112116}
  • binary-improvements2/7dtd-server-fixes/src/JSON/JSONObject.cs

    r383 r389  
    77
    88                public JSONNode this [string _name] {
    9                         get { return nodes [_name]; }
    10                         set { nodes [_name] = value; }
     9                        get => nodes [_name];
     10                        set => nodes [_name] = value;
    1111                }
    1212
    13                 public int Count {
    14                         get { return nodes.Count; }
    15                 }
     13                public int Count => nodes.Count;
    1614
    17                 public List<string> Keys {
    18                         get { return new List<string> (nodes.Keys); }
    19                 }
     15                public List<string> Keys => new List<string> (nodes.Keys);
    2016
    2117                public bool ContainsKey (string _name) {
    2218                        return nodes.ContainsKey (_name);
     19                }
     20
     21                public bool TryGetValue (string _name, out JSONNode _node) {
     22                        return nodes.TryGetValue (_name, out _node);
    2323                }
    2424
  • binary-improvements2/7dtd-server-fixes/src/JSON/JSONString.cs

    r351 r389  
    114114                        throw new MalformedJSONException ("End of JSON reached before parsing string finished");
    115115                }
     116
     117                public override string AsString => value;
     118                public override int AsInt => int.Parse (value);
     119                public override double AsDouble => double.Parse (value);
    116120        }
    117121}
  • binary-improvements2/7dtd-server-fixes/src/JSON/JSONValue.cs

    r325 r389  
    11namespace AllocsFixes.JSON {
    22        public abstract class JSONValue : JSONNode {
     3                public abstract string AsString { get; }
     4                public abstract int AsInt { get; }
     5                public abstract double AsDouble { get; }
    36        }
    47}
  • binary-improvements2/AllocsCommands

    • Property svn:ignore
      •  

        old new  
         1bin
        12obj
  • binary-improvements2/MapRendering

    • Property svn:ignore
      •  

        old new  
         1bin
        12obj
  • binary-improvements2/MapRendering/Web/API/AbsRestApi.cs

    r388 r389  
    105105                }
    106106
     107                protected bool TryGetJsonField (JSONObject _body, string _fieldName, out int _value) {
     108                        _value = default;
     109                       
     110                        if (!_body.TryGetValue (_fieldName, out JSONNode fieldNode)) {
     111                                return false;
     112                        }
     113
     114                        if (!(fieldNode is JSONValue valueField)) {
     115                                return false;
     116                        }
     117
     118                        try {
     119                                _value = valueField.AsInt;
     120                                return true;
     121                        } catch (Exception) {
     122                                return false;
     123                        }
     124                }
     125
    107126                protected abstract void HandleRestGet (RequestContext _context);
    108127
  • binary-improvements2/MapRendering/Web/Handlers/ApiHandler.cs

    r387 r389  
    2222                        Object[] apiEmptyCtorArgs = { };
    2323                       
    24                         foreach (Type t in Assembly.GetExecutingAssembly ().GetTypes ()) {
    25                                 if (!t.IsAbstract && t.IsSubclassOf (typeof (AbsWebAPI))) {
    26                                         ConstructorInfo ctor = t.GetConstructor (apiWithParentCtorTypes);
    27                                         if (ctor != null) {
    28                                                 AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiWithParentCtorArgs);
    29                                                 addApi (apiInstance);
    30                                                 continue;
    31                                         }
     24                       
     25                        ReflectionHelpers.FindTypesImplementingBase (typeof (AbsWebAPI), _type => {
     26                                ConstructorInfo ctor = _type.GetConstructor (apiWithParentCtorTypes);
     27                                if (ctor != null) {
     28                                        AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiWithParentCtorArgs);
     29                                        addApi (apiInstance);
     30                                        return;
     31                                }
    3232                                       
    33                                         ctor = t.GetConstructor (apiEmptyCtorTypes);
    34                                         if (ctor != null) {
    35                                                 AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiEmptyCtorArgs);
    36                                                 addApi (apiInstance);
    37                                         }
     33                                ctor = _type.GetConstructor (apiEmptyCtorTypes);
     34                                if (ctor != null) {
     35                                        AbsWebAPI apiInstance = (AbsWebAPI) ctor.Invoke (apiEmptyCtorArgs);
     36                                        addApi (apiInstance);
    3837                                }
    39                         }
     38                        });
    4039
    4140                        // Permissions that don't map to a real API
  • binary-improvements2/MapRendering/Web/WebUtils.cs

    r387 r389  
    2525                        netWriteSampler.Begin ();
    2626#endif
    27                         WriteText (_resp, sb.ToString(), _mimeType: MimeJson);
     27                        WriteText (_resp, sb.ToString(), _statusCode, MimeJson);
    2828#if ENABLE_PROFILER
    2929                        netWriteSampler.End ();
     
    3232
    3333                public static void WriteText (HttpListenerResponse _resp, string _text, HttpStatusCode _statusCode = HttpStatusCode.OK, string _mimeType = null) {
     34                        _resp.StatusCode = (int)_statusCode;
     35                        _resp.ContentType = _mimeType ?? MimePlain;
     36                        _resp.ContentEncoding = Encoding.UTF8;
     37
    3438                        byte[] buf = Encoding.UTF8.GetBytes (_text);
    3539                        _resp.ContentLength64 = buf.Length;
    3640                        _resp.OutputStream.Write (buf, 0, buf.Length);
    37                        
    38                         _resp.ContentType = _mimeType ?? MimePlain;
    39                         _resp.ContentEncoding = Encoding.UTF8;
    40                         _resp.StatusCode = (int)_statusCode;
    4141                }
    4242
  • binary-improvements2/SpaceWizards.HttpListener

    • Property svn:ignore set to
      obj
Note: See TracChangeset for help on using the changeset viewer.