Пример #1
0
        /// <summary>
        /// 处理角色封停
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        private async Task <string> OnHandleServerBan(JObject obj)
        {
            var type          = (BanType)obj["type"].ToObject <short>();
            var rolename_list = obj["role"].ToString().Split(',');
            var reason        = obj["reason"].ToString();
            var final_date    = DateTime.UtcNow;

            switch (type)
            {
            case BanType.Ban_Seven:
                final_date = final_date.AddDays(7);
                break;

            case BanType.Ban_Month:
                final_date = final_date.AddMonths(1);
                break;

            case BanType.Ban_Year:
                final_date = final_date.AddYears(1);
                break;

            case BanType.Ban_Forever:
                final_date = final_date.AddYears(99);
                break;

            case BanType.Ban_Cancel:
                final_date.AddDays(-1);
                break;
            }
            //TODO 接口不支持多用户暂时写死
            var    roleDataWriter = new TLRoleDataStatusSnapWriter(this);
            string roleUUID       = null;
            var    result         = await roleDataWriter.SuspendRoleData(rolename_list[0], final_date, reason, string.Empty);


            //KICK Logic.
            if (type != BanType.Ban_Cancel && !string.IsNullOrEmpty(result.Item3))
            {
                roleUUID = result.Item3;
                var logic = await this.Provider.GetAsync(ServerNames.GetLogicServiceAddress(roleUUID));

                if (logic != null && logic.Config.TryGetValue("sessionName", out var sessionName))
                {
                    var session = await this.Provider.GetAsync(new RemoteAddress(sessionName));

                    if (session != null)
                    {
                        var notify = new KickPlayerNotify();
                        notify.reason = reason;
                        session.Invoke(notify);
                    }
                }
            }

            if (result.Item1)
            {
                return(ResponseResult(true));
            }
            else
            {
                return(ResponseResult(false, result.Item2));
            }
        }
 /**
  *
  * @param notify {MsKickPlayerNotify//}
  */
 private void kickPlayerNotifyInner(KickPlayerNotify notify)
 {
 }