录播教室预约系统(五)-用户登陆

客户端登陆界面如下:

客户端代码:

Program.cs 中

//在全局处理函数中忽略相关消息 不添加日志 NetworkComms.IgnoreUnknownPacketTypes = true; ConnectionInfo connInfo = new ConnectionInfo("127.0.0.1", 2539); Connection newTcpConnection = TCPConnection.GetConnection(connInfo); //连接服务器完成****************************************** //初始化主窗口 MainForm mainForm = new MainForm(); //显示登录窗口 frmLogin loginForm = new frmLogin(applicationName, mainForm, newTcpConnection); //根据登陆窗口返回的信息,打开主窗口,或者是注册窗口 if (loginForm.ShowDialog() == DialogResult.OK) { if(loginForm.Register == 5) { Application.Run(mainForm); } else { Register newRegister = new Register(); newRegister.Initialize(newTcpConnection); Application.Run(newRegister); } }

登陆窗口中的登陆按钮相关代码

private void btnLogin_Click(object sender, EventArgs e)
        {
            // 如果通过输入验证
            if (UserInputCheck())
            {
                try
                {
                    // 保存登录身份是否合法验证结果
                    bool isPass = false;

                    Users theUser = new Users();

                    theUser.UserID = txtLoginName.Text.Trim();
                    theUser.Password = txtUserPwd.Text.Trim(); 
                   //发送当前登陆用户的信息给服务器,并从服务器获取返回的信息
                    LoginResult loginResult = newTcpConnection.SendReceiveObject<LoginResult>("Login", "LoginResult", 5000, theUser);
                     

                    if (loginResult.Message=="登录成功")
                    {
                        //记录用户名


                        netConfiguration.UserID = theUser.UserID;

                        netConfiguration.Save();

                        //初始化主窗口中的属性

                        theUser.Department = loginResult.Department;
                        theUser.Name = loginResult.UserName;
                         
                        mainForm.InitiaLize(this.newTcpConnection, theUser);

                       
                        // 标识验证通过
                        isPass = true;
                        Register = 5;
                        this.DialogResult = DialogResult.OK;
                    }

                    // 如果未通过验证
                    if (!isPass)
                    {
                        
                        MessageBox.Show(loginResult.Message);
                    }
                }
                catch (Exception ex)
                {
                    ShowLoginLostToolTip(ex);
                }
            }
        }

User.cs实体类代码:

 [ProtoContract]
    public class Users
    {

        #region Constructors

        public Users()
        { }


        #endregion

        #region Private Properties

        private int id = -1;
        private string userID = string.Empty;
        private string name = string.Empty;
        private string password = string.Empty;
        private string declaring = string.Empty;
        private int status = -1;
        private bool isMale = false;
        private int userLevel = -1;
        private bool enabled = false;
        private DateTime registerTime = DateTime.UtcNow;
        private DateTime lastLoginTime = DateTime.UtcNow;
        private int depID = -1;
        private string department = string.Empty;

        #endregion

        #region Public Properties

        [ProtoMember(1)]
        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        [ProtoMember(2)]
        public string UserID
        {
            get { return userID; }
            set { userID = value; }
        }
        [ProtoMember(3)]
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        [ProtoMember(4)]
        public string Password
        {
            get { return password; }
            set { password = value; }
        }
        [ProtoMember(5)]
        public string Declaring
        {
            get { return declaring; }
            set { declaring = value; }
        }
        [ProtoMember(6)]
        public int Status
        {
            get { return status; }
            set { status = value; }
        }
        [ProtoMember(7)]
        public bool IsMale
        {
            get { return isMale; }
            set { isMale = value; }
        }
        [ProtoMember(8)]
        public int UserLevel
        {
            get { return userLevel; }
            set { userLevel = value; }
        }
        [ProtoMember(9)]
        public bool Enabled
        {
            get { return enabled; }
            set { enabled = value; }
        }
        [ProtoMember(10)]
        public DateTime RegisterTime
        {
            get { return registerTime; }
            set { registerTime = value; }
        }
        [ProtoMember(11)]
        public DateTime LastLoginTime
        {
            get { return lastLoginTime; }
            set { lastLoginTime = value; }
        }
        [ProtoMember(12)]
        public int DepID
        {
            get { return depID; }
            set { depID = value; }
        }
        [ProtoMember(13)]
        public string Department
        {
            get { return department; }
            set { department = value; }
        }

        #endregion




    }
Users实体类,支持Protobuf.net序列化

服务器端程序的处理代码:

 

在服务器端构造函数中声明针对登陆操作的处理器:

//用户验证处理器

            NetworkComms.AppendGlobalIncomingPacketHandler<Users>("Login", HandleUserVerify);
//用户登录验证
        private void HandleUserVerify(PacketHeader header, Connection connection, Users theUser)
        {
            LoginResult loginResult = new LoginResult();

            Users currentUser = DoUsers.GetUserByID(theUser.UserID);

            string message;

            if (currentUser != null)
            {

                if (currentUser.Password == theUser.Password)
                    message = "登录成功";
                else if (currentUser.Password == "msdcmsdcmsdcmsdcmsdc")
                    message = "用户未开通,请与管理员联系";
                else if (currentUser.Password != theUser.Password)
                    message = "用户名密码不匹配";
                else
                    message = "登录不成功,原因未知";
            }
            else
            {
                message = "用户不存在";
            }



            loginResult.Message = message;
            loginResult.Department = currentUser.Department;
            loginResult.UserName = currentUser.Name;

            connection.SendObject("LoginResult", loginResult);

          

        }
 [ProtoContract]
    public class LoginResult
    {
        [ProtoMember(1)]
        public string Message { get; set; }

        [ProtoMember(2)]
        public string Department { get; set; }

        [ProtoMember(3)]

        public string UserName { get; set; }

        public LoginResult() { }

        public LoginResult(string message)
        {
            this.Message = message;
        }

        public LoginResult(string message,string department)
        {
            this.Message = message;
            this.Department = department;
        }

        public LoginResult(string message, string department,string userName)
        {
            this.Message = message;
            this.Department = department;
            this.UserName = userName;
        }

    }
LoginResult契约类

 

DoUsers类中相关方法

public static Users GetUserByID(string userID)
        {
            using (IDataReader reader = DBUsers.GetOneByUserID(userID))
            {
                
                Users theUser = PopulateFromReader(reader);

                return theUser;

             
            }

        }
private static Users PopulateFromReader(IDataReader reader)
        {
            Users Users = new Users();
            if (reader.Read())
            {
                Users.Id = Convert.ToInt32(reader["Id"]);
                Users.UserID = reader["UserID"].ToString();
                Users.Name = reader["Name"].ToString();
                Users.Password = reader["Password"].ToString();
                Users.Declaring = reader["Declaring"].ToString();
                Users.Status = Convert.ToInt32(reader["Status"]);
                Users.IsMale = Convert.ToBoolean(reader["IsMale"]);
                Users.UserLevel = Convert.ToInt32(reader["UserLevel"]);
                Users.Enabled = Convert.ToBoolean(reader["Enabled"]);
                Users.RegisterTime = Convert.ToDateTime(reader["RegisterTime"]);
                Users.LastLoginTime = Convert.ToDateTime(reader["LastLoginTime"]);
                Users.DepID = Convert.ToInt32(reader["DepID"]);
                Users.Department = reader["Department"].ToString();

            }
            return Users;
        }

 

DBUsers类中相关方法

//根据UserID获取记录

        public static IDataReader GetOneByUserID(string userID)
        {
            SqlParameterHelper sph = new SqlParameterHelper(GetReadConnectionString(), "Users_SelectOneByUserID", 1);
        
            sph.DefineSqlParameter("@UserID", SqlDbType.NVarChar, 200, ParameterDirection.Input, userID);
            return sph.ExecuteReader();

        }

数据库中相关的存储过程

CREATE PROCEDURE [dbo].Users_SelectOneByUserID
 

@UserID  nvarchar(100)

AS


SELECT
        [Id],
        [UserID],
        [Name],
        [Password],
        [Declaring],
        [Status],
        [IsMale],
        [UserLevel],
        [Enabled],
        [RegisterTime],
        [LastLoginTime],
        [DepID],
        [Department]
        
FROM
        [dbo].[Users]
        
WHERE
        UserID=@UserID

 

【开源下载】基于TCP网络通信的即时聊天系统(IM系统)(c#源码)

【开源下载】基于TCP网络通信的自动升级程序c#源码

【开源下载】基于winform的xml菜单编辑器(c#源码)

[源码下载]Demo2.模拟简单登陆-效果图 基于networkcomms2.3.1

[源码下载]Demo1 客户端从服务器获取信息(基于networkcomms2.3.1)

【模板下载】分享我所使用的数据库框架

转载于:https://my.oschina.net/networkcomms/blog/382022

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值