⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servicemain.cs

📁 kuiMsg是一款用.net C# 开发的即时消息开源软件,适合.net即时消息软件开发者用。 主要功能: 支持文件传输(p2p); 支持GIF动画表情( 彻底消除闪屏 :) );
💻 CS
📖 第 1 页 / 共 3 页
字号:
               this.WirteLog("用户" + userID + "修改密码成功");
           }
           else
           {
               this.WirteLog("用户" + userID + "修改密码不成功");
           }
        }
        #endregion

        #region 用户转发消息
        /// <summary>
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// </summary>
        /// <param name="e"></param>
        private void onTransmitMsg(DataArrivalEventArgs e)
        {
            IMLibrary.serverTransmitMsg msg = IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.serverTransmitMsg;
            if (msg == null) return;//抛掉非法消息

            IMLibrary.UserInfo user = this.findUser(msg.recipientId);
            if (user == null) return;//抛掉非法消息

            this.sendMsgToOneUser(msg.msgContent, user.IP, user.Port);//将消息转发出去

            //this.WirteLog("转发用户"+msg.sendId +"发送给用户"+msg.recipientId +"的消息!");
        }
        #endregion

        #region 初始化组织机构、用户信息版本
        /// <summary>
        /// 初始化组织机构、用户信息版本
        /// </summary>
        private void updateDepAndUserVersion()
        {
           try
           {
               // object obj;

               //IMLibrary.SqlData.DataAccess.ExecProc("getVersion", out obj, "dep");

               VersionDepAndUser.departmentVersion = this.settings.departmentVersion;// Convert.ToInt32(obj);//获得组织机构版本
               this.WirteLog("获得组织机构版本!");

               //IMLibrary.SqlData.DataAccess.ExecProc("getVersion", out obj, "user");
               VersionDepAndUser.usersVersion =this.settings.usersVersion;// Convert.ToInt32(obj);//获得用户版本

               this.VersionDepAndUser.departmentCount =(byte) this.deps.Count;//获得部门数量
               this.VersionDepAndUser.usersCount = (uint)this.systemUsers.Length -1;//获得用户数量
               this.WirteLog("初始化组织机构、用户版本数据成功!");
           }
           catch
           {
               this.WirteLog("初始化组织机构、用户版本数据读取错误!请检查数据库联接是否正确。");
           }

       }
        #endregion

        #region 初始化部门列表
       /// <summary>
       /// 初始化部门列表
       /// </summary>
       private void updateDepCollections()
       {
           IMLibrary.DepartmentCollections tempDeps = new DepartmentCollections();

           SqlDataReader dr = null;
           //System.Data.OracleClient.OracleDataReader dr = null;

           this.WirteLog("开始执行组织机构部门查询SQL语句!");

           try
           {
              // dr = IMLibrary.SqlData.DataAccess.GetReaderBySql("select groupID as depId,group_name as depName,parentId as SuperiorID from groups");
               dr = IMLibrary.SqlData.DataAccess.GetReaderByProc("GetDepList");
               //dr = IMLibrary.OracleData.DataAccess.GetReaderBySql("select groupID as depId,group_name as depName,parentId as SuperiorID from gdtel_group");
           }
           catch
           {
               this.WirteLog("执行组织机构部门查询SQL错误!");
               return;
           }

           int SuperiorID = 0;

           if (dr != null)
               while (dr.Read())
               {
                   //if (Convert.ToInt32(dr["SuperiorID"]) == 1)
                   //    SuperiorID = 0;
                   //else
                   SuperiorID = Convert.ToInt32(dr["SuperiorID"]);
                   try
                   {
                       //    if (Convert.ToInt32(dr["depId"]) != 1)
                       this.DepfromDbToDeps(Convert.ToInt32(dr["depId"]), Convert.ToString(dr["depName"]).Trim(), SuperiorID, tempDeps);

                   }
                   catch { this.WirteLog("读取组织机构部门数据错误!"); }
               }
           dr.Close();
           dr.Dispose();
           this.deps.Clear();
           this.deps = tempDeps;
           this.WirteLog("读取部门数据结束,组织机构初始化成功!部门数量:" + this.deps.Count.ToString());
       }

       /// <summary>
       /// 从数据库中添加一个部门到部门集合
       /// </summary>
       /// <param name="depID">部门ID</param>
       /// <param name="DepName">部门名称</param>
       /// <param name="SuperiorID">部门上级部门</param>
       /// <param name="tDeps">部门集合</param>
       private IMLibrary.Department DepfromDbToDeps(int depID, string DepName, int SuperiorID, IMLibrary.DepartmentCollections tDeps)
       {
           IMLibrary.Department dep = new Department(depID, DepName, SuperiorID);
           tDeps.add(dep);
           return dep;
       }
       #endregion

        #region 初始化用户列表
       /// <summary>
       /// 初始化用户列表
       /// </summary>
       private void updateUserCollections()/// 初始化用户列表
       {
           System.Data.SqlClient.SqlDataReader drUserCount = null;
           //System.Data.OracleClient.OracleDataReader drUserCount = null;
           try
           {
               drUserCount = IMLibrary.SqlData.DataAccess.GetReaderBySql("select count(*) as userCount from SystemUsers");
               //drUserCount = IMLibrary.OracleData.DataAccess.GetReaderBySql("select count(*) as userCount from gdtel_user");
           }
           catch { this.WirteLog("读取数据中用户数据表出现错误!"); }
           if (drUserCount == null) return;
           if (drUserCount.Read())
           {
               this.systemUsers = new UserInfo[Convert.ToUInt32(drUserCount[0]) + 1];
           }
           this.WirteLog("查询得知用户数为:" + (systemUsers.Length - 1).ToString());
           drUserCount.Close();

           System.Data.SqlClient.SqlDataReader dr = null;
           //System.Data.OracleClient.OracleDataReader dr = null;

           try
           {
               //dr = IMLibrary.SqlData.DataAccess.GetReaderBySql("select userName as userId,Name as userName,groupID as depId from users  order by orderID asc,userID asc");
               dr= IMLibrary.SqlData.DataAccess.GetReaderByProc("GetUserList", "");//获得所有系统用户数据dr
               //dr = IMLibrary.OracleData.DataAccess.GetReaderBySql("select userName as userId,Name as userName,groupID as depId from gdtel_user");
           }
           catch { this.WirteLog("读取数据中用户数据表出现错误!");}

           if (dr == null) return;

           uint userCount = 0;//保留第一个下标

           while (dr.Read())
           {
               userCount++;
               systemUsers[userCount] = new UserInfo(userCount, Convert.ToString(dr["userId"]).Trim(), Convert.ToString(dr["userName"]).Trim(), Convert.ToInt32(dr["depId"]));
               //this.WirteLog(Convert.ToString(dr["userId"]).Trim() +":"+  Convert.ToString(dr["userName"]).Trim() +":"+ Convert.ToInt32(dr["depId"]).ToString()); 
           }
           dr.Close();
           dr.Dispose();

           this.WirteLog("初始化用户数据表成功!用户数量为:" + (this.systemUsers.Length - 1).ToString());
       }
       #endregion

        #region 将用户请求的部分部门信息发给用户
        /// <summary>
        /// 将用户请求的部分部门信息发给用户
        /// </summary>
        /// <param name="e"></param>
        private void onSendDeps(DataArrivalEventArgs e)
        {
            //为不超过MTU限制,每次只发送5个部门数据
            IMLibrary.ServerMsg msg =   IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.ServerMsg;
            if(msg==null ){ return; }//抛掉非法数据

            int requestCurrDep =  IMLibrary.TextEncoder.bytesToInt(msg.msgContent);//获得要发送的超始部门序号位置
            int i=0;
             
            IMLibrary.DepartmentCollections  tempDep = new DepartmentCollections();

            foreach (IMLibrary.Department dep in this.deps)
            {
                i++; 
                if (i > requestCurrDep + 5)//每次发送5个部门的信息数据
                    break;

                if (i > requestCurrDep)
                    tempDep.add(dep);
            }

            this.sendMsgToOneUser(7, IMLibrary.Serializers.ObjToByte(tempDep),e.IP,e.Port);
           // this.WirteLog("用户要求发送从第" + requestCurrDep.ToString() + "个部门开始的部分部门信息数据。");
        }
        #endregion

        #region 将用户请求的部分用户信息发给用户
        /// <summary>
        /// 将用户请求的部分用户信息发给用户
        /// </summary>
        /// <param name="e"></param>
        private void onSendUsers(DataArrivalEventArgs e)
        {
            //为不超过MTU限制,每次只发送5个用户的基本数据
            IMLibrary.ServerMsg msg;

            msg = IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.ServerMsg;

            if (msg == null) { return; }//抛掉非法数据

            uint  requestCurrUser = IMLibrary.TextEncoder.bytesToUInt32(msg.msgContent) + 1;//获得要发送的超始用户序号位置

            int SendUserCount = this.settings.sendUserCount ;//获得每次要发送的用户数

            IMLibrary.UserCollections tempUsers = new UserCollections();//申明临时集合

            for (uint index = requestCurrUser; index < (requestCurrUser + SendUserCount); index++)//将用户要求的用户数添加到集合
                if (index < systemUsers.Length)
                    tempUsers.add(systemUsers[index]);
                else
                    break;

            this.sendMsgToOneUser(8, IMLibrary.Serializers.ObjToByte(tempUsers), e.IP, e.Port);

            //this.WirteLog("用户要求发送从第" + requestCurrUser.ToString() + "个用户开始的部分用户信息数据。");
        }
        #endregion

        #region 更新用户在线状态 onUserOnlineChanageState(DataArrivalEventArgs e)
        /// <summary>
        /// 更新用户在线状态
        /// </summary>
        /// <param name="e"></param>
        private void onUserOnlineChanageState(DataArrivalEventArgs e)//用户更改在线状态事件(如联机改成脱机、离线、接听电话等状态)
        {
            IMLibrary.ServerMsg msg;
            msg = IMLibrary.Serializers.ByteToObj(e.Data) as ServerMsg;
            if (msg == null) 
            {this.WirteLog("用户联接状态确认事件中消息反序列化失败。非法用户-" + e.IP.ToString() + ":" + e.Port); return;}

            //this.systemUsers[msg.ID].State = msg.msgContent[0];
            this.systemUsers[msg.ID].tempState = msg.msgContent[0];
            
            byte[] buf = new byte[1];
            //if (this.systemUsers[msg.ID].State != 0)
            //{ 
            ///连续发送二次,也免数据包丢失
                this.sendMsgToOneUser(6, buf, e.IP, e.Port);//告诉用户与服务器保持联接状态
                System.Threading.Thread.Sleep(50);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -