using System; using System.Collections.Generic; using System.Linq; using System.Net; using Newtonsoft.Json.Linq; namespace ET.Server { /// <summary> /// 抖音回调帮助类 /// </summary> public static class DouyinCallBackHelper { /// <summary> /// 评论加入玩家 /// </summary> /// <param name="domain"></param> /// <param name="context"></param> /// <param name="roomId"></param> public static async void LiveComment(Entity domain, HttpListenerContext context, long roomId) { HttpDouyinApiCallbackResponse response = new HttpDouyinApiCallbackResponse(); string bodyStr = await HttpHelper.GetBodyParameter(context); // 判断body是否为空 if (string.IsNullOrEmpty(bodyStr)) { response.Error = ErrorCode.ERR_ParameterError; response.Message = "参数错误"; HttpHelper.Response(context, response); return; } JArray jsonArray = JArray.Parse(bodyStr); foreach (JToken jToken in jsonArray) { JObject jsonObject = (JObject)jToken; string msgId = (string)jsonObject["msg_id"]; string secOpenId = (string)jsonObject["sec_openid"]; string content = (string)jsonObject["content"]; string avatarUrl = (string)jsonObject["avatar_url"]; string nickname = (string)jsonObject["nickname"]; long timestamp = (long)jsonObject["timestamp"]; Log.Debug($"body参数: openid={secOpenId}, roomId={roomId}, content={content}"); // 判断参数 if (string.IsNullOrEmpty(secOpenId) || roomId <= 0) { response.Error = ErrorCode.ERR_ParameterError; response.Message = "参数错误"; HttpHelper.Response(context, response); return; } List<StartSceneConfig> list = RealmGateAddressHelper.GetAllGame(1); foreach (StartSceneConfig config in list.Where(config => config is { Id: 10001 })) { MessageHelper.SendActor(config.InstanceId, new R2G_AddUnitsToMap() { OpenId = secOpenId, RoomId = roomId}); break; } HttpHelper.Response(context, response); } await ETTask.CompletedTask; } /// <summary> /// 刷礼物 /// </summary> /// <param name="domain"></param> /// <param name="context"></param> /// <param name="roomId"></param> public static async void LiveGift(Entity domain, HttpListenerContext context, long roomId) { HttpDouyinApiCallbackResponse response = new HttpDouyinApiCallbackResponse(); string bodyStr = await HttpHelper.GetBodyParameter(context); if (string.IsNullOrEmpty(bodyStr)) { response.Error = ErrorCode.ERR_ParameterError; response.Message = "参数错误"; HttpHelper.Response(context, response); return; } JArray jsonArray = JArray.Parse(bodyStr); foreach (JToken jToken in jsonArray) { JObject jsonObject = (JObject)jToken; string msgId = (string)jsonObject["msg_id"]; string secOpenId = (string)jsonObject["sec_openid"]; // 加密的礼物id string secGiftId = (string)jsonObject["sec_gift_id"]; // 送出的礼物数量 long giftNum = (long)jsonObject["gift_num"]; // 礼物总价值,单位分 long giftValue = (long)jsonObject["gift_value"]; string avatarUrl = (string)jsonObject["avatar_url"]; string nickname = (string)jsonObject["nickname"]; long timestamp = (long)jsonObject["timestamp"]; Log.Debug($"body参数: openid={secOpenId}, roomId={roomId}, secGiftId={secGiftId}, giftNum={giftNum}, giftValue={giftValue}"); // 判断参数 if (string.IsNullOrEmpty(secOpenId) || roomId <= 0) { response.Error = ErrorCode.ERR_ParameterError; response.Message = "参数错误"; HttpHelper.Response(context, response); return; } List<StartSceneConfig> list = RealmGateAddressHelper.GetAllGame(1); foreach (StartSceneConfig config in list.Where(config => config is { Id: 10001 })) { MessageHelper.SendActor(config.InstanceId, new R2G_GiveGift() { OpenId = secOpenId, RoomId = roomId, NickName = nickname, GiftId = secGiftId, GiftNum = giftNum, GiftValue = giftValue}); break; } HttpHelper.Response(context, response); } await ETTask.CompletedTask; } /// <summary> /// 点赞10次增加等级 /// </summary> /// <param name="domain"></param> /// <param name="context"></param> /// <param name="roomId"></param> public static async void LiveLike(Entity domain, HttpListenerContext context, long roomId) { HttpDouyinApiCallbackResponse response = new HttpDouyinApiCallbackResponse(); string bodyStr = await HttpHelper.GetBodyParameter(context); if (string.IsNullOrEmpty(bodyStr)) { response.Error = ErrorCode.ERR_ParameterError; response.Message = "参数错误"; HttpHelper.Response(context, response); return; } JArray jsonArray = JArray.Parse(bodyStr); foreach (JToken jToken in jsonArray) { JObject jsonObject = (JObject)jToken; string msgId = (string)jsonObject["msg_id"]; string secOpenId = (string)jsonObject["sec_openid"]; long likeNum = (long)jsonObject["like_num"]; string avatarUrl = (string)jsonObject["avatar_url"]; string nickname = (string)jsonObject["nickname"]; long timestamp = (long)jsonObject["timestamp"]; Log.Debug($"body参数: openid={secOpenId}, roomId={roomId}, likes={likeNum}"); // 判断参数 if (string.IsNullOrEmpty(secOpenId) || roomId <= 0 || likeNum < 0) { response.Error = ErrorCode.ERR_ParameterError; response.Message = "参数错误"; HttpHelper.Response(context, response); return; } List<StartSceneConfig> list = RealmGateAddressHelper.GetAllGame(1); foreach (StartSceneConfig config in list.Where(config => config is { Id: 10001 })) { MessageHelper.SendActor(config.InstanceId, new R2G_AddLevel() { OpenId = secOpenId, RoomId = roomId, Likes = likeNum}); break; } HttpHelper.Response(context, response); } await ETTask.CompletedTask; } } }