您的位置:首页 > 其它

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

2015-02-08 21:06 429 查看
客户端登陆界面如下:



客户端代码:

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: