예제 #1
0
        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); //发送群信息
            }
        }
예제 #2
0
        /// <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);
            }
        }