|
- using System.Collections;
- using CLre.API.Engines;
- using GameNetworkLayer.Shared;
- using HarmonyLib;
- using Svelto.ECS;
- using VoxelFarm.GameServer;
-
- namespace CLre.API.Synergy
- {
- public class ClientHandshakeEngine : GameObsoleteEnginePreBuild
- {
- internal static ClientHandshakeEngine Instance = null;
-
- internal const NetworkDispatcherCode CLre_HANDSHAKE_NETCODE = (NetworkDispatcherCode) 218;
-
- private Utility.Reflection.INetMsgClientSender_SendMessage<SerializedCLreHandshake> _sendMessage;
-
- private Utility.Reflection.INetMsgClientListener_RegisterListener<SerializedCLreHandshake> _registerListener;
-
- public override void Ready()
- {
- //Utility.Logging.MetaLog("Building send message delegate");
- _sendMessage =
- Utility.Reflection.MethodAsDelegate<Utility.Reflection.INetMsgClientSender_SendMessage<SerializedCLreHandshake>>(
- "GameNetworkLayer.Client.NetMessageClientSender:SendMessage",
- generics: new [] {typeof(SerializedCLreHandshake)},
- instance: MainLevel_BuildClasses_Patch.netMessageSender);
-
- //Utility.Logging.MetaLog("Building register listener delegate");
- _registerListener =
- Utility.Reflection.MethodAsDelegate<Utility.Reflection.INetMsgClientListener_RegisterListener<SerializedCLreHandshake>>(
- "GameNetworkLayer.Client.NetMessageClientListener:RegisterListener",
- generics: new [] {typeof(SerializedCLreHandshake)},
- instance: MainLevel_BuildClasses_Patch.netMessageListener);
- _registerListener(CLre_HANDSHAKE_NETCODE, OnHandshakeReceived);
- }
-
- public void OnHandshakeReceived(ref SerializedCLreHandshake p)
- {
- // TODO validate handshake msg
- Utility.Logging.MetaLog($"Received CLre handshake! {p}");
- }
-
- public IEnumerator Sender(SerializedCLreHandshake payload)
- {
- yield return null;
- Utility.Logging.MetaLog("Sending Client CLre handshake");
- _sendMessage(CLre_HANDSHAKE_NETCODE, ref payload);
- yield return null;
- }
-
- internal static void Init()
- {
- Instance = new ClientHandshakeEngine();
- }
-
- public ClientHandshakeEngine(): base()
- {
- App.Client.GameJoin += (_, __) =>
- {
- SerializedCLreHandshake payload = SerializedCLreHandshake.Current();
- Sender(payload).Run();
- };
- }
- }
-
- [HarmonyPatch(typeof(GameFramework.MainLevel), "BuildClasses")]
- class MainLevel_BuildClasses_Patch
- {
- internal static object netMessageListener;
-
- internal static object netMessageSender;
-
- internal static TerrainModelClientServer tmcs;
-
- [HarmonyPostfix]
- public static void AfterMethodCall(object ____netMessageListener, object ____netMessageSender, TerrainModelClientServer ____terrainModelServerPrediction)
- {
- netMessageListener = ____netMessageListener;
- netMessageSender = ____netMessageSender;
- tmcs = ____terrainModelServerPrediction;
- }
- }
- }
|