Changeset 384


Ignore:
Timestamp:
Aug 3, 2022, 9:10:12 PM (11 days ago)
Author:
alloc
Message:

Added support for webmods to the backend

Location:
binary-improvements2/MapRendering
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2/MapRendering/Web/Handlers/ApiHandler.cs

    r382 r384  
    1111                private readonly Dictionary<string, WebAPI> apis = new CaseInsensitiveStringDictionary<WebAPI> ();
    1212
    13                 public ApiHandler (string _moduleName = null) : base (_moduleName) {
     13                public ApiHandler () : base (null) {
    1414
     15                }
     16
     17                public override void SetBasePathAndParent (Web _parent, string _relativePath) {
     18                        base.SetBasePathAndParent (_parent, _relativePath);
     19
     20                        Type[] apiWithParentCtorTypes = { typeof (Web) };
     21                        Object[] apiWithParentCtorArgs = { _parent };
     22
     23                        Type[] apiEmptyCtorTypes = { };
     24                        Object[] apiEmptyCtorArgs = { };
     25                       
    1526                        foreach (Type t in Assembly.GetExecutingAssembly ().GetTypes ()) {
    1627                                if (!t.IsAbstract && t.IsSubclassOf (typeof (WebAPI))) {
    17                                         ConstructorInfo ctor = t.GetConstructor (new Type [0]);
     28                                        ConstructorInfo ctor = t.GetConstructor (apiWithParentCtorTypes);
    1829                                        if (ctor != null) {
    19                                                 WebAPI apiInstance = (WebAPI) ctor.Invoke (new object [0]);
     30                                                WebAPI apiInstance = (WebAPI) ctor.Invoke (apiWithParentCtorArgs);
     31                                                addApi (apiInstance);
     32                                                continue;
     33                                        }
     34                                       
     35                                        ctor = t.GetConstructor (apiEmptyCtorTypes);
     36                                        if (ctor != null) {
     37                                                WebAPI apiInstance = (WebAPI) ctor.Invoke (apiEmptyCtorArgs);
    2038                                                addApi (apiInstance);
    2139                                        }
  • binary-improvements2/MapRendering/Web/Web.cs

    r383 r384  
    1717        public class Web : IConsoleServer {
    1818                private const int guestPermissionLevel = 2000;
    19                 private const string indexPagePath = "/app";
     19                private const string indexPageUrl = "/app";
    2020               
    2121                public static int handlingCount;
     
    2323                public static long totalHandlingTime = 0;
    2424                private readonly List<AbsHandler> handlers = new List<AbsHandler> ();
     25                public readonly List<WebMod> webMods = new List<WebMod> ();
    2526                private readonly ConnectionHandler connectionHandler;
    2627
     
    6465                                );
    6566                               
     67                                // Do mods relatively early as they should not be requested a lot, unlike the later registrations, especially for API and map tiles
     68                                RegisterWebMods (useStaticCache);
     69
    6670                                RegisterPathHandler ("/session/", new SessionHandler (webfilesFolder, connectionHandler));
    6771                                RegisterPathHandler ("/userstatus", new UserStatusHandler ());
     72                                RegisterPathHandler ("/sse/", new SseHandler ());
    6873                                RegisterPathHandler ("/files/", new StaticHandler (
    69                                                 webfilesFolder,
    70                                                 useStaticCache ? (AbstractCache) new SimpleCache () : new DirectAccess (),
    71                                                 false)
     74                                        webfilesFolder,
     75                                        useStaticCache ? (AbstractCache) new SimpleCache () : new DirectAccess (),
     76                                        false)
    7277                                );
    7378                                RegisterPathHandler ("/itemicons/", new ItemIconHandler (true));
    7479                                RegisterPathHandler ("/map/", new StaticHandler (
    75                                                 GameIO.GetSaveGameDir () + "/map",
    76                                                 MapRendering.MapRendering.GetTileCache (),
    77                                                 false,
    78                                                 "web.map")
     80                                        GameIO.GetSaveGameDir () + "/map",
     81                                        MapRendering.MapRendering.GetTileCache (),
     82                                        false,
     83                                        "web.map")
    7984                                );
    8085                                RegisterPathHandler ("/api/", new ApiHandler ());
    81                                 RegisterPathHandler ("/sse/", new SseHandler ());
    8286
    8387                                listener.Prefixes.Add ($"http://+:{webPort}/");
     
    105109                        handlers.Add (_handler);
    106110                        _handler.SetBasePathAndParent (this, _urlBasePath);
     111                }
     112
     113                private void RegisterWebMods (bool _useStaticCache) {
     114                        foreach (Mod mod in ModManager.GetLoadedMods ()) {
     115                                try {
     116                                        string webModPath = mod.Path + "/WebMod";
     117                                        if (!Directory.Exists (webModPath)) {
     118                                                continue;
     119                                        }
     120
     121                                        try {
     122                                                WebMod webMod = new WebMod (this, mod, _useStaticCache);
     123                                                webMods.Add (webMod);
     124                                        } catch (InvalidDataException e) {
     125                                                Log.Error ($"Could not load webmod from mod {mod.ModInfo.Name.Value}: {e.Message}");
     126                                        }
     127                                } catch (Exception e) {
     128                                        Log.Error ("Failed loading web mods from mod " + mod.ModInfo.Name.Value);
     129                                        Log.Exception (e);
     130                                }
     131                        }
    107132                }
    108133
     
    198223
    199224                                if (requestPath.Length < 2) {
    200                                         response.Redirect (indexPagePath);
     225                                        response.Redirect (indexPageUrl);
    201226                                        return;
    202227                                }
  • binary-improvements2/MapRendering/WebAndMapRendering.csproj

    r382 r384  
    8787    <Compile Include="Web\API\GetAnimalsLocation.cs" />
    8888    <Compile Include="Web\API\GetHostileLocation.cs" />
     89    <Compile Include="Web\API\GetWebMods.cs" />
    8990    <Compile Include="Web\API\Null.cs" />
    9091    <Compile Include="Web\Handlers\RewriteHandler.cs" />
     
    104105    <Compile Include="Web\OpenID.cs" />
    105106    <Compile Include="Web\ConnectionHandler.cs" />
     107    <Compile Include="Web\WebMod.cs" />
    106108    <Compile Include="Web\WebPermissions.cs" />
    107109    <Compile Include="Web\Handlers\ApiHandler.cs" />
Note: See TracChangeset for help on using the changeset viewer.