HttpDouyinApiCallbackHandler.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Net;
  4. using Newtonsoft.Json.Linq;
  5. namespace ET.Server
  6. {
  7. /// <summary>
  8. /// 抖音推送数据, http回调
  9. /// </summary>
  10. [HttpHandler(SceneType.RouterManager, "/tk")]
  11. public class HttpCommentHandler: IHttpHandler
  12. {
  13. public async ETTask Handle(Entity domain, HttpListenerContext context)
  14. {
  15. string xroomId = context.Request.Headers["x-roomid"];
  16. if (string.IsNullOrEmpty(xroomId))
  17. {
  18. Log.Error($"抖音推送数据http回调 找不到请求头:x-roomid");
  19. return;
  20. }
  21. string msgType = context.Request.Headers["x-msg-type"];
  22. Log.Debug($"抖音推送数据http回调 - msgType={msgType}");
  23. if (string.IsNullOrEmpty(msgType))
  24. {
  25. Log.Error($"抖音推送数据http回调 找不到请求头:x-msg-type");
  26. return;
  27. }
  28. string bodyStr = await HttpHelper.GetBodyParameter(context);
  29. if (string.IsNullOrEmpty(bodyStr))
  30. {
  31. Log.Error($"抖音推送数据http回调 body为空");
  32. return;
  33. }
  34. long roomId = long.Parse(xroomId);
  35. switch (msgType)
  36. {
  37. case "live_comment":
  38. {
  39. // 直播间评论
  40. Log.Debug($"收到抖音推送http回调 评论回调...");
  41. LiveComment(domain, context, bodyStr, roomId);
  42. break;
  43. }
  44. case "live_gift":
  45. {
  46. // 直播间送礼
  47. Log.Debug($"收到抖音推送http回调 刷礼物回调...");
  48. LiveGift(domain, context, bodyStr, roomId);
  49. break;
  50. }
  51. case "live_like":
  52. {
  53. // 直播间点赞
  54. Log.Debug($"收到抖音推送http回调 点赞回调...");
  55. LiveLike(domain, context, bodyStr, roomId);
  56. break;
  57. }
  58. }
  59. await ETTask.CompletedTask;
  60. }
  61. /// <summary>
  62. /// 评论
  63. /// </summary>
  64. /// <param name="domain"></param>
  65. /// <param name="context"></param>
  66. /// <param name="bodyStr"></param>
  67. /// <param name="roomId"></param>
  68. private static async void LiveComment(Entity domain, HttpListenerContext context, string bodyStr, long roomId)
  69. {
  70. HttpDouyinApiCallbackResponse response = new HttpDouyinApiCallbackResponse();
  71. JArray jsonArray = JArray.Parse(bodyStr);
  72. foreach (JToken jToken in jsonArray)
  73. {
  74. JObject jsonObject = (JObject)jToken;
  75. string msgId = (string)jsonObject["msg_id"];
  76. string secOpenId = (string)jsonObject["sec_openid"];
  77. string content = (string)jsonObject["content"];
  78. string avatarUrl = (string)jsonObject["avatar_url"];
  79. string nickname = (string)jsonObject["nickname"];
  80. long timestamp = (long)jsonObject["timestamp"];
  81. Log.Debug($"body参数: openid={secOpenId}, roomId={roomId}, content={content}");
  82. // 判断参数
  83. if (string.IsNullOrEmpty(secOpenId) || roomId <= 0)
  84. {
  85. response.Error = ErrorCode.ERR_ParameterError;
  86. response.Message = "参数错误";
  87. HttpHelper.Response(context, response);
  88. return;
  89. }
  90. List<StartSceneConfig> list = RealmGateAddressHelper.GetAllGame(1);
  91. foreach (StartSceneConfig config in list.Where(config => config is { Id: 10001 }))
  92. {
  93. MessageHelper.SendActor(config.InstanceId, new R2G_LiveComment() { OpenId = secOpenId, RoomId = roomId, Content = content, NickName = nickname, Url = avatarUrl});
  94. break;
  95. }
  96. HttpHelper.Response(context, response);
  97. }
  98. await ETTask.CompletedTask;
  99. }
  100. /// <summary>
  101. /// 刷礼物
  102. /// </summary>
  103. /// <param name="domain"></param>
  104. /// <param name="context"></param>
  105. /// <param name="bodyStr"></param>
  106. /// <param name="roomId"></param>
  107. private static async void LiveGift(Entity domain, HttpListenerContext context, string bodyStr, long roomId)
  108. {
  109. HttpDouyinApiCallbackResponse response = new HttpDouyinApiCallbackResponse();
  110. JArray jsonArray = JArray.Parse(bodyStr);
  111. foreach (JToken jToken in jsonArray)
  112. {
  113. JObject jsonObject = (JObject)jToken;
  114. string msgId = (string)jsonObject["msg_id"];
  115. string secOpenId = (string)jsonObject["sec_openid"];
  116. // 加密的礼物id
  117. string secGiftId = (string)jsonObject["sec_gift_id"];
  118. // 送出的礼物数量
  119. long giftNum = (long)jsonObject["gift_num"];
  120. // 礼物总价值,单位分
  121. long giftValue = (long)jsonObject["gift_value"];
  122. string avatarUrl = (string)jsonObject["avatar_url"];
  123. string nickname = (string)jsonObject["nickname"];
  124. long timestamp = (long)jsonObject["timestamp"];
  125. Log.Debug($"body参数: openid={secOpenId}, roomId={roomId}, secGiftId={secGiftId}, giftNum={giftNum}, giftValue={giftValue}");
  126. // 判断参数
  127. if (string.IsNullOrEmpty(secOpenId) || roomId <= 0)
  128. {
  129. response.Error = ErrorCode.ERR_ParameterError;
  130. response.Message = "参数错误";
  131. HttpHelper.Response(context, response);
  132. return;
  133. }
  134. List<StartSceneConfig> list = RealmGateAddressHelper.GetAllGame(1);
  135. foreach (StartSceneConfig config in list.Where(config => config is { Id: 10001 }))
  136. {
  137. MessageHelper.SendActor(config.InstanceId, new R2G_LiveGift() { OpenId = secOpenId, RoomId = roomId, NickName = nickname, Url = avatarUrl, GiftId = secGiftId, GiftNum = giftNum, GiftValue = giftValue});
  138. break;
  139. }
  140. HttpHelper.Response(context, response);
  141. }
  142. await ETTask.CompletedTask;
  143. }
  144. /// <summary>
  145. /// 点赞
  146. /// </summary>
  147. /// <param name="domain"></param>
  148. /// <param name="context"></param>
  149. /// <param name="bodyStr"></param>
  150. /// <param name="roomId"></param>
  151. private static async void LiveLike(Entity domain, HttpListenerContext context, string bodyStr, long roomId)
  152. {
  153. HttpDouyinApiCallbackResponse response = new HttpDouyinApiCallbackResponse();
  154. JArray jsonArray = JArray.Parse(bodyStr);
  155. foreach (JToken jToken in jsonArray)
  156. {
  157. JObject jsonObject = (JObject)jToken;
  158. string msgId = (string)jsonObject["msg_id"];
  159. string secOpenId = (string)jsonObject["sec_openid"];
  160. long likeNum = (long)jsonObject["like_num"];
  161. string avatarUrl = (string)jsonObject["avatar_url"];
  162. string nickname = (string)jsonObject["nickname"];
  163. long timestamp = (long)jsonObject["timestamp"];
  164. Log.Debug($"body参数: openid={secOpenId}, roomId={roomId}, likes={likeNum}");
  165. // 判断参数
  166. if (string.IsNullOrEmpty(secOpenId) || roomId <= 0 || likeNum < 0)
  167. {
  168. response.Error = ErrorCode.ERR_ParameterError;
  169. response.Message = "参数错误";
  170. HttpHelper.Response(context, response);
  171. return;
  172. }
  173. List<StartSceneConfig> list = RealmGateAddressHelper.GetAllGame(1);
  174. foreach (StartSceneConfig config in list.Where(config => config is { Id: 10001 }))
  175. {
  176. MessageHelper.SendActor(config.InstanceId, new R2G_LiveLike() { OpenId = secOpenId, RoomId = roomId, NickName = nickname, Url = avatarUrl, Likes = likeNum});
  177. break;
  178. }
  179. HttpHelper.Response(context, response);
  180. }
  181. await ETTask.CompletedTask;
  182. }
  183. }
  184. }