ParseAndProcessWorkstationCommand( InputByteArray inputArray, DataStreamHeader StreamHeader) { var logList = new TelnetLogList(); WorkstationCommandBase wrkstnCommand = null; DataStreamHeader currentDataStreamHeader = StreamHeader; ShowItemList showItemList = null; wrkstnCommand = WorkstationCommandBase.ParseFactory(inputArray); if (wrkstnCommand == null) { currentDataStreamHeader = null; } else { logList.AddItems(Direction.Read, wrkstnCommand.ToReportLines(), true); // process WriteToDisplay command. This command contains a list TextData and // start field orders. Create ShowItemList items from those orders. if (wrkstnCommand is WriteToDisplayCommand) { var wtdCommand = wrkstnCommand as WriteToDisplayCommand; showItemList = wtdCommand.BuildShowItemList(logList); } } return(new Tuple <WorkstationCommandBase, ShowItemList, DataStreamHeader, TelnetLogList>( wrkstnCommand, showItemList, currentDataStreamHeader, logList)); }
ParseAndProcessWorkstationCommand(InputByteArray inputArray) { WorkstationCommandBase wrkstnCommand = null; HowReadScreen? howRead = null; wrkstnCommand = WorkstationCommandBase.ParseFactory(inputArray); if (wrkstnCommand != null) { howRead = wrkstnCommand.GetHowReadScreenCode(); // process WriteToDisplay command. This command contains a list TextData and // start field orders. Create ShowItemList items from those orders. if (wrkstnCommand is WriteToDisplayCommand) { var wtdCommand = wrkstnCommand as WriteToDisplayCommand; } } return(new Tuple <WorkstationCommandBase, HowReadScreen?>( wrkstnCommand, howRead)); }
/// <summary> /// write buffer contents to log file. /// </summary> /// <param name="Direction"></param> /// <param name="Buffer"></param> /// <param name="Length"></param> public void Write(string Direction, byte[] Buffer, int Length) { var lines = new List <string>(); this.Counter += 1; var inputArray = new InputByteArray(Buffer, Length); while (inputArray.IsEof() == false) { // peek to see if the current byte is a telnet command. var escapeCmd = inputArray.PeekNextByte().ToTelnetCommandCode(); // peek to see if the current bytes are an IBM5250 datastream header. DataStreamHeader dsh = null; string errmsg = null; { var rv = DataStreamHeader.Factory(inputArray); dsh = rv.Item1; errmsg = rv.Item2; } // current bytes are an ibm5250 datastream header. ( page 2-4 of rfc 1205 ) // store this header as the "current datastream header". When there is a // current data stream header the code will match the current bytes against // ibm5250 data stream commands. if (errmsg == null) { lines.Add( Direction + " " + this.Counter.ToString() + " " + dsh.ToString()); this.CurrentDataStreamHeader = dsh; continue; } // currently in a 5250 data stream header. if (this.CurrentDataStreamHeader != null) { var dataStreamCommand = WorkstationCommandBase.ParseFactory(inputArray); if (dataStreamCommand != null) { lines.Add( Direction + " " + this.Counter.ToString() + " " + dataStreamCommand.ToString()); // all the data stream command ToString methods provide enough info. // But for the WriteToDisplayCommand, list out the ToString contents of // the WtdOrders of that command. if (dataStreamCommand is WriteToDisplayCommand) { var wtdCommand = dataStreamCommand as WriteToDisplayCommand; foreach (var order in wtdCommand.OrderList) { lines.Add(order.ToString()); } } continue; } } { var stmt = TelnetCommand.Factory(inputArray); if (stmt != null) { lines.Add( Direction + " " + this.Counter.ToString() + " " + stmt.ToString()); continue; } } if ((escapeCmd != null) && (escapeCmd.Value == CommandCode.ESCAPE)) { var rv = TerminalVt100Statement.Factory(inputArray); var vtStmt = rv.Item1; var otStmt = rv.Item2; lines.Add( Direction + " " + this.Counter.ToString() + " " + vtStmt.ToString()); if (otStmt != null) { lines.Add( Direction + " " + this.Counter.ToString() + " " + otStmt.ToString()); } continue; } { var remBytes = inputArray.GetBytesToEnd(); lines.Add(Direction + " " + this.Counter.ToString() + " Raw bytes follow:"); LogFile_WriteRawBytes(remBytes, lines); } } WriteTextLines(lines); }