public static Packet Parse(KaitaiStream input, IParameterManager manager) { // get command var command = (RcpTypes.Command)input.ReadU1(); if (!Enum.IsDefined(typeof(RcpTypes.Command), command)) { throw new RCPDataErrorException("Packed parsing: Unknown command: " + command.ToString()); } var packet = new Packet(command); // read packet options while (!input.IsEof) { var code = input.ReadU1(); if (code == 0) // terminator { break; } var option = (RcpTypes.PacketOptions)code; if (!Enum.IsDefined(typeof(RcpTypes.PacketOptions), option)) { throw new RCPDataErrorException("Packet parsing: Unknown option: " + option.ToString()); } switch (option) { case RcpTypes.PacketOptions.Data: switch (command) { // case RcpTypes.Command.Initialize: // // init - should not happen // throw new RCPDataErrorException(); case RcpTypes.Command.Remove: case RcpTypes.Command.Update: // expect parameter packet.Data = Parameter.Parse(input, manager); break; case RcpTypes.Command.Version: packet.Data = new RcpTypes.TinyString(input); break; } break; case RcpTypes.PacketOptions.Timestamp: packet.Timestamp = input.ReadU8be(); break; default: throw new RCPUnsupportedFeatureException(); } } return(packet); }
public override ulong ReadValue(KaitaiStream input) { return(input.ReadU8be()); }