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.

83 lines
3.1KB

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