예제 #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>
        /// Cria janela do chat e adiciona na lista
        /// </summary>
        /// <returns></returns>
        private FrmPrivado OpenChat()
        {
            FrmPrivado novochat = new FrmPrivado(Fechar);

            novochat.Resize    += novochat_Activated;
            novochat.Activated += novochat_Activated;
            lstAtivos.Add(novochat);
            novochat.WindowState = FormWindowState.Minimized;
            return(novochat);
        }
예제 #5
0
 /// <summary>
 /// Seta o foco da janela para o topo
 /// </summary>
 /// <param name="chat"></param>
 private void SetTop(FrmPrivado chat)
 {
     if (chat == null)
     {
         return;
     }
     chat.TopMost     = true;
     chat.TopMost     = false;
     chat.WindowState = FormWindowState.Normal;
     chat.Show();
 }
예제 #6
0
        private void SetaEvento(FrmPrivado chat, string evento)
        {
            Mensagem eve = new Mensagem();

            eve.ReceiverIP   = chat.DadosJanela.ReceiverIP;
            eve.SenderIP     = chat.DadosJanela.SenderIP;
            eve.ReceiverUSER = chat.DadosJanela.ReceiverUSER;
            eve.SenderUSER   = chat.DadosJanela.SenderUSER;
            eve.EVENTO       = evento;
            chat.Eventos(eve);
        }
예제 #7
0
        /// <summary>
        /// Verifica se o chat já foi criado e está na lista de ativos
        /// </summary>
        /// <param name="ReceiverIP"> Ip de origem</param>
        /// <returns></returns>
        private FrmPrivado IsOpenChat(string ReceiverIP)
        {
            foreach (FrmPrivado chat in lstAtivos) // testa se já existe chat aberto com o usuário remoto
            {
                FrmPrivado novochat = null;
                if (chat != null && chat.DadosJanela.ReceiverIP.Equals(ReceiverIP))
                {
                    return(chat);
                }
            }

            return(null);
        }
예제 #8
0
        /// <summary>
        /// Exibe mensagem recebida do cliente
        /// </summary>
        /// <param name="ReceiverIP">Ip do cliente</param>
        private FrmPrivado SetMessage(string ReceiverIP)
        {
            FrmPrivado novochat = null;

            novochat = IsOpenChat(ReceiverIP);
            //se chat não tiver aberto criar novo
            if (novochat == null)
            {
                novochat = OpenChat();
            }
            FrmPrivado focused = HasFocus(lstAtivos);

            if (novochat == focused)
            {
                return(novochat);
            }
            if (Config.Default.AbrirJanela)
            {
                //Se abrir verificar foco dos chats
                if (focused != null)
                {
                    focused.TopMost      = true;
                    novochat.WindowState = FormWindowState.Normal;
                    novochat.Show();
                    Thread.Sleep(450);
                    focused.TopMost = false;
                    Flash(false, novochat.Handle);
                }
                else
                {
                    SetTop(novochat);
                }
            }
            else
            {
                novochat.Show();
                Flash(false, novochat.Handle);
            }
            return(novochat);
        }
예제 #9
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");
                }
            }
        }
예제 #10
0
 /// <summary>
 /// Verifica se o Chat possui foco
 /// </summary>
 /// <param name="chat"></param>
 /// <returns></returns>
 private FrmPrivado HasFocus(FrmPrivado chat)
 {
     return((chat.Focused || chat.Controls.Cast <Control>().Any(x => x.Focused)) ? chat : null);
 }
예제 #11
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
        }