Esempio n. 1
0
        /// <summary>
        /// Read the message header structure and cache the meta data for finding the key fields for decoding messages.
        /// </summary>
        /// <param name="headerStructure"> for the meta data describing the message header. </param>
        public OtfHeaderDecoder(HeaderStructure headerStructure)
        {
            _size = headerStructure.Tokens[0].Size;

            foreach (Token token in headerStructure.Tokens)
            {
                switch (token.Name)
                {
                case HeaderStructure.BlockLength:
                    _blockLengthOffset    = token.Offset;
                    _blockLengthType      = token.Encoding.PrimitiveType;
                    _blockLengthByteOrder = token.Encoding.ByteOrder;
                    break;

                case HeaderStructure.TemplateId:
                    _templateIdOffset    = token.Offset;
                    _templateIdType      = token.Encoding.PrimitiveType;
                    _templateIdByteOrder = token.Encoding.ByteOrder;
                    break;

                case HeaderStructure.SchemaId:
                    _schemaIdOffset    = token.Offset;
                    _schemaIdType      = token.Encoding.PrimitiveType;
                    _schemaIdByteOrder = token.Encoding.ByteOrder;
                    break;

                case HeaderStructure.SchemaVersion:
                    _schemaVersionOffset    = token.Offset;
                    _schemaVersionType      = token.Encoding.PrimitiveType;
                    _schemaVersionByteOrder = token.Encoding.ByteOrder;
                    break;
                }
            }
        }
        /// <summary>
        /// Read the message header structure and cache the meta data for finding the key fields for decoding messages.
        /// </summary>
        /// <param name="headerStructure"> for the meta data describing the message header. </param>
        public OtfHeaderDecoder(HeaderStructure headerStructure)
        {
            _size = headerStructure.Tokens[0].Size;

            foreach (Token token in headerStructure.Tokens)
            {
                switch (token.Name)
                {
                    case HeaderStructure.BlockLength:
                        _blockLengthOffset = token.Offset;
                        _blockLengthType = token.Encoding.PrimitiveType;
                        _blockLengthByteOrder = token.Encoding.ByteOrder;
                        break;

                    case HeaderStructure.TemplateId:
                        _templateIdOffset = token.Offset;
                        _templateIdType = token.Encoding.PrimitiveType;
                        _templateIdByteOrder = token.Encoding.ByteOrder;
                        break;

                    case HeaderStructure.SchemaId:
                        _schemaIdOffset = token.Offset;
                        _schemaIdType = token.Encoding.PrimitiveType;
                        _schemaIdByteOrder = token.Encoding.ByteOrder;
                        break;

                    case HeaderStructure.SchemaVersion:
                        _schemaVersionOffset = token.Offset;
                        _schemaVersionType = token.Encoding.PrimitiveType;
                        _schemaVersionByteOrder = token.Encoding.ByteOrder;
                        break;
                }
            }
        }
Esempio n. 3
0
 private static bool IsHeaderStructureOk(HeaderStructure headerStructure, byte[] frame)
 {
     return(headerStructure.CommandType.GetType().IsEnum&& headerStructure.FlagType.GetType().IsEnum);
 }
Esempio n. 4
0
        private static bool HandleRequest(byte[] frame, NetworkStream networkStream)
        {
            try
            {
                IFrameHandler frameHandler = new FrameHandler(networkStream);

                ICodification <HeaderStructure> header = new Header();

                var logManager = new SenderService();
                int logSize    = 0;

                HeaderStructure headerStructure = header.Decode(frame);

                if (!IsHeaderStructureOk(headerStructure, frame))
                {
                    return(true);
                }

                var command = headerStructure.CommandType;

                switch (command)
                {
                case CommandType.AG:
                    ServerGenreManager.UploadGenre(frame);
                    ServerResponse(frameHandler, "Genre Uploaded");
                    logSize = 2;
                    break;

                case CommandType.BG:
                    ServerGenreManager.DeleteGenre(frame);
                    ServerResponse(frameHandler, "Genre Deleted");
                    logSize = 1;
                    break;

                case CommandType.MG:
                    ServerGenreManager.ModifyGenre(frame);
                    ServerResponse(frameHandler, "Genre modified");
                    logSize = 3;
                    break;

                case CommandType.AP:
                    ServerMovieManager.Upload(frame);
                    ServerResponse(frameHandler, "Movie uploaded");
                    logSize = 3;
                    break;

                case CommandType.BP:
                    ServerMovieManager.Delete(frame);
                    ServerResponse(frameHandler, "Movie deleted");
                    logSize = 1;
                    break;

                case CommandType.MP:
                    ServerMovieManager.Modify(frame);
                    ServerResponse(frameHandler, "Movie updated");
                    logSize = 4;
                    break;

                case CommandType.AS:
                    ServerAsociationManager.AsociateGenreToMovie(frame);
                    ServerResponse(frameHandler, "Movie and genre associated");
                    logSize = 2;
                    break;

                case CommandType.DS:
                    ServerAsociationManager.DeAsociateGenreToMovie(frame);
                    ServerResponse(frameHandler, "Movie and genre deassociated");
                    logSize = 2;
                    break;

                case CommandType.AD:
                    ServerDirectorManager.UploadDirector(frame);
                    ServerResponse(frameHandler, "Director uploaded");
                    logSize = 4;
                    break;

                case CommandType.BD:
                    ServerDirectorManager.DeleteDirector(frame);
                    ServerResponse(frameHandler, "Director deleted");
                    logSize = 1;
                    break;

                case CommandType.MD:
                    ServerDirectorManager.ModifyDirector(frame);
                    ServerResponse(frameHandler, "Director updated");
                    logSize = 5;
                    break;

                case CommandType.SA:
                    string fileName = ServerMovieManager.SaveFile(frame, networkStream);
                    ServerResponse(frameHandler, "Sending file...@" + fileName);
                    ServerMovieManager.ReceiveFile(networkStream);
                    logSize = 2;
                    ServerResponse(frameHandler, "File sent");
                    break;

                case CommandType.DM:
                    ServerAsociationManager.AsociateDirectorToMovie(frame);
                    ServerResponse(frameHandler, "Director and movie asociated");
                    logSize = 2;
                    break;

                case CommandType.DD:
                    ServerAsociationManager.DeAsociateDirectorToMovie(frame);
                    ServerResponse(frameHandler, "Director and movie deasociated");
                    logSize = 2;
                    break;

                case CommandType.FF:
                    ServerResponse(frameHandler, "Goodbye");
                    logSize = 1;
                    return(false);

                default:
                    ServerResponse(frameHandler, "Formato de trama invalido vuelva a enviar");
                    break;
                }
                logManager.CreateLog(command.ToString().ToUpper(), frame, logSize);
                return(true);
            }
            catch (Exception ex)
            {
                var logManager = new SenderService();
                logManager.CreateLog("EX", frame, 1);
                if (ex is FormatException || ex is ArgumentException)
                {
                    IFrameHandler frameHandler = new FrameHandler(networkStream);
                    ServerResponse(frameHandler, "La trama recibida fue invalida");
                }
                else if (ex is IndexOutOfRangeException)
                {
                    IFrameHandler frameHandler = new FrameHandler(networkStream);
                    ServerResponse(frameHandler, "El objeto solicitado en el Data esta mal construido");
                }
                else if (ex is BussinesLogicException || ex is AsociatedClassException)
                {
                    IFrameHandler frameHandler = new FrameHandler(networkStream);
                    ServerResponse(frameHandler, ex.Message);
                }
                else if (ex is DataBaseException || ex is EntityBeingModifiedException)
                {
                    IFrameHandler frameHandler = new FrameHandler(networkStream);
                    ServerResponse(frameHandler, ex.Message);
                }
                else
                {
                    IFrameHandler frameHandler = new FrameHandler(networkStream);
                    ServerResponse(frameHandler, "Ha ocurrido un error inesperado vuelva a mandar su trama");
                }
                return(true);
            }
        }