Unofficial CardLife revival project, pronounced like "celery"
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

ClientHandshakeEngine.cs 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. }