NodeTestBattleClient.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using CommonAI.Zone.ZoneEditor;
  2. using CommonAIClient.Client;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. namespace ZeusServerTestClient
  8. {
  9. public class NodeTestBattleClient : AbstractBattle
  10. {
  11. public string PlayerUUID { get { return player_uuid; } }
  12. private readonly string player_uuid;
  13. private readonly string display_name;
  14. private readonly int unit_template_id;
  15. private readonly byte force;
  16. private readonly NodeTestPlayer mPlayer;
  17. private readonly HashMap<string, object> mAttributes = new HashMap<string, object>();
  18. private readonly ZoneNodeCodec codec = new ZoneNodeCodec(ZoneNodeManager.MessageFactory);
  19. public NodeTestBattleClient(EditorTemplates data_root, string player_uuid, string display_name, int unit_template_id, byte force)
  20. : base(data_root)
  21. {
  22. this.player_uuid = player_uuid;
  23. this.display_name = display_name;
  24. this.unit_template_id = unit_template_id;
  25. this.force = force;
  26. this.mPlayer = new NodeTestPlayer(player_uuid, display_name, unit_template_id, force, node);
  27. this.mPlayer.OnMessageSentToClient += mPlayer_OnMessageSentToClient;
  28. }
  29. private void mPlayer_OnMessageSentToClient(IMessage msg)
  30. {
  31. mRecvPack++;
  32. Layer.ProcessMessage(msg as IMessage);
  33. }
  34. //--------------------------------------------------------------------------------------------
  35. #region BattleClient
  36. private int mRecvPack = 0;
  37. private int mSentPack = 0;
  38. public override long RecvPackages { get { return mRecvPack; } }
  39. public override long SendPackages { get { return mSentPack; } }
  40. public override int CurrentPing { get { return 0; } }
  41. public override bool IsNet { get { return true; } }
  42. public override RoomService.Net.BsServer.KickedByServerNotifyB2C KickMessage { get { return null; } }
  43. public override void SendAction(CommonAI.Zone.Action action)
  44. {
  45. byte[] data;
  46. if (codec.doEncode(action, out data))
  47. {
  48. mSentPack++;
  49. node.OnPlayerReceivedMessage(mPlayer, data);
  50. }
  51. }
  52. #endregion
  53. //--------------------------------------------------------------------------------------------
  54. public void Start()
  55. {
  56. PlayerEnterRoomS2R enter = new PlayerEnterRoomS2R();
  57. enter.Pos = new CommonAI.RTS.Vector2(0, 0);
  58. enter.UnitData = new CommonAI.ZoneServer.CreateUnitInfoR2B();
  59. enter.UnitData.Force = force;
  60. enter.UnitData.StartFlag = null;
  61. enter.UnitData.UnitTemplateID = unit_template_id;
  62. enter.UnitData.UnitPropData = new ZeusCommon.Plugin.ZeusUnitProperties();
  63. node.OnPlayerEnter(mPlayer, enter);
  64. }
  65. public void Stop()
  66. {
  67. node.OnPlayerLeave(mPlayer);
  68. }
  69. }
  70. public class NodeTestClientGroup
  71. {
  72. private long mLastUpdateTime = 0;
  73. private List<NodeTestBattleClient> clients = new List<NodeTestBattleClient>();
  74. public void Update()
  75. {
  76. long curTime = CommonLang.CUtils.CurrentTimeMS;
  77. if (mLastUpdateTime == 0)
  78. {
  79. mLastUpdateTime = curTime;
  80. }
  81. int intervalMS = (int)(curTime - mLastUpdateTime);
  82. this.mLastUpdateTime = curTime;
  83. foreach (NodeTestBattleClient client in clients)
  84. {
  85. client.BeginUpdate(intervalMS);
  86. client.Update(intervalMS);
  87. }
  88. }
  89. public void AddClient(NodeTestBattleClient client)
  90. {
  91. if (!clients.Contains(client))
  92. {
  93. client.Layer.ActorAdded += (layer, actor) =>
  94. {
  95. actor.SendUnitGuard(true);
  96. };
  97. clients.Add(client);
  98. client.Start();
  99. }
  100. }
  101. public void Leave(NodeTestBattleClient client)
  102. {
  103. if (clients.Contains(client))
  104. {
  105. client.Stop();
  106. }
  107. }
  108. }
  109. }