/// <summary> /// 创建新用户 /// </summary> /// <param name="card"></param> public static int CreateUserVcard(UserVcard card) { string sql = "insert into Users(userID,userName,GroupID,orderID,sex,Password,FaceIndex,CreateRooms,isAdmin,isSendSMS,isEditUserData,isSendNotice,isBroadcast,Vcard)" + "values(@userID,@userName,@GroupID,@orderID,@sex,@Password,@FaceIndex,@CreateRooms,@isAdmin,@isSendSMS,@isEditUserData,@isSendNotice,@isBroadcast,@Vcard)"; System.Data.SqlClient.SqlParameter[] sqlpar = new System.Data.SqlClient.SqlParameter[] { new System.Data.SqlClient.SqlParameter("@userID",card.UserID ), new System.Data.SqlClient.SqlParameter("@userName",card.UserName ), new System.Data.SqlClient.SqlParameter("@GroupID",card.GroupID ), new System.Data.SqlClient.SqlParameter("@orderID",card.OrderID ), new System.Data.SqlClient.SqlParameter("@sex", card.Sex), new System.Data.SqlClient.SqlParameter("@Password", card.Password), new System.Data.SqlClient.SqlParameter("@FaceIndex", card.FaceIndex), new System.Data.SqlClient.SqlParameter("@CreateRooms", card.CreateRooms), new System.Data.SqlClient.SqlParameter("@isAdmin", card.isAdmin), new System.Data.SqlClient.SqlParameter("@isSendSMS", card.isSendSMS), new System.Data.SqlClient.SqlParameter("@isEditUserData", card.isEditUserData), new System.Data.SqlClient.SqlParameter("@isSendNotice", card.isSendNotice), new System.Data.SqlClient.SqlParameter("@isBroadcast", card.isBroadcast), new System.Data.SqlClient.SqlParameter("@Vcard",Factory.CreateXMLMsg(card)), }; return IMLibrary.SqlData.DataAccess.ExecSql(sql, sqlpar); }
/// <summary> /// 更新用户信息 /// </summary> /// <param name="card"></param> public static int UpdateUserVcard(UserVcard card) { string sql = "update Users set userName=@userName,GroupID=@GroupID,orderID=@orderID,sex=@sex,Password=@Password,FaceIndex=@FaceIndex," + "CreateRooms=@CreateRooms,isAdmin=@isAdmin,isSendSMS=@isSendSMS,isEditUserData=@isEditUserData,isSendNotice=@isSendNotice,isBroadcast=@isBroadcast,Vcard=@Vcard" + " where userID=@userID"; System.Data.SqlClient.SqlParameter[] sqlpar = new System.Data.SqlClient.SqlParameter[] { new System.Data.SqlClient.SqlParameter("@userID",card.UserID ), new System.Data.SqlClient.SqlParameter("@userName",card.UserName ), new System.Data.SqlClient.SqlParameter("@GroupID",card.GroupID ), new System.Data.SqlClient.SqlParameter("@orderID",card.OrderID ), new System.Data.SqlClient.SqlParameter("@sex", card.Sex), new System.Data.SqlClient.SqlParameter("@Password", card.Password), new System.Data.SqlClient.SqlParameter("@FaceIndex", card.FaceIndex), new System.Data.SqlClient.SqlParameter("@CreateRooms", card.CreateRooms), new System.Data.SqlClient.SqlParameter("@isAdmin", card.isAdmin), new System.Data.SqlClient.SqlParameter("@isSendSMS", card.isSendSMS), new System.Data.SqlClient.SqlParameter("@isEditUserData", card.isEditUserData), new System.Data.SqlClient.SqlParameter("@isSendNotice", card.isSendNotice), new System.Data.SqlClient.SqlParameter("@isBroadcast", card.isBroadcast), new System.Data.SqlClient.SqlParameter("@Vcard",Factory.CreateXMLMsg(card)), }; return IMLibrary.SqlData.DataAccess.ExecSql(sql, sqlpar); }
/// <summary> /// 从用户中获取加入的群集合数组 /// </summary> /// <param name="user"></param> /// <returns></returns> private Room[] GetRooms(UserVcard user) { lock (user.Rooms)//确保线程安全 { Room[] Rooms = new Room[user.Rooms.Count]; user.Rooms.Values.CopyTo(Rooms, 0); return Rooms; } }
/// <summary> /// 从群中获取用户集合数组 /// </summary> /// <param name="room"></param> /// <returns></returns> private UserVcard[] GetUsers(Room room) { lock (room.Users)//确保线程安全 { UserVcard[] Users = new UserVcard[room.Users.Count]; room.Users.Values.CopyTo(Users, 0); return Users; } }
private void onUserVcard(UserVcard card) { if (frmUserVcard != null && !frmUserVcard.IsDisposed && card.type == type.New) frmUserVcard.isUpdateSuccess = true; exUser user = findUser(card.UserID);//查找本地用户是否存在操作用户 if (card.type == type.New && user == null) { user = new exUser(); user.UserID = card.UserID; user.GroupID = card.GroupID; Users.Add(user); addUserTreeNode(user);//将用户节点添加到树 user.UserName = card.UserName; OpeRecordDB.UpdateUserVcard(card);//添加到本地数据库 } else if (card.type == type.delete && user != null) { TreeNode node = user.TreeNode as TreeNode; if (node != null && node.Parent != null) { if (user.ShowType != IMLibrary3.Enmu.ShowType.Offline) user.Group.OnLineUserCount -= 1; user.Group.UserCount -= 1; node.Parent.Nodes.Remove(node);//删除用户树节点 Form frm = user.Tag as Form; if (frm != null && !frm.IsDisposed) { frm.Close(); frm.Dispose(); }//关闭用户对话窗口 Users.Remove(user);//删除用户 OpeRecordDB.DeleteUser(card.UserID);//本地数据库中删除 } } else if (user != null) { FormUserVcard frm = getUserVcardForm(card.UserID); if (frm != null && !frm.IsDisposed) if (card.type != type.set) frm.UserVcard = card; else frm.isUpdateSuccess = true; user.UserName = card.UserName; OpeRecordDB.UpdateUserVcard(card);//更新本地数据库 } }
private void TsmDelUser_Click(object sender, EventArgs e) { TreeNode node = treeView_Organization.SelectedNode; if (node != null && node.Tag is exUser) { exUser user = node.Tag as exUser; if (MessageBox.Show("确定要删除用户 " + user.UserName + "(" + user.UserID + ")吗?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information ) == DialogResult.Yes) { UserVcard card = new UserVcard(); card.UserID = user.UserID; card.UserName = user.UserName; card.GroupID = user.GroupID; card.type = type.delete; SendMessageToServer(card);//通知服务器删除用户 } } }
/// <summary> /// 显示用户资料窗口 /// </summary> /// <param name="user"></param> public void ShowUserVcard(exUser user) { FormUserVcard frm = getUserVcardForm(user.UserID); if (frm == null) { frm = new FormUserVcard(); frmUserVcards.Add(user.UserID, frm); if (MyAuth.isAdmin)//如果是管理员,则添加更新事件 frm.UpdateVcard += delegate(object sender1, UserVcard userVcard)//更新事件 { UpdateUser(userVcard);//更新用户资料 }; else//如果不是管理员,则添加刷新事件 frm.RefreshVcard += delegate(object sender1, UserVcard userVcard)//刷新事件 { //向服务器请求获得用户最新资料 userVcard.type = type.get; SendMessageToServer(userVcard); }; frm.FormClosed += delegate(object sender1, FormClosedEventArgs e1)//窗口关闭事件 { frm.Dispose(); frmUserVcards.Remove(user.UserID); }; frm.ChanagePassword += delegate(object sender2, ChangePassword e2)//密码修改事件 { if (!frm.isAdmin && e2.OldPassword != myPassword) { IMLibrary3.Global.MsgShow("旧密码不正确,请重新输入"); return; } SendMessageToServer((object)e2); }; UserVcard card = OpeRecordDB.GetUserVcard(user.UserID); if (card == null) { card = new UserVcard(); card.UserID = user.UserID; card.UserName = user.UserName; card.GroupID = user.GroupID; card.OrderID = user.OrderID; //向服务器请求获得用户最新资料 card.type = type.get; SendMessageToServer(card); } frm.UserVcard = card; } if (MyAuth.isAdmin)//如果是管理员 frm.Text = "修改 " + user.UserName + "(" + user.UserID + ")的资料"; else frm.Text = "查看 " + user.UserName + "(" + user.UserID + ")的资料"; frm.myUserID = MyAuth.UserID; frm.isAdmin = MyAuth.isAdmin; frm.IsCreate = false; frm.Show(); frm.Activate (); }
/// <summary> /// 更新用户 /// </summary> /// <param name="userVcard"></param> public void UpdateUser(UserVcard card) { card.type = type.set; SendMessageToServer(card); }
/// <summary> /// 创建新用户 /// </summary> /// <param name="userVcard"></param> public void CreateUser(UserVcard card) { card.type = type.New; SendMessageToServer(card); }
/// <summary> /// 更新用户Card,无数据则添加 /// </summary> /// <param name="card"></param> public static void UpdateUserVcard(UserVcard card) { string sql = "update Users set UserName=@UserName,GroupID=@GroupID,OrderID=@OrderID where UserID=@UserID;" +"update UsersVcard set Vcard=@Vcard,LastUpdateTime=@LastUpdateTime where UserID=@UserID"; System.Data.SQLite.SQLiteParameter[] parameters = new System.Data.SQLite.SQLiteParameter[]{ new System.Data.SQLite.SQLiteParameter("@UserID",card.UserID ), new System.Data.SQLite.SQLiteParameter("@UserName",card.UserName ), new System.Data.SQLite.SQLiteParameter("@GroupID",card.GroupID ), new System.Data.SQLite.SQLiteParameter("@OrderID",card.OrderID ), new System.Data.SQLite.SQLiteParameter("@Vcard",IMLibrary3.Protocol.Factory.CreateXMLMsg(card)), new System.Data.SQLite.SQLiteParameter("@LastUpdateTime",DateTime.Now), }; if (SQLiteDBHelper.ExecuteNonQuery(sql, parameters) == 0) { sql = "insert into Users(UserID,UserName,GroupID,OrderID) values(@UserID,@UserName,@GroupID,@OrderID);" + "insert into UsersVcard(UserID,Vcard,LastUpdateTime) values(@UserID,@Vcard,@LastUpdateTime)"; SQLiteDBHelper.ExecuteNonQuery(sql, parameters); } }
/// <summary> /// /// </summary> /// <param name="Session">TCP客户端</param> /// <param name="XMLMsg">XML消息字符串</param> /// <param name="obj">消息转换的对像</param> /// <param name="RequestUser">请求用户</param> public MsgServerEventArgs(TCPServerSession Session, string XMLMsg, object obj, UserVcard RequestUser) { this.Session = Session; this.XMLMsg = XMLMsg; this.obj = obj; this.RequestUser = RequestUser; }
/// <summary> /// 管理员添加变更用户信息 /// </summary> /// <param name="card"></param> /// <param name="xmlMsg"></param> /// <param name="session"></param> private void onUserVcard(UserVcard card, string xmlMsg, TCPServerSession session) { if (card.UserID.Trim() == "" || card.UserName.Trim() == "" || card.GroupID.Trim() == "") return; card.UserID = card.UserID.Trim(); UserVcard user = getUser(card.UserID); UserVcard requestUser = session.Tag as UserVcard;//请求用户 if (card.type == type.New && user == null && requestUser.isAdmin)//如果用户不存在,创建新用户 { Users.Add(card.UserID, card); //设置新用户密码为123456; card.Password = IMLibrary3.Security.Hasher.GetMD5Hash(IMLibrary3.Operation.TextEncoder.textToBytes("123456")); DBHelper.CreateUserVcard(card);//保存于数据库 orgVersion = DBHelper.ResetOrgVersion(); //重设组织架构版本相关信息 BroadcastingMessageToOnlineUser(xmlMsg);//将创建的新用户信息广播给所有在线用户 } else if (card.type == type.set && requestUser.isAdmin)//如果是更新用户 { if (user == null) return;//如果用户不存在则退出 string oldInfo = user.UserName + user.GroupID + user.OrderID;//老信息 string newInfo = card.UserName.Trim() + card.GroupID.Trim() + card.OrderID; //新信息 user.UserName = card.UserName.Trim(); user.GroupID = card.GroupID.Trim(); user.OrderID = card.OrderID; user.Job = card.Job.Trim(); user.OfficePhone = card.OfficePhone.Trim(); user.Mail = card.Mail.Trim(); user.Phone = card.Phone.Trim(); user.Post = card.Post.Trim(); user.Remark = card.Remark.Trim(); user.Birthday = card.Birthday.Trim(); user.Sex = card.Sex; user.CreateRooms = card.CreateRooms; user.Disable = card.Disable; user.isAdmin = card.isAdmin; user.isSendNotice = card.isSendNotice; user.isSendSMS = card.isSendSMS; DBHelper.UpdateUserVcard(user);//更新数据库 if (oldInfo != newInfo)//如果用户基本信息发生变更,则变更组织架构 orgVersion = DBHelper.ResetOrgVersion(); //重设组织架构版本相关信息 SendMessageToUser(requestUser, xmlMsg);//通知管理员创建新用户成功 } else if (card.type == type.get)//如果是获取用户资料 { if (user == null) return;//如果用户不存在则退出 user.type = type.result; SendMessageToUser(requestUser, Factory.CreateXMLMsg(user));//将用户资料发送给请求者 } else if (card.type == type.delete && requestUser.isAdmin)//如果是删除用户 { if (user == null) return;//如果用户不存在则退出 if (requestUser.UserID == user.UserID) return;//如果管理员想删除自己,退出 TCPServerSession se = user.Tag as TCPServerSession; if (se != null && se.IsConnected) { se.Disconnect(); se.Dispose(); }//如果删除的用户在线,则将其踢出 Users.Remove(card.UserID); DBHelper.DelUser(card.UserID);//数据库中删除 orgVersion = DBHelper.ResetOrgVersion(); //重设组织架构版本相关信息 BroadcastingMessageToOnlineUser(xmlMsg);//将删除的用户广播给所有在线用户 } }
/// <summary> /// 用户请求更新密码 /// </summary> /// <param name="changePWD">变量密码协议</param> /// <param name="requestUser">请求用户</param> private void onChangePassword(ChangePassword changePWD, string XMLMsg, UserVcard requestUser) { if (changePWD.NewPassword.Trim() == "") return; UserVcard user = getUser(changePWD.from); if (user == null) return; ///将密码Hash为MD5 changePWD.OldPassword = IMLibrary3.Security.Hasher.GetMD5Hash(IMLibrary3.Operation.TextEncoder.textToBytes(changePWD.OldPassword.Trim())); changePWD.NewPassword = IMLibrary3.Security.Hasher.GetMD5Hash(IMLibrary3.Operation.TextEncoder.textToBytes(changePWD.NewPassword.Trim())); if (requestUser.isAdmin || changePWD.OldPassword == user.Password)//如果用户是管理员 { if (DBHelper.UpdatePassword(user.UserID, changePWD.NewPassword) > 0)//更新密码 { user.Password = changePWD.NewPassword; SendMessageToUser(requestUser, XMLMsg);//通知用户更新密码成功 } } }
/// <summary> /// 将所有数据库中用户详细信息读入内存 /// </summary> /// <returns></returns> public static Dictionary<string, UserVcard> GetUserVcards() { Dictionary<string, UserVcard> users = new Dictionary<string, UserVcard>(); System.Data.SqlClient.SqlDataReader dr = DataAccess.GetReaderBySql("select * from users"); if (dr != null) { while (dr.Read()) { UserVcard user = new UserVcard(); user.UserID = dr["UserID"].ToString().Trim(); user.UserName = dr["UserName"] is DBNull ? user.UserID : dr["UserName"].ToString().Trim(); user.Password = dr["Password"] is DBNull ? "E10ADC3949BA59ABBE56E057F20F883E" : dr["Password"].ToString().Trim();//123456 user.Sex = Convert.ToByte(dr["Sex"] is DBNull ? 0 : dr["Sex"]); user.FaceIndex = Convert.ToInt32(dr["FaceIndex"] is DBNull ? 0 : dr["FaceIndex"]); user.GroupID = dr["GroupID"] is DBNull ? "" : dr["GroupID"].ToString().Trim(); user.OrderID = Convert.ToInt32(dr["OrderID"] is DBNull ? 0 : dr["OrderID"]); user.isAdmin = Convert.ToBoolean(dr["isAdmin"] is DBNull ? false : dr["isAdmin"]); user.isBroadcast = Convert.ToBoolean(dr["isBroadcast"] is DBNull ? false : dr["isBroadcast"]); user.isEditUserData = Convert.ToBoolean(dr["isEditUserData"] is DBNull ? false : dr["isEditUserData"]); user.isSendNotice = Convert.ToBoolean(dr["isSendNotice"] is DBNull ? false : dr["isSendNotice"]); user.isSendSMS = Convert.ToBoolean(dr["isSendSMS"] is DBNull ? false : dr["isSendSMS"]); user.CreateRooms = Convert.ToInt32(dr["CreateRooms"] is DBNull ? 0 : dr["CreateRooms"]); user.LastIP = dr["LastIP"] is DBNull ? "" : dr["LastIP"].ToString().Trim(); user.LastDateTime = dr["LastDateTime"] is DBNull ? "" : dr["LastDateTime"].ToString().Trim(); string cardstring = dr["Vcard"] is DBNull ? "<x x=\"\"/>" : dr["Vcard"].ToString().Trim(); UserVcard card = Factory.CreateInstanceObject(cardstring) as UserVcard;//鸡生蛋还是蛋生鸡?肯定有一个在前:) if (card != null)//扩展资料,可以添加很多 { user.Mail = card.Mail; user.OfficePhone = card.OfficePhone; user.Phone = card.Phone; user.Post = card.Post; user.Remark = card.Remark; user.Job = card.Job; user.Birthday = card.Birthday; } users.Add(user.UserID, user); } dr.Close(); } dr.Dispose(); return users; }