コード例 #1
0
        /// <summary>
        /// abrir chat novo pela listview
        /// </summary>
        private void AbrirJanela()
        {
            bool          debug = false; // "true" permite abrir janela do proprio usuario para testes.
            DadosConversa user  = lstUsuarios.SelectedItems[0].Tag as DadosConversa;

            if (user.ReceiverIP.Equals(Config.Default.UserIP) && !debug)
            {
                MessageBox.Show("Não fale sozinho.");
            }
            else
            {
                FrmPrivado chat = IsOpenChat(user.ReceiverIP);
                chat = chat == null?OpenChat() : chat;

                if (chat.DadosJanela == null)
                {
                    DadosConversa dados = new DadosConversa();
                    dados.ReceiverIP   = user.ReceiverIP;
                    dados.ReceiverUSER = user.ReceiverUSER;
                    dados.SenderIP     = Config.Default.UserIP;
                    dados.SenderUSER   = Config.Default.Username;
                    chat.DadosJanela   = dados;
                }
                SetTop(chat);
            }
        }
コード例 #2
0
        public void GravaDadosUser(string Novonome, string userIP, string userTCP, string Novostatus)
        {
            string ReceiverIP = string.Empty;

            foreach (ListViewItem listitem in lstUsuarios.Items)
            {
                DadosConversa dadosatuais = listitem.Tag as DadosConversa;
                if (dadosatuais != null && userIP.Equals(dadosatuais.ReceiverIP))
                {
                    if (!Novonome.Equals(dadosatuais.ReceiverUSER) || !Novostatus.Equals(dadosatuais.ReceiverStatus))
                    {
                        listitem.Text = Novonome;
                        listitem.Tag  = new DadosConversa()
                        {
                            ReceiverIP     = userIP,
                            ReceiverTCP    = userTCP,
                            ReceiverUSER   = Novonome,
                            ReceiverStatus = Novostatus
                        };

                        SetaStatus(listitem, Novostatus);
                    }
                }
            }
            FrmPrivado chat = lstAtivos.FirstOrDefault(jujuba => jujuba.DadosJanela.ReceiverIP.Equals(userIP));

            if (chat != null)
            {
                chat.DadosJanela.ReceiverUSER   = Novonome;
                chat.DadosJanela.ReceiverStatus = Novostatus;
                chat.Text = Novonome;
                SetaEvento(chat, "UserChanged");
            }
        }
コード例 #3
0
        /// <summary>
        /// Remove usuários desconectados da Listview e dispara o evento user offline.
        /// </summary>
        /// <param name="userIP">IP do usuário remoto</param>
        public void RemoveUser(string userIP)
        {
            ListViewItem lstitem    = null;
            string       ReceiverIP = string.Empty;

            foreach (ListViewItem listboxitem in lstUsuarios.Items)
            {
                DadosConversa user = listboxitem.Tag as DadosConversa;
                if (user != null && userIP.Equals(user.ReceiverIP))
                {
                    lstitem    = listboxitem;
                    ReceiverIP = user.ReceiverIP;
                    break;
                }
            }
            if (lstitem != null)
            {
                lstUsuarios.Items.Remove(lstitem);
                Mensagem   eve  = new Mensagem();
                FrmPrivado chat = IsOpenChat(ReceiverIP);
                if (chat != null)
                {
                    SetaEvento(chat, "user_offline");
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Recebe mensagem que o usuário fechou a janela de chat e o remove da lista de chats ativos.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Fechar(object sender, EventArgs e)
        {
            DadosConversa user = sender as DadosConversa;

            foreach (FrmPrivado chat in lstAtivos)
            {
                if (user.ReceiverIP.Equals(chat.DadosJanela.ReceiverIP))
                {
                    lstAtivos.Remove(chat);
                    break;
                }
            }
        }
コード例 #5
0
        void usuárioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DadosConversa MyUser = null;

            foreach (ListViewItem listitem in lstUsuarios.Items)
            {
                MyUser = listitem.Tag as DadosConversa;
                if (listitem != null && MyUser.ReceiverIP == Config.Default.UserIP)
                {
                    break;
                }
            }
            FrmUsuario user = new FrmUsuario(MyUser, UpdateUser);

            user.ShowDialog();
        }
コード例 #6
0
        public FrmUsuario(DadosConversa MyUser, EventHandler upd)
        {
            InitializeComponent();
            _upd = upd;

            this.FormClosing   += FrmUsuario_FormClosing;
            this.Activated     += FrmUsuario_Activated;
            pictboxUser.Click  += pictboxUser_Click;
            openFileImg.FileOk += openFileImg_FileOk;
            btnOK.Click        += btnOK_Click;
            //Setar estado inicial dos controles
            txtUsername.Text          = MyUser.ReceiverUSER;
            rdbOnline.Checked         = MyUser.ReceiverStatus.Contains("online");
            rdbAusente.Checked        = MyUser.ReceiverStatus.Contains("ausente");
            rdbOcupado.Checked        = MyUser.ReceiverStatus.Contains("ocupado");
            pictboxUser.ImageLocation = Config.Default.UserImg;
        }
コード例 #7
0
        /// <summary>
        /// Adiciona dados dos usuários recebidos por broadcast na Listview principal.
        /// </summary>
        /// <param name="username">Nome do usuário remoto</param>
        /// <param name="userIP">IP do usuário remoto</param>
        /// <param name="portaTCP">Porta TCP usada pelo usuário</param>
        /// <param name="status">status do usuário</param>
        public void AddUser(string username, string userIP, string portaTCP, string status)
        {
            bool   verifica   = false;
            string ReceiverIP = string.Empty;

            foreach (ListViewItem listboxitem in lstUsuarios.Items)
            {
                DadosConversa user = listboxitem.Tag as DadosConversa;
                if (user != null && userIP.Equals(user.ReceiverIP))
                {
                    verifica   = true;
                    ReceiverIP = user.ReceiverIP;
                    break;
                }
            }
            if (!verifica)
            {
                ListViewItem lstitem = new ListViewItem();
                lstitem.Text = username;
                lstitem.Tag  = new DadosConversa()
                {
                    ReceiverIP = userIP, ReceiverTCP = portaTCP, ReceiverUSER = username, ReceiverStatus = status
                };
                lstUsuarios.Items.Add(lstitem);
                SetaStatus(lstitem, status);

                if (userIP != Config.Default.UserIP)
                {
                    Online();
                }
            }
            else
            {
                FrmPrivado chat = lstAtivos.FirstOrDefault(jujuba => jujuba.DadosJanela.ReceiverIP.Equals(userIP));
                if (chat != null)
                {
                    SetaEvento(chat, "user_online");
                }
            }
        }
コード例 #8
0
        public FrmChat(string args)
        {
            InitializeComponent();
            lstUsuarios.MultiSelect    = false;
            lstUsuarios.FullRowSelect  = true;
            lstUsuarios.SmallImageList = statusIcons;
            bandeja.Visible            = true;
            Version version = Assembly.GetExecutingAssembly().GetName().Version;

            lblStatus.Text = "v. " + version.Major + "." + version.Minor;
            StartParams(args);

            Closing                += FrmChat_Closing;
            this.FormClosing       += FrmChat_FormClosing;
            HandleCreated          += FrmChat_HandleCreated;
            lstUsuarios.MouseClick += lstUsuarios_MouseClick;
            lstUsuarios.KeyDown    += lstUsuarios_KeyDown;
            bandeja.DoubleClick    += bandeja_DoubleClick;
            btnMenu.Click          += btnMenu_Click;
            Resize += FrmChat_Resize;
            usuárioToolStripMenuItem.Click   += usuárioToolStripMenuItem_Click;
            opçõesToolStripMenuItem.Click    += opçõesToolStripMenuItem_Click;
            históricoToolStripMenuItem.Click += históricoToolStripMenuItem_Click;
            sairToolStripMenuItem1.Click     += sairToolStripMenuItem_Click;

            if (!Config.Default.ParamSetados)
            {
                Config cfg = new Config();
                cfg.DefineParam();
            }

            SetHeight(lstUsuarios, 25); // método para definir espaçamento da listview
            //RecebeMensagem();
            StartListening();

            #region Delegate Lista de Usuários

            lstDelegate = delegate(object item)
            {
                string[] split    = item.ToString().Split('|');
                string   username = split[0];
                string   userIP   = split[1];
                string   userTCP  = split[2];
                string   evento   = split[3];
                string   status   = split[4];

                if (evento.Contains("add"))
                {
                    AddUser(username, userIP, userTCP, "online");
                }
                else if (evento.Contains("remove"))
                {
                    RemoveUser(userIP);
                    return(null);
                }
                GravaDadosUser(username, userIP, userTCP, status);
                return(null);
            };

            #endregion

            #region Delegate Recebimento de Mensagem

            msgDelegate = delegate(object msg)
            {
                Mensagem   dados = msg as Mensagem;
                FrmPrivado chat  = null;
                if (string.IsNullOrEmpty(dados.EVENTO))
                {
                    chat = SetMessage(dados.SenderIP);
                    if (chat.DadosJanela == null)
                    {
                        DadosConversa conversa = new DadosConversa();
                        conversa.ReceiverIP   = dados.SenderIP;
                        conversa.ReceiverUSER = dados.SenderUSER;
                        conversa.SenderIP     = Config.Default.UserIP;
                        conversa.SenderUSER   = Config.Default.Username;
                        chat.DadosJanela      = conversa;
                    }
                    chat.RecebeMsg(dados);
                    return(null);
                }
                else if ((chat = IsOpenChat(dados.SenderIP)) != null)
                {
                    chat.Eventos(dados);
                }
                else if (dados.EVENTO == "img_request")
                {
                    SendUserPicture(dados);
                }
                return(null);
            };

            #endregion
        }