Пример #1
0
 static void mainServer_MessageReceived(object sender, MessageEventArgs e)
 {
     //Cambiar de color la consola dependiendo de la importancia del mensaje
     switch (e.M.Importance)
     {
         case Level.Critical:
             Console.ForegroundColor = ConsoleColor.Red;
             Console.WriteLine("Mensaje recibido: " + "Hora: " + e.DT.ToShortDateString() + " --> " + e.M.Content + " Criticidad: " + e.M.Importance.ToString());
             break;
         case Level.Debug:
             Console.ForegroundColor = ConsoleColor.Cyan;
             Console.WriteLine("Mensaje recibido: " + "Hora: " + e.DT.ToShortDateString() + " --> " + e.M.Content + " Criticidad: " + e.M.Importance.ToString());
             break;
         case Level.Error:
             Console.ForegroundColor = ConsoleColor.DarkRed;
             Console.WriteLine("Mensaje recibido: " + "Hora: " + e.DT.ToShortDateString() + " --> " + e.M.Content + " Criticidad: " + e.M.Importance.ToString());
             break;
         case Level.Low:
             Console.ForegroundColor = ConsoleColor.Gray;
             Console.WriteLine("Mensaje recibido: " + "Hora: " + e.DT.ToShortDateString() + " --> " + e.M.Content + " Criticidad: " + e.M.Importance.ToString());
             break;
         case Level.Warning:
             Console.ForegroundColor = ConsoleColor.Yellow;
             Console.WriteLine("Mensaje recibido: " + "Hora: " + e.DT.ToShortDateString() + " --> " + e.M.Content + " Criticidad: " + e.M.Importance.ToString());
             break;
         case Level.None:
         default:
             break;
     }
     Console.WriteLine("Mensaje recibido: " + "Hora: " + e.DT.ToShortDateString() + " --> " + e.M.Content + " Criticidad: " + e.M.Importance.ToString() );
 }
Пример #2
0
 protected virtual void OnMessageSent(MessageEventArgs e)
 {
     if (MessageSent != null)
         MessageSent(this, e);
 }
Пример #3
0
        // Receive all incoming packets.
        private void InteractWithClient(ref TcpClient commChannel, ref BinaryReader netDataReader, ref BinaryWriter netDataWriter)
        {
            try
            {
                while (commChannel.Client.Connected)  // While we are connected.
                {
                    ControlMessage ctrlMsg = (ControlMessage)Enum.Parse(typeof(ControlMessage), netDataReader.ReadByte().ToString());
                    /*La instrucción anterior parsea el contenido de un mensaje de control que el cliente envía
                     * previo a colocar cualquier mensaje en el medio de red.
                     * La interacción es básicamente siempre así:
                     *      1. El cliente envía un mensaje de control.
                     *      2. Si el mensaje de control es de tipo CM_Message, el cliente envía:
                     *          2.1 El tamaño del mensaje.
                     *          2.2 Los datos del mensaje serializados.
                     *      3. El servidor parsea el mensaje de control y el mensaje.
                     *      4. El servidor envía una confirmación al cliente indicando que se recibió el mensaje correctamente.
                     *      5. El servidor genera un evento que contiene el mensaje y que puede ser utilizado por la GUI para presentarlo al usuario.
                     */

                    switch (ctrlMsg)
                    {
                        case ControlMessage.CM_Message:
                            /*
                             * El cliente va a enviar un mensaje. Debemos deserializar el contenido para luego pasarlo a la GUI.
                             */
                            Message newMsg = new Message();
                            // Leemos el tamaño del mensaje
                            int sizeOfMsg = netDataReader.ReadInt32();
                            newMsg = (Message)ObjSerializer.ByteArrayToObject(netDataReader.ReadBytes(sizeOfMsg));
                            lock (db)
                            {
                                if (db.AddNewMessage(newMsg))
                                {
                                    netDataWriter.Write((Byte)ControlMessage.CM_OK);
                                    netDataWriter.Flush(); //Mensaje almacenado en la BD con éxito
                                    MessageEventArgs infoMsg = new MessageEventArgs(newMsg, DateTime.Now);
                                    OnMessageReceived(infoMsg); //Se dispara el evento y agregamos la información del mensaje recibido
                                    // Esto para que la GUI pueda tener acceso al mensaje.
                                }
                                else
                                {
                                    netDataWriter.Write((Byte)ControlMessage.CM_Error);
                                    netDataWriter.Flush(); //Problemas almacenando mensaje
                                }
                            }
                            break;
                        case ControlMessage.CM_GetMessages:
                            Level msgLevel = (Level)Enum.Parse(typeof(Level), netDataReader.ReadByte().ToString());
                            Dictionary<int, Message> msgType = db.GetAllMessagesByType(msgLevel);

                            if (msgType.ContainsKey(-1))
                            {
                                netDataWriter.Write((Byte)ControlMessage.CM_NoMessages);
                                netDataWriter.Flush(); //No hay mensajes
                                evtW.writeInfo("No hay mensajes en la BD");
                            }
                            else
                            {
                                if (msgType.Count > 0)
                                {
                                    netDataWriter.Write((Byte)ControlMessage.CM_OK);
                                    netDataWriter.Flush(); //Hay mensajes
                                    netDataWriter.Write(ObjSerializer.ObjectToByteArray(msgType).Length);
                                    netDataWriter.Write(ObjSerializer.ObjectToByteArray(msgType));
                                    netDataWriter.Flush();
                                    evtW.writeInfo("Hay mensajes en la BD y se enviaron al cliente");
                                }
                                else
                                {
                                    netDataWriter.Write((Byte)ControlMessage.CM_Error);
                                    netDataWriter.Flush(); //Mensaje de error al cliente
                                    evtW.writeError("Hay errores en la BD");
                                }
                            }
                            /*
                             * Si existiesen más interacciones entre el cliente y el servidor, se deberían agregar más
                             * cases a este switch según mensajes de control existan y que se envíen desde el cliente.
                             */
                            break;
                        default:
                            break;
                    }
                }
            }
            catch
            {
                netDataWriter.Write((Byte)ControlMessage.CM_Error);
                netDataWriter.Flush();
            }
        }
Пример #4
0
        /// <summary>
        /// Envía un mensaje al servidor para que se almacene en la BD
        /// </summary>
        /// <param name="clientMsg">Mensaje a enviar al servidor</param>
        public void SendMessage(Message clientMsg)
        {
            try
            {
                if (_isConnected)
                {
                    netDataWriter.Write((Byte)(ControlMessage.CM_Message));
                    netDataWriter.Write(ObjSerializer.ObjectToByteArray(clientMsg).Length);
                    netDataWriter.Write(ObjSerializer.ObjectToByteArray(clientMsg));
                    netDataWriter.Flush();

                    ControlMessage srvAns = (ControlMessage)Enum.Parse(typeof(ControlMessage), netDataReader.ReadByte().ToString());

                    if (srvAns == ControlMessage.CM_OK)
                    {
                        MessageEventArgs mEa = new MessageEventArgs(clientMsg, DateTime.Now);
                        OnMessageSent(mEa); //Lanzamos el evento de envío exitoso
                    }
                    if (srvAns == ControlMessage.CM_Error)
                    {
                        OnServerError(); //Lanzamos el evento de error en el servidor
                    }
                }
            }
            catch
            {
                Console.WriteLine("Error en envío de mensajes");
            }
        }
Пример #5
0
 protected virtual void OnMessageReceived(MessageEventArgs e)
 {
     if (MessageReceived != null)
         MessageReceived(this, e);
 }