Unofficial CardLife revival project, pronounced like "celery"
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
3.2KB

  1. using System.Collections;
  2. using CLre.API.Engines;
  3. using GameNetworkLayer.Shared;
  4. using HarmonyLib;
  5. using Svelto.ECS;
  6. using VoxelFarm.GameServer;
  7. namespace CLre.API.Synergy
  8. {
  9. public class ClientHandshakeEngine : GameObsoleteEnginePreBuild
  10. {
  11. internal static ClientHandshakeEngine Instance = null;
  12. internal const NetworkDispatcherCode CLre_HANDSHAKE_NETCODE = (NetworkDispatcherCode) 218;
  13. private Utility.Reflection.INetMsgClientSender_SendMessage<SerializedCLreHandshake> _sendMessage;
  14. private Utility.Reflection.INetMsgClientListener_RegisterListener<SerializedCLreHandshake> _registerListener;
  15. public override void Ready()
  16. {
  17. //Utility.Logging.MetaLog("Building send message delegate");
  18. _sendMessage =
  19. Utility.Reflection.MethodAsDelegate<Utility.Reflection.INetMsgClientSender_SendMessage<SerializedCLreHandshake>>(
  20. "GameNetworkLayer.Client.NetMessageClientSender:SendMessage",
  21. generics: new [] {typeof(SerializedCLreHandshake)},
  22. instance: MainLevel_BuildClasses_Patch.netMessageSender);
  23. //Utility.Logging.MetaLog("Building register listener delegate");
  24. _registerListener =
  25. Utility.Reflection.MethodAsDelegate<Utility.Reflection.INetMsgClientListener_RegisterListener<SerializedCLreHandshake>>(
  26. "GameNetworkLayer.Client.NetMessageClientListener:RegisterListener",
  27. generics: new [] {typeof(SerializedCLreHandshake)},
  28. instance: MainLevel_BuildClasses_Patch.netMessageListener);
  29. _registerListener(CLre_HANDSHAKE_NETCODE, OnHandshakeReceived);
  30. }
  31. public void OnHandshakeReceived(ref SerializedCLreHandshake p)
  32. {
  33. // TODO validate handshake msg
  34. Utility.Logging.MetaLog($"Received CLre handshake! {p}");
  35. }
  36. public IEnumerator Sender(SerializedCLreHandshake payload)
  37. {
  38. yield return null;
  39. Utility.Logging.MetaLog("Sending Client CLre handshake");
  40. _sendMessage(CLre_HANDSHAKE_NETCODE, ref payload);
  41. yield return null;
  42. }
  43. internal static void Init()
  44. {
  45. Instance = new ClientHandshakeEngine();
  46. }
  47. public ClientHandshakeEngine(): base()
  48. {
  49. App.Client.GameJoin += (_, __) =>
  50. {
  51. SerializedCLreHandshake payload = SerializedCLreHandshake.Current();
  52. Sender(payload).Run();
  53. };
  54. }
  55. }
  56. [HarmonyPatch(typeof(GameFramework.MainLevel), "BuildClasses")]
  57. class MainLevel_BuildClasses_Patch
  58. {
  59. internal static object netMessageListener;
  60. internal static object netMessageSender;
  61. internal static TerrainModelClientServer tmcs;
  62. [HarmonyPostfix]
  63. public static void AfterMethodCall(object ____netMessageListener, object ____netMessageSender, TerrainModelClientServer ____terrainModelServerPrediction)
  64. {
  65. netMessageListener = ____netMessageListener;
  66. netMessageSender = ____netMessageSender;
  67. tmcs = ____terrainModelServerPrediction;
  68. }
  69. }
  70. }