[fix]修正UdpServer在接收广播时连续启动接收的错误,在StarAgent中,此时可能收到广播包,SocketFlags是Broadcast,需要清空,否则报错“参考的对象类型不支持尝试的操作”; 无需设置SocketOptionName.PacketInformation,在ReceiveMessageFromAsync时会自动设置,并且支持ipv6;
石头 编写于 2024-10-10 00:36:00 石头 提交于 2024-10-10 00:45:43
X
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.Serialization;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
using NewLife.Data;

namespace XCode.Code
{
    /// <summary>用户。用户帐号信息</summary>
    public class ExtendUser : Object, IxxUser, IExtend
    {
        #region 属性
        /// <summary>编号</summary>
        public Int32 ID { get; set; }

        /// <summary>名称。登录用户名</summary>
        public String Name { get; set; }

        /// <summary>密码</summary>
        public String Password { get; set; }

        /// <summary>昵称</summary>
        public String DisplayName { get; set; }

        /// <summary>性别。未知、男、女</summary>
        public XCode.Membership.SexKinds Sex { get; set; }

        /// <summary>邮件</summary>
        public String Mail { get; set; }

        /// <summary>手机</summary>
        public String Mobile { get; set; }

        /// <summary>代码。身份证、员工编号等</summary>
        public String Code { get; set; }

        /// <summary>地区。省市区</summary>
        public Int32 AreaId { get; set; }

        /// <summary>头像</summary>
        public String Avatar { get; set; }

        /// <summary>角色。主要角色</summary>
        public Int32 RoleID { get; set; }

        /// <summary>角色组。次要角色集合</summary>
        public String RoleIds { get; set; }

        /// <summary>部门。组织机构</summary>
        public Int32 DepartmentID { get; set; }

        /// <summary>在线</summary>
        public Boolean Online { get; set; }

        /// <summary>启用</summary>
        public Boolean Enable { get; set; }

        /// <summary>年龄。周岁</summary>
        public Int32 Age { get; set; }

        /// <summary>生日。公历年月日</summary>
        public DateTime Birthday { get; set; }

        /// <summary>登录次数</summary>
        public Int32 Logins { get; set; }

        /// <summary>最后登录</summary>
        public DateTime LastLogin { get; set; }

        /// <summary>最后登录IP</summary>
        public String LastLoginIP { get; set; }

        /// <summary>注册时间</summary>
        public DateTime RegisterTime { get; set; }

        /// <summary>注册IP</summary>
        public String RegisterIP { get; set; }

        /// <summary>在线时间。累计在线总时间,秒</summary>
        public Int32 OnlineTime { get; set; }

        /// <summary>扩展1</summary>
        public Int32 Ex1 { get; set; }

        /// <summary>扩展2</summary>
        public Int32 Ex2 { get; set; }

        /// <summary>扩展3</summary>
        public Double Ex3 { get; set; }

        /// <summary>扩展4</summary>
        public String Ex4 { get; set; }

        /// <summary>扩展5</summary>
        public String Ex5 { get; set; }

        /// <summary>扩展6</summary>
        public String Ex6 { get; set; }

        /// <summary>备注</summary>
        public String Remark { get; set; }
        #endregion

        #region 获取/设置 字段值
        /// <summary>获取/设置 字段值</summary>
        /// <param name="name">字段名</param>
        /// <returns></returns>
        public virtual Object this[String name]
        {
            get
            {
                switch (name)
                {
                    case "ID": return ID;
                    case "Name": return Name;
                    case "Password": return Password;
                    case "DisplayName": return DisplayName;
                    case "Sex": return Sex;
                    case "Mail": return Mail;
                    case "Mobile": return Mobile;
                    case "Code": return Code;
                    case "AreaId": return AreaId;
                    case "Avatar": return Avatar;
                    case "RoleID": return RoleID;
                    case "RoleIds": return RoleIds;
                    case "DepartmentID": return DepartmentID;
                    case "Online": return Online;
                    case "Enable": return Enable;
                    case "Age": return Age;
                    case "Birthday": return Birthday;
                    case "Logins": return Logins;
                    case "LastLogin": return LastLogin;
                    case "LastLoginIP": return LastLoginIP;
                    case "RegisterTime": return RegisterTime;
                    case "RegisterIP": return RegisterIP;
                    case "OnlineTime": return OnlineTime;
                    case "Ex1": return Ex1;
                    case "Ex2": return Ex2;
                    case "Ex3": return Ex3;
                    case "Ex4": return Ex4;
                    case "Ex5": return Ex5;
                    case "Ex6": return Ex6;
                    case "Remark": return Remark;
                    default: throw new KeyNotFoundException($"{name} not found");
                }
            }
            set
            {
                switch (name)
                {
                    case "ID": ID = value.ToInt(); break;
                    case "Name": Name = Convert.ToString(value); break;
                    case "Password": Password = Convert.ToString(value); break;
                    case "DisplayName": DisplayName = Convert.ToString(value); break;
                    case "Sex": Sex = (XCode.Membership.SexKinds)value.ToInt(); break;
                    case "Mail": Mail = Convert.ToString(value); break;
                    case "Mobile": Mobile = Convert.ToString(value); break;
                    case "Code": Code = Convert.ToString(value); break;
                    case "AreaId": AreaId = value.ToInt(); break;
                    case "Avatar": Avatar = Convert.ToString(value); break;
                    case "RoleID": RoleID = value.ToInt(); break;
                    case "RoleIds": RoleIds = Convert.ToString(value); break;
                    case "DepartmentID": DepartmentID = value.ToInt(); break;
                    case "Online": Online = value.ToBoolean(); break;
                    case "Enable": Enable = value.ToBoolean(); break;
                    case "Age": Age = value.ToInt(); break;
                    case "Birthday": Birthday = value.ToDateTime(); break;
                    case "Logins": Logins = value.ToInt(); break;
                    case "LastLogin": LastLogin = value.ToDateTime(); break;
                    case "LastLoginIP": LastLoginIP = Convert.ToString(value); break;
                    case "RegisterTime": RegisterTime = value.ToDateTime(); break;
                    case "RegisterIP": RegisterIP = Convert.ToString(value); break;
                    case "OnlineTime": OnlineTime = value.ToInt(); break;
                    case "Ex1": Ex1 = value.ToInt(); break;
                    case "Ex2": Ex2 = value.ToInt(); break;
                    case "Ex3": Ex3 = value.ToDouble(); break;
                    case "Ex4": Ex4 = Convert.ToString(value); break;
                    case "Ex5": Ex5 = Convert.ToString(value); break;
                    case "Ex6": Ex6 = Convert.ToString(value); break;
                    case "Remark": Remark = Convert.ToString(value); break;
                    default: throw new KeyNotFoundException($"{name} not found");
                }
            }
        }
        #endregion

        #region 拷贝
        /// <summary>拷贝模型对象</summary>
        /// <param name="model">模型</param>
        public void Copy(ExtendUser model)
        {
            ID = model.ID;
            Name = model.Name;
            Password = model.Password;
            DisplayName = model.DisplayName;
            Sex = model.Sex;
            Mail = model.Mail;
            Mobile = model.Mobile;
            Code = model.Code;
            AreaId = model.AreaId;
            Avatar = model.Avatar;
            RoleID = model.RoleID;
            RoleIds = model.RoleIds;
            DepartmentID = model.DepartmentID;
            Online = model.Online;
            Enable = model.Enable;
            Age = model.Age;
            Birthday = model.Birthday;
            Logins = model.Logins;
            LastLogin = model.LastLogin;
            LastLoginIP = model.LastLoginIP;
            RegisterTime = model.RegisterTime;
            RegisterIP = model.RegisterIP;
            OnlineTime = model.OnlineTime;
            Ex1 = model.Ex1;
            Ex2 = model.Ex2;
            Ex3 = model.Ex3;
            Ex4 = model.Ex4;
            Ex5 = model.Ex5;
            Ex6 = model.Ex6;
            Remark = model.Remark;
        }
        #endregion
    }
}