/// <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); } }
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"); } }
/// <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"); } } }
/// <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; } } }
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(); }
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; }
/// <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"); } } }
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 }