|
- using System;
- using System.Reflection;
- using GameServer;
- using HarmonyLib;
- using Svelto.Context;
-
- namespace CLre_server.API.MainServer
- {
- public class Server
- {
- // static
-
- private static Server _instance = null;
-
- public static Server Instance
- {
- get
- {
- if (_instance == null) _instance = new Server();
- return _instance;
- }
- }
-
- // instance events
- public event EventHandler<StartingEventArgs> InitStart
- {
- add => MainGameServer_Constructor_Patch.preConstructor += value;
- remove => MainGameServer_Constructor_Patch.preConstructor -= value;
- }
-
- public event EventHandler<StartedEventArgs> InitComplete
- {
- add => ServerReadyEngine.serverEngineReady += value;
- remove => ServerReadyEngine.serverEngineReady -= value;
- }
-
- public event EventHandler<StartedEventArgs> FrameworkReady
- {
- add => ServerReadyEngine.serverFrameworkReady += value;
- remove => ServerReadyEngine.serverFrameworkReady -= value;
- }
-
- public event EventHandler<StopEventArgs> FrameworkExit
- {
- add => ServerReadyEngine.serverFrameworkDestroyed += value;
- remove => ServerReadyEngine.serverFrameworkDestroyed -= value;
- }
-
- // properties
-
- public GameServerSettings GameServerSettings
- {
- get => MainGameServer_SetupMods_Patch._gameServerSettings;
-
- set
- {
- MainGameServer_SetupMods_Patch._gameServerSettings = value;
- Traverse.Create(MainGameServer_Constructor_Patch.mgs).Field<GameServerSettings>("_gameServerSettings").Value = value;
- }
- }
-
- private Server()
- {
- new ServerReadyEngine();
- }
- }
-
- [HarmonyPatch]
- class MainGameServer_SetupMods_Patch
- {
- internal static GameServerSettings _gameServerSettings;
-
- [HarmonyPostfix]
- public static void AfterMethodCall(GameServerSettings ____gameServerSettings)
- {
- _gameServerSettings = ____gameServerSettings;
- }
-
- [HarmonyTargetMethod]
- public static MethodBase Target()
- {
- return AccessTools.Method("GameServer.GameFramework.MainGameServer:SetupMods");
- }
- }
-
- [HarmonyPatch]
- class MainGameServer_Constructor_Patch
- {
-
- internal static ICompositionRoot mgs = null;
-
- internal static event EventHandler<StartingEventArgs> preConstructor;
-
- internal static event EventHandler<StartingEventArgs> postConstructor;
-
- [HarmonyPrefix]
- public static void BeforeMethodCall()
- {
- if (preConstructor != null) preConstructor(null, default(StartingEventArgs));
- }
-
- [HarmonyPostfix]
- public static void AfterMethodCall(ICompositionRoot __instance)
- {
- mgs = __instance;
- if (postConstructor != null) postConstructor(__instance, default(StartingEventArgs));
- }
-
- [HarmonyTargetMethod]
- public static MethodBase Target()
- {
- return AccessTools.Constructor(AccessTools.TypeByName("GameServer.GameFramework.MainGameServer"));
- }
- }
-
- [HarmonyPatch(typeof(PhotonNetwork), "ConnectUsingSettings")]
- class PhotonNetwork_ConnectUsingSettings_Patch
- {
- internal static event EventHandler<StartedEventArgs> preConnect;
-
- internal static event EventHandler<StartedEventArgs> postConnect;
-
- [HarmonyPostfix]
- public static void AfterMethodCall(string gameVersion)
- {
- if (postConnect != null) postConnect(null, new StartedEventArgs
- {
- photonVersion = gameVersion,
- photonRegion = PhotonNetwork.CloudRegion,
- worldName = MainGameServer_SetupMods_Patch._gameServerSettings.GetWorldName(),
- gameGuid = MainGameServer_SetupMods_Patch._gameServerSettings.GetGameGuid(),
- });
- }
-
- [HarmonyPrefix]
- public static void BeforeMethodCall(string gameVersion)
- {
- if (preConnect != null) preConnect(null, new StartedEventArgs
- {
- photonVersion = gameVersion,
- photonRegion = PhotonNetwork.CloudRegion,
- worldName = MainGameServer_SetupMods_Patch._gameServerSettings.GetWorldName(),
- gameGuid = MainGameServer_SetupMods_Patch._gameServerSettings.GetGameGuid(),
- });
- }
- }
- }
|