Ignore:
Timestamp:
Jan 27, 2023, 7:28:00 PM (22 months ago)
Author:
alloc
Message:
  • Major refactoring
  • Using Utf8Json for (de)serialization
  • Moving APIs to REST
  • Removing dependencies from WebServer and MapRenderer to ServerFixes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2/WebServer/src/Web.cs

    r398 r402  
    33using System.IO;
    44using System.Net.Sockets;
    5 using AllocsFixes.FileCache;
    6 using MapRendering;
    75using SpaceWizards.HttpListener;
    86using UnityEngine;
     7using Webserver.FileCache;
    98using Webserver.UrlHandlers;
    109using Cookie = System.Net.Cookie;
     
    1413namespace Webserver {
    1514        public class Web : IConsoleServer {
     15                public static event Action<Web> ServerInitialized;
     16               
    1617                private const int guestPermissionLevel = 2000;
    1718                private const string indexPageUrl = "/app";
     
    2627                public Web (string _modInstancePath) {
    2728                        try {
    28                                 int webPort = GamePrefs.GetInt (EnumUtils.Parse<EnumGamePrefs> ("ControlPanelPort"));
     29                                int webPort = GamePrefs.GetInt (EnumUtils.Parse<EnumGamePrefs> (nameof (EnumGamePrefs.ControlPanelPort)));
    2930                                if (webPort < 1 || webPort > 65533) {
    3031                                        Log.Out ("[Web] Webserver not started (ControlPanelPort not within 1-65533)");
     
    4445
    4546                                string webfilesFolder = DetectWebserverFolder (_modInstancePath);
    46                                 string webfilesFolderLegacy = _modInstancePath + "/weblegacy";
     47                                string webfilesFolderLegacy = $"{_modInstancePath}/weblegacy";
    4748
    4849                                connectionHandler = new ConnectionHandler ();
     
    5657                                RegisterPathHandler ("/weblegacy", new StaticHandler (
    5758                                        webfilesFolderLegacy,
    58                                         useStaticCache ? (AbstractCache)new SimpleCache () : new DirectAccess (),
     59                                        useStaticCache ? new SimpleCache () : new DirectAccess (),
    5960                                        false)
    6061                                );
     
    6869                                RegisterPathHandler ("/files/", new StaticHandler (
    6970                                        webfilesFolder,
    70                                         useStaticCache ? (AbstractCache) new SimpleCache () : new DirectAccess (),
     71                                        useStaticCache ? new SimpleCache () : new DirectAccess (),
    7172                                        false)
    7273                                );
    7374                                RegisterPathHandler ("/itemicons/", new ItemIconHandler (true));
    74                                 RegisterPathHandler ("/map/", new StaticHandler (
    75                                         GameIO.GetSaveGameDir () + "/map",
    76                                         MapRenderer.GetTileCache (),
    77                                         false,
    78                                         "web.map")
    79                                 );
    8075                                RegisterPathHandler ("/api/", new ApiHandler ());
     76                               
     77                                // Allow other code to add their stuff
     78                                ServerInitialized?.Invoke (this);
    8179
    8280                                listener.Prefixes.Add ($"http://+:{webPort}/");
     
    8785                                SdtdConsole.Instance.RegisterServer (this);
    8886
    89                                 Log.Out ("[Web] Started Webserver on port " + webPort);
     87                                Log.Out ($"[Web] Started Webserver on port {webPort}");
    9088                        } catch (Exception e) {
    9189                                Log.Error ("[Web] Error in Web.ctor: ");
     
    9593
    9694                private static string DetectWebserverFolder (string _modInstancePath) {
    97                         string webserverFolder = _modInstancePath + "/webserver";
     95                        string webserverFolder = $"{_modInstancePath}/webserver";
    9896
    9997                        foreach (Mod mod in ModManager.GetLoadedMods ()) {
    100                                 string modServerFolder = mod.Path + "/webserver";
     98                                string modServerFolder = $"{mod.Path}/webserver";
    10199                               
    102100                                if (Directory.Exists (modServerFolder)) {
     
    127125                        foreach (Mod mod in ModManager.GetLoadedMods ()) {
    128126                                try {
    129                                         string webModPath = mod.Path + "/WebMod";
     127                                        string webModPath = $"{mod.Path}/WebMod";
    130128                                        if (!Directory.Exists (webModPath)) {
    131129                                                continue;
     
    136134                                                webMods.Add (webMod);
    137135                                        } catch (InvalidDataException e) {
    138                                                 Log.Error ($"[Web] Could not load webmod from mod {mod.ModInfo.Name.Value}: {e.Message}");
     136                                                Log.Error ($"[Web] Could not load webmod from mod {mod.Name}: {e.Message}");
    139137                                        }
    140138                                } catch (Exception e) {
    141                                         Log.Error ("[Web] Failed loading web mods from mod " + mod.ModInfo.Name.Value);
     139                                        Log.Error ($"[Web] Failed loading web mods from mod {mod.Name}");
    142140                                        Log.Exception (e);
    143141                                }
     
    150148                                listener.Close ();
    151149                        } catch (Exception e) {
    152                                 Log.Out ("[Web] Error in Web.Disconnect: " + e);
     150                                Log.Out ($"[Web] Error in Web.Disconnect: {e}");
    153151                        }
    154152                }
     
    238236                        } catch (IOException e) {
    239237                                if (e.InnerException is SocketException) {
    240                                         Log.Out ("[Web] Error in Web.HandleRequest(): Remote host closed connection: " + e.InnerException.Message);
     238                                        Log.Out ($"[Web] Error in Web.HandleRequest(): Remote host closed connection: {e.InnerException.Message}");
    241239                                } else {
    242                                         Log.Out ("[Web] Error (IO) in Web.HandleRequest(): " + e);
     240                                        Log.Out ($"[Web] Error (IO) in Web.HandleRequest(): {e}");
    243241                                }
    244242                        } catch (Exception e) {
     
    313311                        }
    314312
    315                         Log.Warning ("[Web] Invalid Admintoken used from " + reqRemoteEndPoint);
     313                        Log.Warning ($"[Web] Invalid Admintoken used from {reqRemoteEndPoint}");
    316314
    317315                        return guestPermissionLevel;
Note: See TracChangeset for help on using the changeset viewer.