/// <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; } } }
private static bool IsHeaderStructureOk(HeaderStructure headerStructure, byte[] frame) { return(headerStructure.CommandType.GetType().IsEnum&& headerStructure.FlagType.GetType().IsEnum); }
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); } }