Examples: Host Responder Class

Following are two code examples for a Host Responder class in C# and Perl.

Example 1 C# code for a DBOverwrite Responder

The following code example shows how to code a Responder class as part of a C# Console Application project:

// Copyright © 2002 Unisys Corporation. All rights reserved. UNISYS CONFIDENTIAL

// It contains two examples to check for the host prompts to confirm overwriting
// the database (auto-response set to YES) and reorganizing the database (auto-response set to NO).

using System;
using System.Text.RegularExpressions;

namespace SampleResponder
{
/// <summary>
/// Summary description for SampleResponderClass.
/// </summary>
public class SampleResponderClass
{
   /// <summary>
   /// Main method reads log entries from standard input.
   /// If it finds any of interest it writes a response to Standard Output.
   //<DB name> CONTROL FILE IN USE -- WHEN DB CLOSED,ENTER  OK
   //Regex DBExistsPattern = new Regex(CONTROL FILE IN USE -- WHEN DB CLOSED,ENTER  OK);

   // Other messages to process...
   // ** WHEN DATABASE CLOSED , ENTER <MIX> OK
   // POP. OPTIONS WARNING - SEE CFG REPORT MIX
   /// </summary>
   [STAThread]
   static void Main(string[] args)
   {
      // Create regular expressions for the following two host queries.
      // Also create the regular expressions for the valid reply patterns
      // for these two host queries.
      //
      // 14:57:20 *** DATABASE ALREADY EXISTS, TO OVERWRITE ENTER AX YES ELSE NO.
      // 14:57:20 Valid Reply: 5903 & one of AX {reply option},DS
      //
      // NOTE: The \\* is simply a * because the star char is a Regexp special char
      // See the MS documentation on Regex class.
      Regex DBExistsPattern = new Regex( \\*\\*\\* DATABASE ALREADY EXISTS, TO               OVERWRITE ENTER AX YES 
ELSE NO);
      // Note: the brackets () below indicate groups we want to extract from the text
      Regex ValidDBExistsReplyPattern = new Regex( Valid Reply: ([0-9]*) & one of AX    {reply option},DS );
      Regex DBReorgPattern = new Regex(\\*\\* DO YOU WISH TO RESTART THIS REORG,AX YES          OR NO \\*);
      Regex ValidDBReorgReplyPattern = new Regex( Valid Reply: ([0-9]*) & one of AX          {reply option},DS );

      bool DBExistQuestionMatch = false;
      bool DBReorgQuestionMatch = false;
      // YOU CAN EDIT HERE --> Initialize a boolean variable to indicate if
      // the message list consists the host query of interest.
      // bool HostQueryQuestionMatch = false;

      String sMsg = System.Console.ReadLine();
      // For each of the log lines check against the pattern(s) of interest
      while ( sMsg != null )
      {
         // Did we match the DB Exists Pattern?
         Match m = DBExistsPattern.Match( sMsg );
         if ( m.Success )
         {
            DBExistQuestionMatch = true;
         }
         // Did we match the Valid Reply Pattern?
         m = ValidDBExistsReplyPattern.Match( sMsg );
         if ( m.Success )
         {
            if ( DBExistQuestionMatch )
            {
            // Write response to standard output
            System.Console.WriteLine(m.Groups[1].ToString() +  AX YES);
            }
          }
          // Did we match the DB Reorg pattern?
          m = DBReorgPattern.Match( sMsg );
          if ( m.Success )
          {
             DBReorgQuestionMatch = true;
          }
          // Did we match the Valid Reply Pattern?
          m = ValidDBReorgReplyPattern.Match( sMsg );
          if ( m.Success )
          {
             if ( DBReorgQuestionMatch )
             {
             // Write response to standard output
             System.Console.WriteLine( m.Groups[1].ToString() +  AX NO );
             }
          }
          // read the next line from Standard Input
          sMsg = System.Console.ReadLine();
      }
      // If we didn't detect a response then return nothing allow manual response
      }
   }
} 

Example 2 Perl Code for a Host Responder

Here is similar code written as a Perl script:

# This is a perl overwrite responder for the MCP host build

# Read the log information from the host via STDIN – the standard input

my(@LogLines) = <STDIN>;
my($FoundDBExists) = 0;
my($LogLine) = ;

# Loop through the lines and match on loglines of interest...
foreach $LogLine ( @LogLines )
{
   # scan for DB exists message
   if( $LogLine =~ /\*\*\* DATABASE ALREADY EXISTS, TO OVERWRITE ENTER AX YES ELSE NO/ )
   {
      $FoundDBExists = 1;
      next;
   }
   if( $FoundDBExists )
   {
      if( $LogLine =~ /Valid Reply: ([0-9]*) & one of AX \{reply option\},DS/)
      {
         print $1 AX YES;  # write response to STDOUT
         exit(0); # done!
      }
   }
} 
# No Response 
print ;