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

NetworkComms网络通信框架序言

客户端登陆界面如下:

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

客户端代码:

                   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)

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

你可能感兴趣的:(用户)