/// <summary> /// Trata da Mensagem recebida de um Utilizador (mensagem que o servidor recebe) /// <para>Guarda a Mensagem no ficheiro e envia para o destinatário caso este esteja online</para> /// </summary> /// <param name="mensagem">Mensagem a ser tratada</param> /// <param name="utilizador">Utilizador que a enviou</param> private void SendMessage(Mensagem mensagem, Utilizador utilizador) { // Filename: // - Aula: uc10 // - MP: id_id (idMenor_idMaior) // Lobby: idDestinatario = 0 string filename = null; Response resMsgToDestinatario = new Response(Response.Operation.SendMessage, utilizador, mensagem); if (mensagem.IdDestinatario.Contains("uc")) { // Nome do ficheiro = idDestinatario = "uc1" - ex.: "uc1.txt" onde 1 é o Id da Unidade Curricular filename += mensagem.IdDestinatario + ".txt"; int idUc = int.Parse(mensagem.IdDestinatario.Remove(0, 2)); // Todos os utilizadores na UC (do Curso) e online ClientesConectados.FindAll(cliente => cliente.User.IsOnline && cliente.User.Curso.UnidadesCurriculares.Find(unidadeCurricular => unidadeCurricular.Id == idUc) != null).ForEach(alunoEmAula => { if (alunoEmAula.User.Email == utilizador.Email) { return; } Helpers.SendSerializedMessage(alunoEmAula.TcpClient, resMsgToDestinatario); }); // Todos os utilizadores na UC (extra) e online ClientesConectados.FindAll(cliente => cliente.User.IsOnline && cliente.User.UnidadesCurriculares.Find(unidadeCurricular => unidadeCurricular.Id == idUc) != null).ForEach(alunoEmAula => { if (alunoEmAula.User.Email == utilizador.Email) { return; } Helpers.SendSerializedMessage(alunoEmAula.TcpClient, resMsgToDestinatario); }); Helpers.SaveMessageInFile(mensagem, filename); } else if (int.Parse(mensagem.IdDestinatario) == 0) { // Mensagem para o Lobby ClientesConectados.ForEach(cliente => { if (!cliente.User.IsOnline) { return; } // Não envia para ele próprio if (cliente.User.Email == utilizador.Email) { return; } Helpers.SendSerializedMessage(cliente.TcpClient, resMsgToDestinatario); }); // Não guarda em ficheiro } else { if (int.Parse(mensagem.IdDestinatario) > int.Parse(mensagem.IdRemetente)) { filename += int.Parse(mensagem.IdRemetente) + "_" + int.Parse(mensagem.IdDestinatario) + ".txt"; } else { filename += int.Parse(mensagem.IdDestinatario) + "_" + int.Parse(mensagem.IdRemetente) + ".txt"; } Cliente destinatario = ClientesConectados.Find(cliente => cliente.User.IsOnline && cliente.User.Id == int.Parse(mensagem.IdDestinatario)); Helpers.SendSerializedMessage(destinatario.TcpClient, resMsgToDestinatario); Helpers.SaveMessageInFile(mensagem, filename); } }