ModuleRequest.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. using CommonAI.Zone.Helper;
  2. using CommonAI.ZoneClient;
  3. using CommonLang;
  4. using CommonLang.ByteOrder;
  5. using CommonLang.Property;
  6. using Pomelo.DotNetClient;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace XmdsBotTest.Runner
  13. {
  14. public class ModuleRequest : BotRunner.RunnerModule
  15. {
  16. private static List<Type> all_request = new List<Type>(EventTypes.RequestTypes);
  17. private static List<Type> all_notify = new List<Type>(EventTypes.NotifyTypes);
  18. public ModuleRequest(BotRunner r) : base(r) { }
  19. protected internal override void OnBattleActorReady(CommonAI.ZoneClient.ZoneLayer layer, CommonAI.ZoneClient.ZoneActor actor)
  20. {
  21. layer.AddTimePeriodicMS(1000, (t) =>
  22. {
  23. if (Enable)
  24. {
  25. on_do_1s(layer);
  26. }
  27. });
  28. }
  29. private void on_do_1s(ZoneLayer layer)
  30. {
  31. layer.AddTimeDelayMS(bot.Random.Next(1000, 10000), (t) =>
  32. {
  33. if (Enable)
  34. {
  35. client.GameSocket.playerHandler.battleEventNotify(null);
  36. client.GameSocket.rankHandler.getRankInfoRequest((err, rsp) => { });
  37. }
  38. });
  39. {
  40. var req_type = CUtils.GetRandomInArray<Type>(all_request, bot.Random);
  41. var req = ReflectionUtil.CreateInstance(req_type);
  42. fill_random(req);
  43. log.Info("request : " + req_type);
  44. bot.Client.GameSocket.request(req, (err, rsp) =>
  45. {
  46. log.Info("response : rsp=" + rsp + " : err=" + err);
  47. });
  48. }
  49. {
  50. var ntf_type = CUtils.GetRandomInArray<Type>(all_notify, bot.Random);
  51. var ntf = ReflectionUtil.CreateInstance(ntf_type);
  52. fill_random(ntf);
  53. log.Info("notify : " + ntf_type);
  54. bot.Client.GameSocket.notify(ntf);
  55. }
  56. {
  57. var battleMessage = random_bytes();
  58. client.GameSocket.playerHandler.battleEventNotify(battleMessage);
  59. }
  60. {
  61. var req_type = CUtils.GetRandomInArray<Type>(all_request, bot.Random);
  62. socket_start_send(EventTypes.GetRequestKey(req_type), (uint)bot.Random.Next());
  63. }
  64. {
  65. var ntf_type = CUtils.GetRandomInArray<Type>(all_notify, bot.Random);
  66. socket_start_send(EventTypes.GetNotifyKey(ntf_type));
  67. }
  68. }
  69. private byte[] random_bytes(int min_len = 32, int max_len = 1024 * 1024)
  70. {
  71. var random = bot.Random;
  72. var bin = new byte[bot.Random.Next(min_len, max_len)];
  73. for (int i = 0; i < bin.Length; i++)
  74. {
  75. bin[i] = (byte)random.Next();
  76. }
  77. return bin;
  78. }
  79. private void fill_random(object obj)
  80. {
  81. var type = obj.GetType();
  82. var random = bot.Random;
  83. foreach (var f in type.GetProperties())
  84. {
  85. try
  86. {
  87. var ft = f.GetGetMethod().ReturnType;
  88. if (ft == typeof(sbyte))
  89. {
  90. f.GetSetMethod().Invoke(obj, new object[] { (sbyte)random.Next() });
  91. }
  92. else if (ft == typeof(int))
  93. {
  94. f.GetSetMethod().Invoke(obj, new object[] { (int)random.Next() });
  95. }
  96. else if (ft == typeof(short))
  97. {
  98. f.GetSetMethod().Invoke(obj, new object[] { (short)random.Next() });
  99. }
  100. else if (ft == typeof(long))
  101. {
  102. f.GetSetMethod().Invoke(obj, new object[] { (long)random.Next() });
  103. }
  104. else if (ft == typeof(byte))
  105. {
  106. f.GetSetMethod().Invoke(obj, new object[] { (byte)random.Next() });
  107. }
  108. else if (ft == typeof(uint))
  109. {
  110. f.GetSetMethod().Invoke(obj, new object[] { (uint)random.Next() });
  111. }
  112. else if (ft == typeof(ushort))
  113. {
  114. f.GetSetMethod().Invoke(obj, new object[] { (ushort)random.Next() });
  115. }
  116. else if (ft == typeof(ulong))
  117. {
  118. f.GetSetMethod().Invoke(obj, new object[] { (ulong)random.Next() });
  119. }
  120. else if (ft == typeof(float))
  121. {
  122. f.GetSetMethod().Invoke(obj, new object[] { (float)random.NextDouble() });
  123. }
  124. else if (ft == typeof(double))
  125. {
  126. f.GetSetMethod().Invoke(obj, new object[] { (double)random.NextDouble() });
  127. }
  128. else if (ft == typeof(string))
  129. {
  130. f.GetSetMethod().Invoke(obj, new object[] { random.Next().ToString() });
  131. }
  132. else if (ft == typeof(byte[]))
  133. {
  134. f.GetSetMethod().Invoke(obj, new object[] { random_bytes() });
  135. }
  136. }
  137. catch (Exception err)
  138. {
  139. err.ToString();
  140. }
  141. }
  142. }
  143. private void socket_start_send(string route, uint msgid = 0)
  144. {
  145. var send_object = SendMessage.Alloc(route, msgid, random_bytes());
  146. try
  147. {
  148. client.GameSocket.Session.BeginSend(
  149. send_object.Buffer, 0, send_object.BufferLength,
  150. System.Net.Sockets.SocketFlags.None,
  151. socket_end_send, send_object);
  152. }
  153. catch (Exception err)
  154. {
  155. log.Error(err.Message);
  156. send_object.Dispose();
  157. }
  158. }
  159. private void socket_end_send(IAsyncResult asyncSend)
  160. {
  161. var send_object = asyncSend.AsyncState as SendMessage;
  162. try
  163. {
  164. client.GameSocket.Session.EndSend(asyncSend);
  165. }
  166. catch (Exception err)
  167. {
  168. log.Error(err.Message);
  169. }
  170. finally
  171. {
  172. send_object.Dispose();
  173. }
  174. }
  175. }
  176. }