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:
5 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2

    • Property svn:ignore
      •  

        old new  
         1.idea
        12bin
        2 .idea
         3server-fixes.sln.DotSettings.user
  • 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
Note: See TracChangeset for help on using the changeset viewer.