public static TelnetCommand Factory(InputByteArray InputArray, CommandCode CmdCode) { TelnetCommand telnetCmd = null; TelnetSubject?subject = null; if (InputArray.RemainingLength > 2) { subject = InputArray.PeekTelnetSubject(2); } if (CmdCode == CommandCode.SE) { telnetCmd = new EndSubNegCommand(InputArray); } else if (CmdCode == CommandCode.EOR) { telnetCmd = new EOR_Command(InputArray); } else if (subject == null) { telnetCmd = new TelnetCommand(InputArray, CmdCode); } else if (subject.Value == TelnetSubject.NewEnviron) { telnetCmd = new NewEnvironCommand(InputArray, CmdCode); } else if (subject.Value == TelnetSubject.TerminalType) { telnetCmd = new TerminalTypeCommand(InputArray, CmdCode); } else if (subject.Value == TelnetSubject.END_OF_RECORD) { telnetCmd = new EndOfRecordStatement(InputArray, CmdCode); } else if (subject.Value == TelnetSubject.TRANSMIT_BINARY) { telnetCmd = new TransmitBinaryCommand(InputArray, CmdCode); } else if (subject.Value == TelnetSubject.NAWS) { telnetCmd = new NawsStatement(InputArray, CmdCode); } else if (subject.Value == TelnetSubject.ECHO) { throw new Exception("echo subject of " + CmdCode.ToString() + " command."); } else { throw new Exception("Unexpect telnet command"); } return(telnetCmd); }