예제 #1
0
        //hàm chính trong tiểu trình nhận thông điệp
        public void bw_receive_DoWork(object sender, DoWorkEventArgs e)
        {
            DataTable dt_friend = null;

            while (socket.Connected)
            {
                try
                {
                    //lưu thong tin tài khoản đăng kí
                    string accountTemp;
                    string usernameTemp;
                    string passwordTemp;
                    string emailTemp;
                    //end
                    byte[] buffer = new byte[4];
                    byte[] data;//lưu byte của tin nhắn dạng chữ
                    byte[] dataPicture = new byte[10000];
                    int    lengh;
                    stream.Read(buffer, 0, 4);
                    CommandType_ cmt;
                    cmt = (CommandType_)BitConverter.ToInt32(buffer, 0);
                    //if client vừa kết nối muốn đăng nhập
                    if (cmt == CommandType_.Login)
                    {
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);

                        data = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        accountTemp = Encoding.ASCII.GetString(data);
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        passwordTemp = Encoding.ASCII.GetString(data);
                        //kiểm tra xem trong database có đúng tài khoản mật khẩu hay ko
                        DataTable dt = new DataTable();
                        dt = Khachhang_BUS.Dangnhap(accountTemp, passwordTemp);
                        if (dt.Rows.Count > 0)
                        {
                            //nếu đúng thì lấy username của tài khoản vừa đang nhâp
                            this.userName = dt.Rows[0][1].ToString();
                            //kiểm tra client này đã có kết nối chưa
                            if (IsOnline(this.userName) == null)
                            {
                                //đăng nhập thành công và gởi danh sách bạn
                                Command cmd = new Command(CommandType_.LoginSuccess, dt);
                                SendCommand(cmd);
                                checkDangNhapSuccess = true;

                                //nếu chưa kết nối5
                                Online(this.userName);
                                ////lưu client vào List  client
                                Form1.listClient.Add(this);
                            }
                            else
                            {
                                //tài khoản này đã được đăng nhập bởi người khác
                                Command cmd = new Command(CommandType_.NameExists);
                                this.SendCommand(cmd);
                            }
                        }
                        else
                        {
                            //đăng nhập thất bại.tài khoản hoặc mật khẩu không đúng
                            Command cmd = new Command(CommandType_.Failure);
                            this.SendCommand(cmd);
                        }
                    }
                    //đăng kí 1 tài khoản mới
                    if (cmt == CommandType_.Register)
                    {
                        //đọc username
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        usernameTemp = Encoding.ASCII.GetString(data);
                        //đọc account
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        accountTemp = Encoding.ASCII.GetString(data);
                        //đọc password
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        passwordTemp = Encoding.ASCII.GetString(data);
                        //đọc email
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        emailTemp = Encoding.ASCII.GetString(data);
                        //kiểm tra tên người dùng và tài khoản có tồn tại chưa
                        DataTable da = new DataTable();
                        da = Khachhang_BUS.Kiemtra_Dangki(accountTemp, usernameTemp);
                        if (da.Rows.Count > 0)
                        {
                            Command cmd = new Command(CommandType_.RegisterFailure);
                            this.SendCommand(cmd);
                        }
                        else
                        {
                            Image          _imageTemp   = (Image)Properties.Resources.ResourceManager.GetObject("_default");
                            MemoryStream   ms           = new MemoryStream();
                            ImageConverter imageConvert = new ImageConverter();
                            data = new byte[10000];
                            data = (byte[])imageConvert.ConvertTo(_imageTemp, typeof(byte[]));
                            //data = ms.ToArray();
                            KhachHang_DTO kh_dto = new KhachHang_DTO(accountTemp, passwordTemp, usernameTemp, data, emailTemp);
                            Khachhang_BUS.Add_kh(kh_dto);

                            Command cmd = new Command(CommandType_.RegisterSuccess);
                            this.SendCommand(cmd);
                            _form1.AddShowClient(usernameTemp);
                        }
                    }
                    if (cmt == CommandType_.LoadMessage)
                    {
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        usernameTemp = Encoding.ASCII.GetString(data);

                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        int count = BitConverter.ToInt32(buffer, 0);

                        DataTable dt  = Khachhang_BUS.Load_message(count, this.userName, usernameTemp);
                        Command   cmd = new Command(CommandType_.LoadMessage, dt);
                        this.SendCommand(cmd);
                    }
                    //nếu thông điệp nhận được là 1 tin nhắn trao đổi với server
                    if (cmt == CommandType_.Message)
                    {
                        //đọc nội dung tin nhắn
                        string cmdMetaData = "";
                        buffer = new byte[4];
                        if (stream.Read(buffer, 0, 4) == 0)
                        {
                            // nó read = 0 co' nghia~ la`ben kia da ngat ket noi
                            int a = 5;
                            //cái này là server
                            //ko thấy lỗi đâu
                            //bên client đọc
                        }

                        int    lenght     = BitConverter.ToInt32(buffer, 0);
                        byte[] metaBuffer = new byte[lenght];
                        stream.Read(metaBuffer, 0, lenght);
                        cmdMetaData = Encoding.ASCII.GetString(metaBuffer);
                        //đọc font
                        stream.Read(buffer, 0, 4);
                        lenght     = BitConverter.ToInt32(buffer, 0);
                        metaBuffer = new byte[lenght];
                        stream.Read(metaBuffer, 0, lenght);
                        //convert byte sang font
                        MemoryStream    s    = new MemoryStream(metaBuffer);
                        BinaryFormatter bf   = new BinaryFormatter();
                        Font            temp = new Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular);
                        temp = (Font)bf.Deserialize(s);
                        //gọi form chat thông qua delegate
                        _form1.Invoke(new Action(delegate()
                        {
                            // nếu chưa tồn tại hoặc đã BỊ tắt thÌ khởi tạo lại
                            if (chat == null || chat.IsDisposed)
                            {
                                chat = new Chat(this);
                                chat.Show();
                            }
                        }));
                        //gởi yin nhắn đã nhận được cho form chat vừa khởi tạo để hiển thị lên form
                        chat.Receive(cmdMetaData, temp);
                    }
                    //tin nhắn trao đổi giữa những người trong danh sách bạn
                    if (cmt == CommandType_.MessageFriend)
                    {
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        usernameTemp = Encoding.ASCII.GetString(data);

                        //đọc nội dung tin nhắn
                        string cmdMetaData = "";
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        int    lenght     = BitConverter.ToInt32(buffer, 0);
                        byte[] metaBuffer = new byte[lenght];
                        stream.Read(metaBuffer, 0, lenght);
                        byte[] _content = metaBuffer;
                        cmdMetaData = Encoding.ASCII.GetString(metaBuffer);
                        //đọc font
                        stream.Read(buffer, 0, 4);
                        lenght     = BitConverter.ToInt32(buffer, 0);
                        metaBuffer = new byte[lenght];
                        stream.Read(metaBuffer, 0, lenght);
                        byte[] _font = metaBuffer;
                        //convert byte sang font
                        string _time = DateTime.Now.ToString();
                        Khachhang_BUS.Save_message(this.userName, usernameTemp, _content, metaBuffer, _time);

                        MemoryStream    s    = new MemoryStream(metaBuffer);
                        BinaryFormatter bf   = new BinaryFormatter();
                        Font            temp = new Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular);
                        temp = (Font)bf.Deserialize(s);
                        Command       cmd = new Command(CommandType_.MessageFriend, this.userName, cmdMetaData, temp);
                        ClientManager clm = null;
                        for (int i = 0; i < Form1.listClient.Count; i++)
                        {
                            if (Form1.listClient[i].userName == usernameTemp)
                            {
                                clm = Form1.listClient[i];
                                break;
                            }
                        }
                        if (clm != null)
                        {
                            clm.SendCommand(cmd);
                        }
                    }

                    if (cmt == CommandType_.ListFriend)
                    {
                        dt_friend = Khachhang_BUS.Loadds_FRIEND(this.userName);
                        Command cmd = new Command(CommandType_.ListFriend, dt_friend);
                        this.SendCommand(cmd);
                    }
                    if (cmt == CommandType_.FindFriend)
                    {
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        usernameTemp = Encoding.ASCII.GetString(data);
                        DataTable dt = Khachhang_BUS.FindFriend(usernameTemp);
                        //có tồn tại username này trong danh sách --trả thông tin của username này về cho client
                        if (dt.Rows.Count > 0)
                        {
                            Command cmd = new Command(CommandType_.Found, dt.Rows[0][1].ToString(), dt.Rows[0][4].ToString(), (byte[])dt.Rows[0][5]);
                            this.SendCommand(cmd);
                        }
                        else
                        {
                            Command cmd = new Command(CommandType_.NotFound);
                            this.SendCommand(cmd);
                        }
                    }
                    if (cmt == CommandType_.LoadNotice)
                    {
                        DataTable dt = Khachhang_BUS.LoadNotice(this.userName);

                        Command cmd = new Command(CommandType_.LoadNotice, dt);
                        this.SendCommand(cmd);
                    }
                    if (cmt == CommandType_.AddNotice)
                    {
                        stream.Read(buffer, 0, 4);
                        int lenght = BitConverter.ToInt32(buffer, 0);
                        data = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        string _userPrimary = Encoding.ASCII.GetString(data);

                        stream.Read(buffer, 0, 4);
                        lenght = BitConverter.ToInt32(buffer, 0);
                        data   = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        string _userReference = Encoding.ASCII.GetString(data);

                        stream.Read(buffer, 0, 4);
                        lenght = BitConverter.ToInt32(buffer, 0);
                        data   = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        string     _type  = Encoding.ASCII.GetString(data);
                        string     _time  = DateTime.Now.ToString();
                        NOTICE_DTO notice = new NOTICE_DTO(_userPrimary, _userReference, _type, "", _time);
                        DataTable  dt     = Khachhang_BUS.AddNotice(notice);
                        if (int.Parse(dt.Rows[0][0].ToString()) == 0)
                        {
                            Command cmd = new Command(CommandType_.AddFriendFailure);
                            this.SendCommand(cmd);
                        }
                        if (int.Parse(dt.Rows[0][0].ToString()) == 1)
                        {
                            Command cmd = new Command(CommandType_.AddNoticeFailure);
                            this.SendCommand(cmd);
                        }
                        if (int.Parse(dt.Rows[0][0].ToString()) == 2)
                        {
                            Command cmd = new Command(CommandType_.AddNoticeSuccess);
                            this.SendCommand(cmd);
                        }
                    }
                    if (cmt == CommandType_.ChangeInformation)
                    {
                        stream.Read(buffer, 0, 4);
                        int lenght = BitConverter.ToInt32(buffer, 0);
                        data = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        string _email = Encoding.ASCII.GetString(data);


                        //đọc avatar
                        Image image;
                        stream.Read(buffer, 0, 4);
                        lenght      = BitConverter.ToInt32(buffer, 0);
                        dataPicture = new byte[lenght];
                        ReadBigData(stream, lenght, ref dataPicture);

                        //status
                        stream.Read(buffer, 0, 4);
                        lenght = BitConverter.ToInt32(buffer, 0);
                        data   = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        //string _status = Encoding.ASCII.GetString(data);
                        Khachhang_BUS.Change_information(this.userName, _email, dataPicture, data);
                    }
                    if (cmt == CommandType_.AddFriend)
                    {
                        stream.Read(buffer, 0, 4);
                        int lenght = BitConverter.ToInt32(buffer, 0);
                        data = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        string _userPrimary = Encoding.ASCII.GetString(data);

                        stream.Read(buffer, 0, 4);
                        lenght = BitConverter.ToInt32(buffer, 0);
                        data   = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        string     _userReference = Encoding.ASCII.GetString(data);
                        string     _time          = DateTime.Now.ToString();
                        NOTICE_DTO notice         = new NOTICE_DTO(_userReference, _userPrimary, "2", "", _time);
                        Khachhang_BUS.AddNotice(notice);
                        Khachhang_BUS.Add_Friend(_userPrimary, _userReference);
                        Khachhang_BUS.DeleteNotice(_userPrimary, _userReference);
                        Command cmd = new Command(CommandType_.DeleteNoticeSuccess);
                        this.SendCommand(cmd);
                        ClientManager cmTemp;
                        //gởi trạng thái của friend
                        if ((cmTemp = IsOnline(_userReference)) != null)
                        {
                            Command _cmd = new Command(CommandType_.ListFriend, Khachhang_BUS.Loadds_FRIEND(_userReference));
                            cmTemp.SendCommand(_cmd);
                        }
                    }
                    if (cmt == CommandType_.DeleteNotice)
                    {
                        stream.Read(buffer, 0, 4);
                        int lenght = BitConverter.ToInt32(buffer, 0);
                        data = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        string _userPrimary = Encoding.ASCII.GetString(data);

                        stream.Read(buffer, 0, 4);
                        lenght = BitConverter.ToInt32(buffer, 0);
                        data   = new byte[lenght];
                        stream.Read(data, 0, lenght);
                        string _userReference = Encoding.ASCII.GetString(data);
                        Khachhang_BUS.DeleteNotice(_userPrimary, _userReference);
                        Command cmd = new Command(CommandType_.DeleteNoticeSuccess);
                        this.SendCommand(cmd);
                    }
                }
                catch
                {
                    //kết nối bên client bị đóng
                    if (checkDangNhapSuccess)
                    {
                        Offline(this);
                        if ((dt_friend = Khachhang_BUS.Loadds_FRIEND(this.userName)) != null)
                        {
                            int _CountTemp;//lưu số lượng friend của user
                            _CountTemp = dt_friend.Rows.Count;
                            for (int i = 0; i < _CountTemp; i++)
                            {
                                ClientManager cmTemp;
                                //gởi trạng thái của friend
                                if ((cmTemp = IsOnline(dt_friend.Rows[i][0].ToString())) != null)
                                {
                                    Command _cmd = new Command(CommandType_.Offline, this.userName);
                                    cmTemp.SendCommand(_cmd);
                                }
                            }
                        }
                    }
                    socket.Close();
                }
            }
            //đóng kết nồi
            //Form1.listClient[1]._userName = "******";
        }
예제 #2
0
        //hàm chính trong tiểu trình nhận thông điệp
        public void bw_receive_DoWork(object sender, DoWorkEventArgs e)
        {
            while (socket.Connected)
            {
                try
                {
                    string user;//lưu tên người dùng vừa đăng nhập
                    //lưu thong tin tài khoản đăng kí
                    string account;
                    string username;
                    string password;
                    string email;
                    //end
                    byte[]        buffer = new byte[4];
                    byte[]        data;//lưu byte của tin nhắn dạng chữ
                    byte[]        dataPicture = new byte[10000];
                    NetworkStream stream;
                    stream = new NetworkStream(socket);
                    stream.Read(buffer, 0, 4);
                    CommandType_ cmt;
                    cmt = (CommandType_)BitConverter.ToInt32(buffer, 0);
                    //if client vừa kết nối muốn đăng nhập
                    if (cmt == CommandType_.Login)
                    {
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        int lengh = BitConverter.ToInt32(buffer, 0);
                        data = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        account = Encoding.ASCII.GetString(data);
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        password = Encoding.ASCII.GetString(data);
                        //kiểm tra xem trong database có đúng tài khoản mật khẩu hay ko
                        DataTable dt = new DataTable();
                        dt = Khachhang_BUS.Dangnhap(account, password);
                        if (dt.Rows.Count > 0)
                        {
                            //nếu đúng thì lấy username của tài khoản vừa đang nhâp
                            user = dt.Rows[0][1].ToString();
                            //kiểm tra client này đã có kết nối trước chưa
                            if (!IsOnline(user))
                            {
                                //nếu chưa từng kết nối
                                this.userName = user;
                                buffer        = BitConverter.GetBytes((int)CommandType_.LoginSuccess);//gởi tin nhắn là đã chấp nhận kết nối
                                stream.Write(buffer, 0, 4);
                                stream.Flush();
                                //gởi tên user qua cho client
                                data   = new byte[user.Length];
                                buffer = BitConverter.GetBytes(user.Length);
                                stream.Write(buffer, 0, 4);
                                stream.Flush();
                                data = Encoding.ASCII.GetBytes(user);
                                stream.Write(data, 0, user.Length);
                                stream.Flush();


                                //gởi avatar cho user

                                dataPicture = (byte[])dt.Rows[0][5];
                                lengh       = dataPicture.Length;
                                buffer      = BitConverter.GetBytes(lengh);
                                stream.Write(buffer, 0, 4);
                                stream.Flush();
                                stream.Write(dataPicture, 0, lengh);
                                stream.Flush();
                                Online(user);

                                //gởi list danh sách bạn
                                dt = Khachhang_BUS.Loadds_FRIEND(user);
                                int _CountTemp;//lưu số lượng friend của user
                                _CountTemp = dt.Rows.Count;
                                buffer     = BitConverter.GetBytes(_CountTemp);
                                stream.Write(buffer, 0, 4);
                                stream.Flush();
                                for (int i = 0; i < _CountTemp; i++)
                                {
                                    //gởi tên userFriend
                                    buffer = BitConverter.GetBytes(dt.Rows[i][0].ToString().Length);
                                    stream.Write(buffer, 0, 4);
                                    stream.Flush();
                                    data = new byte[dt.Rows[i][0].ToString().Length];
                                    data = Encoding.ASCII.GetBytes(dt.Rows[i][0].ToString());
                                    stream.Write(data, 0, dt.Rows[i][0].ToString().Length);
                                    stream.Flush();


                                    //gởi avatar cho user

                                    dataPicture = (byte[])dt.Rows[i][1];
                                    lengh       = dataPicture.Length;
                                    buffer      = BitConverter.GetBytes(lengh);
                                    stream.Write(buffer, 0, 4);
                                    stream.Flush();
                                    stream.Write(dataPicture, 0, lengh);
                                    stream.Flush();
                                }
                                ////lưu client vào List  client
                                Form1.listClient.Add(this);
                            }
                            else
                            {
                                //client này đã kết nối ,gởi tin nhắn đăng nhập đã tồn tại
                                buffer = BitConverter.GetBytes((int)CommandType_.NameExists);
                                stream.Write(buffer, 0, 4);
                                stream.Flush();
                            }
                        }
                        else
                        {
                            //nếu tài khoản hoặc mật khẩu không đúng
                            buffer = BitConverter.GetBytes((int)CommandType_.Failure);//gởi tin nhắn là kết nối ko thành công
                            stream.Write(buffer, 0, 4);
                            stream.Flush();
                        }
                    }
                    if (cmt == CommandType_.Register)
                    {
                        //đọc username
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        int lengh = BitConverter.ToInt32(buffer, 0);
                        data = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        username = Encoding.ASCII.GetString(data);
                        //đọc account
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        account = Encoding.ASCII.GetString(data);
                        //đọc password
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        password = Encoding.ASCII.GetString(data);
                        //đọc email
                        stream.Read(buffer, 0, 4);
                        lengh = BitConverter.ToInt32(buffer, 0);
                        data  = new byte[lengh];
                        stream.Read(data, 0, lengh);
                        email = Encoding.ASCII.GetString(data);
                        //kiểm tra tên người dùng và tài khoản có tồn tại chưa
                        DataTable da = new DataTable();
                        da = Khachhang_BUS.Kiemtra_Dangki(account, username);
                        if (da.Rows.Count > 0)
                        {
                            buffer = BitConverter.GetBytes((int)CommandType_.RegisterFailure);//gởi tin nhắn là đăng kí thất bại
                            stream.Write(buffer, 0, 4);
                            stream.Flush();
                        }
                        else
                        {
                            Image          _imageTemp   = (Image)Properties.Resources.ResourceManager.GetObject("_default");
                            MemoryStream   ms           = new MemoryStream();
                            ImageConverter imageConvert = new ImageConverter();
                            data = new byte[10000];
                            data = (byte[])imageConvert.ConvertTo(_imageTemp, typeof(byte[]));
                            //data = ms.ToArray();
                            KhachHang_DTO kh_dto = new KhachHang_DTO(account, password, username, data, email);
                            Khachhang_BUS.Add_kh(kh_dto);
                            buffer = BitConverter.GetBytes((int)CommandType_.RegisterSuccess);//gởi tin nhắn là đăng kí thành công
                            stream.Write(buffer, 0, 4);
                            stream.Flush();
                            _form1.AddShowClient(username);
                        }
                    }
                    //nếu thông điệp nhận được là 1 tin nhắn
                    if (cmt == CommandType_.Message)
                    {
                        //đọc nội dung tin nhắn
                        string cmdMetaData = "";
                        buffer = new byte[4];
                        stream.Read(buffer, 0, 4);
                        int    lenght     = BitConverter.ToInt32(buffer, 0);
                        byte[] metaBuffer = new byte[lenght];
                        stream.Read(metaBuffer, 0, lenght);
                        cmdMetaData = Encoding.ASCII.GetString(metaBuffer);
                        //đọc font
                        stream.Read(buffer, 0, 4);
                        lenght     = BitConverter.ToInt32(buffer, 0);
                        metaBuffer = new byte[lenght];
                        stream.Read(metaBuffer, 0, lenght);
                        //convert byte sang font
                        MemoryStream    s    = new MemoryStream(metaBuffer);
                        BinaryFormatter bf   = new BinaryFormatter();
                        Font            temp = new Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular);
                        temp = (Font)bf.Deserialize(s);
                        //gọi form chat thông qua delegate
                        _form1.Invoke(new Action(delegate()
                        {
                            // nếu chưa tồn tại hoặc đã BỊ tắt thÌ khởi tạo lại
                            if (chat == null || chat.IsDisposed)
                            {
                                chat = new Chat(this);
                                chat.Show();
                            }
                        }));
                        //gởi yin nhắn đã nhận được cho form chat vừa khởi tạo để hiển thị lên form
                        chat.Receive(cmdMetaData, temp);
                    }
                }
                catch
                {
                    //kết nối bên client bị đóng
                    Offline(this._userName);
                }
            }
            //đóng kết nồi
            socket.Close();
            //Form1.listClient[1]._userName = "******";
        }