void msgServer_RequestOrgRooms(object sender, MsgServerEventArgs e) { DownloadRooms dRooms = e.obj as DownloadRooms; dRooms.to = e.RequestUser.UserID; dRooms.from = ""; int i = 0; foreach (Room room in GetRooms(e.RequestUser)) { dRooms.Data.Add(room); i++; if (i == 5) //每次发送5个群信息 { SendMessageToUser(e.RequestUser, dRooms); //发送群信息 dRooms.Data = new List <object>(); //用户信息清零 i = 0; } } if (dRooms.Data.Count > 0) //发送剩下的群信息 { SendMessageToUser(e.RequestUser, dRooms); //发送群信息 } }
/// <summary> /// 获得组织机构版本信息 /// </summary> /// <param name="org"></param> private void onOrgVersion(OrgVersion org) { try { #region 判断登录的用户本地数据库文件夹是否存在 System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(MyAuth.UserID); if (!dInfo.Exists) dInfo.Create(); string FileNamePath =Application.StartupPath +"\\"+ MyAuth.UserID + "\\Record.mdb"; if (!System.IO.File.Exists(FileNamePath)) System.IO.File.Copy(Application.StartupPath + "\\Record.db", FileNamePath); ////初始化本地数据库连接字符串 IMLibrary3.Data.SQLiteDBHelper.connectionString = "data source=" + FileNamePath; #endregion OrgVersion localOrg = OpeRecordDB.GetOrgVersion(MyAuth.UserID); #region 如果版本已经改变下载组织机构组信息 if (org.GroupsVersion != localOrg.GroupsVersion)//true { Groups.Clear(); treeView_Organization.Nodes.Clear(); OpeRecordDB.DeleteAllGroup();//删除本地数据库中分组信息 frmOrg = new FormDownOrganization(); frmOrg.Shown += delegate(object sender, EventArgs e) { DownloadGroups dGroups = new DownloadGroups(); dGroups.from = MyAuth.UserID; dGroups.type = type.get; SendMessageToServer(dGroups);//请求下载分组信息 }; frmOrg.MaxValue = org.GroupsCount; frmOrg.ShowText = "正在下载分组信息..."; frmOrg.ShowDialog(); OpeRecordDB.AddGroups(this.Groups);//将下载的分组信息保存于数据库中 } #endregion #region 下载组织机构用户信息 if (org.UsersVersion != localOrg.UsersVersion)//(true) { Users.Clear(); treeView_Organization.Nodes.Clear(); OpeRecordDB.DeleteAllUser();//删除本地数据库中用户信息 frmOrg = new FormDownOrganization(); frmOrg.Shown += delegate(object sender, EventArgs e) { DownloadUsers dUsers = new DownloadUsers(); dUsers.from = MyAuth.UserID; dUsers.type = type.get; SendMessageToServer(dUsers);//请求下载联系人信息 }; frmOrg.MaxValue = org.UsersCount; frmOrg.ShowText = "正在下载用户信息..."; frmOrg.ShowDialog(); OpeRecordDB.AddUsers(this.Users); } #endregion #region 下载群信息 if (org.RoomsCount !=0)//如果群数大于0 { Rooms.Clear(); treeView_Rooms.Nodes.Clear(); //OpeRecordDB.DeleteAllRoom();//删除本地数据库中群信息 frmOrg = new FormDownOrganization(); frmOrg.Shown += delegate(object sender, EventArgs e) { DownloadRooms dRooms = new DownloadRooms(); dRooms.from = MyAuth.UserID; dRooms.type = type.get; SendMessageToServer(dRooms);//请求下载群信息 }; frmOrg.MaxValue = org.RoomsCount; frmOrg.ShowText = "正在下载群资料..."; frmOrg.ShowDialog(); //OpeRecordDB.AddRooms(this.Rooms); } #endregion //如果组织机构已经更改或组织机构未加载到树图 if (this.treeView_Organization.Nodes.Count == 0) { //则更新到本地数据库 OpeRecordDB.UpdateOrgVersion(org); this.Groups = OpeRecordDB.GetGroups(); this.Users = OpeRecordDB.GetUsers(); treeViewAddOrg();//加载树 } if (this.treeView_Rooms.Nodes.Count == 0) { //this.Rooms = OpeRecordDB.GetRooms(); foreach (Room room in this.Rooms) { foreach (string userID in room.UserIDs.Split(';')) { User user = findUser(userID); if (user != null) room.Users.Add(user.UserID, user); } } treeViewAddRooms(this.Rooms); } //请求联系人在线状态信息 Presence pre = new Presence(); pre.from = MyAuth.UserID; pre.type = type.get;//必须设置 set,以表示是设置,如果为get,则是获取所有联系人的状态 SendMessageToServer(pre); } catch (Exception ex) { IMLibrary3.Global.MsgShow(ex.Source + ex.Message); } }