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

📄 formmain.cs

📁 kuiMsg是一款用.net C# 开发的即时消息开源软件,适合.net即时消息软件开发者用。 主要功能: 支持文件传输(p2p); 支持GIF动画表情( 彻底消除闪屏 :) );
💻 CS
📖 第 1 页 / 共 4 页
字号:
                ushort mtu=Convert.ToUInt16 (userUdpPenInfo[1]);
                if(user.MTU < mtu) 
                   user.MTU=mtu;
            }
            catch(Exception x)
            {
                MessageBox.Show(x.Message + x.Source);
            }
            //MessageBox.Show("用户UDP打洞成功。MTU值为:"+ user.MTU.ToString() );
        }
        #endregion

        #region 对方已经取消视频对话
        private void onCancelAV(DataArrivalEventArgs e)
        {
            IMLibrary.clientMsg  msg = IMLibrary.Serializers.ByteToObj (e.Data) as IMLibrary.clientMsg ;
            exUser user = FormAccess.findUser(msg.sendUserId );
            if (user == null) return;

            Form f = FormAccess.findForm(user.UserID);
            if (f == null) return;
          
            (f as FormSendMsg).CancelAV ( );
            f.Show();
            f.Activate();
        }
        #endregion

        #region  对方告诉可以开始视频
        private void onBeginAV(DataArrivalEventArgs e)
        {
            exUser user = FormAccess.findUser(IMLibrary.TextEncoder.bytesToText(e.Data));
            if (user == null) return;

            Form f = FormAccess.findForm(user.UserID);
            if (f == null) return;
             
            (f as FormSendMsg).BeginAV (e.IP, e.Port);
            f.Show();
            f.Activate();
        }
        #endregion

        #region 处理对方请求的视频对话
        /// <summary>
        /// 处理对方请求的视频对话
        /// </summary>
        /// <param name="e"></param>
        private void onAVRequest(DataArrivalEventArgs e)
        {
            exUser user = FormAccess.findUser(IMLibrary.TextEncoder.bytesToText(e.Data));
            if (user == null) return;

            Form f = FormAccess.findForm(user.UserID );
            if (f == null)
            {
                f = new FormSendMsg();
                f.Tag = user.UserID ;
                f.Text = "与  " + user.userName + "(" + user.UserID + ")  对话";
                FormAccess.sendMsgForms.add(f);
                IMLibrary.TaskbarNotifier tbn = new TaskbarNotifier(1);
                tbn.Show("提示", "用户" + user.userName + "(" + user.UserID + ")请求视频对话。", 500, 3000, 500);
            }
            (f as FormSendMsg).AVrequest(e.IP ,e.Port);
            f.Show();
            f.Activate();
        }
        #endregion

        #region 处理群发通知消息
        /// <summary>
        /// 处理群发通知消息
        /// </summary>
        /// <param name="e"></param>
        private void onGroupMsg(DataArrivalEventArgs e)
        {
            IMLibrary.clientMsg msg;
            try
            {
                msg = IMLibrary.Serializers.ByteToObj(e.Data) as clientMsg;
            }
            catch { return;}//抛掉非法数据 
            if (msg == null) return;

            string msgContent = msg.msgContent;

            exUser user = FormAccess.findUser(msg.sendUserId);
            if (user != null)
            {
                dataAccess.addMsgToDB(msgContent, user.UserID, FormAccess.selfInfo.UserID, "1", System.DateTime.Now.ToString(), "", false);
                msgContent += "\n发布:" + user.userName + "(" + user.UserID + ") " + System.DateTime.Now.ToString();
            }

            FormNotice f = new FormNotice();
            f.RTBNoticeContent.AppendText(msgContent);
            f.Show();
            f.Activate();
            IMLibrary.TaskbarNotifier tbn = new TaskbarNotifier(3);
            tbn.Show("提示", "收到 "+ user.userName + "(" + user.UserID + ") 发送的群发消息。", 500, 3000, 500);
        }
        #endregion

        #region 用户桌面截图发送请求
        /// <summary>
        /// 用户桌面截图发送请求
        /// </summary>
        /// <param name="e"></param>
        private void onUserImageSendRequest(DataArrivalEventArgs e)
        {

            string[] fileInfo = IMLibrary.TextEncoder.bytesToText(e.Data).Split('|');
            if (fileInfo.Length < 4) return;//抛掉非法数据 

            Form f = FormAccess.findForm(fileInfo[0]);
            if (f == null)//如果用户对话窗口已经不在,则发送消息告诉对方停止传输图片
            {
                return;
            }
            (f as FormSendMsg).ImageTransfers(false, fileInfo[1], fileInfo[1], fileInfo[2], Convert.ToInt32(fileInfo[3]),e.IP, e.Port);
            f.Show();
            f.Activate();
        }
        #endregion

        #region 用户发送文件请求
        /// <summary>
        /// 用户发送文件请求
        /// </summary>
        /// <param name="e"></param>
        private void onUserFileSendRequest(DataArrivalEventArgs e)
        {

            string[] fileInfo = IMLibrary.TextEncoder.bytesToText(e.Data).Split('|');
            if(fileInfo.Length<4)return;//抛掉非法数据 

            Form f = FormAccess.findForm(fileInfo[0]);

            if (f == null)
            {
                f = new FormSendMsg();
                exUser user=FormAccess.findUser(fileInfo[0]);
                if (user != null)
                {
                    f.Text = "与  " + user.userName + "(" + user.UserID + ")  对话";
                    IMLibrary.TaskbarNotifier tbn = new TaskbarNotifier(1);
                    tbn.Show("提示", user.userName + "(" + user.UserID + ")要发送文件:" + fileInfo[1] + " 给您,请接收或取消。", 500, 3000, 500);
                }
                f.Tag = fileInfo[0];
                FormAccess.sendMsgForms.add(f);
            }

            (f as FormSendMsg).FileTransfers(false, fileInfo[1], fileInfo[1], fileInfo[2], Convert.ToInt32(fileInfo[3]), e.IP, e.Port);
            f.Show();
            f.Activate();
          
        }
        #endregion

        #region 用户已在别处登录
        /// <summary>
        ///  用户已在别处登录
        /// </summary>
        private void onUserElseLogin()
        {
            this.timerCheckOnlinState.Enabled = false;//停止检测联机状态
            FormAccess.setUsersNoOnline();
            MessageBox.Show("当前用户 "+FormAccess.selfInfo.userName +"("+ FormAccess.selfInfo.UserID   +") 已经在别处登录,您已被迫离线。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information );
        }
        #endregion

        #region 用户离线
        /// <summary>
        /// 用户离线
        /// </summary>
        /// <param name="e"></param>
        private void onUserIsNotOnline(DataArrivalEventArgs e)
        {
            exUser user = FormAccess.findUser(IMLibrary.TextEncoder.bytesToText(e.Data) );
            if (user != null)
                user.State = 0;
        }
        #endregion

        #region 用户上线事件
        /// <summary>
        /// 用户上线事件
        /// </summary>
        /// <param name="e"></param>
        private void onUserOnline(DataArrivalEventArgs e)
        {
            IMLibrary.UserInfo user = IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.UserInfo;
            if (user == null) return;//抛掉非法数据
            
            exUser  User = FormAccess.findUser(user.UserID);
            if (User == null) return;//抛掉非法数据

            User.ID = user.ID;//用户在服务器上的索引
            User.userName = user.userName;//用户名字
            User.State = user.State;//用户在线状态
            User.IP = user.IP;//用户IP
            User.Port = user.Port;//用户端口
            User.MTU = 550; //清掉原来的MTU值,重新打洞算值。min =576

            if (User.UserID == FormAccess.selfInfo.UserID)
            {
                FormAccess.selfInfo.userName = User.userName;
                FormAccess.selfInfo.ID = User.ID;
                FormAccess.selfInfo.IP = User.IP;
                FormAccess.selfInfo.Port = User.Port;
            }
            else////向刚上线的用户UDP打洞
            {
                FormAccess.udpPenToUser(false, User);//慢速算法实现向用户UDP打洞       
            }
        }
        #endregion

        #region 收到用户对话消息
        /// <summary>
        /// 收到用户对话消息
        /// </summary>
        /// <param name="e"></param>
        private void onUserReceiveMsg(DataArrivalEventArgs e)
        {
            IMLibrary.clientMsg msg;
            try
            {
                msg =  IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.clientMsg;

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

            exUser user = FormAccess.findUser(msg.sendUserId );
            if (user == null) return;//抛掉非法数据
         
            Form f = FormAccess.findForm(msg.sendUserId);
            if (f == null)
            {
                f = new FormSendMsg();
                f.Tag = msg.sendUserId;
                if (user != null) f.Text = "与  " + user.userName + "(" + user.UserID + ")  对话";
                FormAccess.sendMsgForms.add(f);
                IMLibrary.TaskbarNotifier tbn = new TaskbarNotifier(1);
                tbn.Show("提示", "收到"+user.userName +"(" + user.UserID  +")发来的新消息", 500, 3000, 500);
            }
            (f as FormSendMsg).MsgToRichTextBox(msg,false);
            f.Show();

            FormAccess.palySound(FormAccess.resourceManager.GetStream("msg"));///播放声音
            f.Activate();
        }
        #endregion

        #region 用户收到消息并回复
        /// <summary>
        ///  用户收到消息并回复
        /// </summary>
        /// <param name="e"></param>
        private void onUserReceiveMsgReturn(DataArrivalEventArgs e)
        {
            IMLibrary.clientMsg msg;
            try
            {
                 msg =  IMLibrary.Serializers.ByteToObj(e.Data) as IMLibrary.clientMsg;

            }
            catch { return; }//抛掉非法数据

            if (msg == null) return;

            exUser user = FormAccess.findUser(msg.sendUserId);//查找用户

            if (user != null)
            {
                user.SendIsSuccess = true;//标记刚才发送的消息用户已经收到
            }
        }
        #endregion

        #region 服务器返回的部分在线用户的信息
        /// <summary>
        /// 服务器返回的部分在线用户的信息
        /// </summary>
        /// <param name="e"></param>
        private void onGetOnlineUserCollections(DataArrivalEventArgs e)
        {
            IMLibrary.UserCollections tempUsers;
            try
            {
                tempUsers = IMLibrary.Serializers.ByteToObj(e.Data) as UserCollections;//获得用户集合
            }
            catch { return; }// 非法数据则退出

            foreach (UserInfo tempUser in tempUsers)
            {
                exUser User = FormAccess.findUser(tempUser.UserID);
                 
                if (User != null)//如果用户在集合里查找到 
                { 
                    User.ID = tempUser.ID;
                    User.userName = tempUser.userName;
                    User.State = tempUser.State;
                    User.IP = tempUser.IP;
                    User.Port = tempUser.Port;

                    if (User.UserID == FormAccess.selfInfo.UserID)
                    {
                        FormAccess.selfInfo.userName = User.userName;
                        FormAccess.selfInfo.ID = User.ID;
                        FormAccess.selfInfo.IP = User.IP;
                        FormAccess.selfInfo.Port = User.Port;
                    }
                    else////向刚上线的用户UDP打洞
                    {
                        FormAccess.udpPenToUser(false, User);//慢速算法实现向用户UDP打洞       
                    }

                }
             }
        }
        #endregion

        #region 获得服务器返回的部分用户信息
        /// <summary>
        /// 获得服务器返回的部分用户信息
        /// </summary>
        /// <param name="e"></param>
        private void onGetUserCollections(DataArrivalEventArgs e)
        {
            IMLibrary.UserCollections tempUsers;
            try
            {
                tempUsers =  IMLibrary.Serializers.ByteToObj(e.Data) as  UserCollections;//获得用户集合
            }
            catch { return; }// 非法数据则退出
             

            foreach (UserInfo tempUser in tempUsers)
            {
                exUser tUser = FormAccess.findUser(tempUser.UserID);

                if (tempUser.UserID == FormAccess.selfInfo.UserID)
                {
                    FormAccess.selfInfo.ID = tempUser.ID;//获得自己在服务器上的索引
                    FormAccess.selfInfo.IP = tempUser.IP;//获得自己的公网IP
                    FormAccess.selfInfo.Port = tempUser.Port;//获得自己的公网UDP端口
                }

⌨️ 快捷键说明

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