CVS update: JGroups/tests/other/org/jgroups/tests ParseMessages.java

"Bela Ban" <[email protected]> Wed, 29 Sep 2010 13:33:27 +0000
Newsgroups gmane.comp.java.javagroups.cvs
Message-ID <[email protected]>
  User: belaban 
  Date: 10/09/29 13:33:27

  Added:       tests/other/org/jgroups/tests ParseMessages.java
  Log:
  ns
  
  Revision  Changes    Path
  1.1                  JGroups/tests/other/org/jgroups/tests/ParseMessages.java
  
  Index: ParseMessages.java
  ===================================================================
  package org.jgroups.tests;
  
  import org.jgroups.Address;
  import org.jgroups.Message;
  import org.jgroups.Version;
  import org.jgroups.util.Util;
  
  import java.io.*;
  import java.util.LinkedList;
  import java.util.List;
  
  /**
   * Parses messages out of a captured file and writes them to stdout
   * @author Bela Ban
   * @version $Id: ParseMessages.java,v 1.1 2010/09/29 13:33:27 belaban Exp $
   */
  public class ParseMessages {
      InputStream input=null;
      private static final byte LIST=1; // we have a list of messages rather than a single message when set
      private static final byte MULTICAST=2; // message is a multicast (versus a unicast) message when set
      
      public ParseMessages(String input) throws FileNotFoundException {
          this.input=new FileInputStream(input);
      }
  
      public void parse() {
          short           version;
          byte            flags;
          DataInputStream dis=null;
  
          try {
              dis=new DataInputStream(input);
  
              for(;;) {
                  // version=dis.readShort();
  
                  int ch1 = input.read();
                  int ch2 = input.read();
                  if ((ch1 | ch2) < 0)
                      throw new EOFException();
                  version=(short)((ch1 << 8) + (ch2 << 0));
  
  
                  System.out.println("version = " + version + " (" + Version.print(version) + ")");
                  flags=dis.readByte();
                  System.out.println("flags: " + Message.flagsToString(flags));
  
                  boolean is_message_list=(flags & LIST) == LIST;
                  boolean multicast=(flags & MULTICAST) == MULTICAST;
  
                  if(is_message_list) { // used if message bundling is enabled
                      List<Message> msgs=readMessageList(dis);
                      System.out.println(msgs.size() + " msgs: ");
                      int cnt=1;
                      for(Message msg: msgs) {
                          System.out.print("#" + cnt++ + ": ");
                          print(msg, multicast);
                      }
                  }
                  else {
                      Message msg=readMessage(dis);
                      print(msg, multicast);
                  }
              }
          }
          catch(Throwable t) {
              t.printStackTrace();
          }
          finally {
              Util.close(dis);
          }
      }
  
      private static void print(Message msg, boolean multicast) {
          System.out.println(msg + ", hdrs: " + msg.printHeaders() + ", mcast: " + multicast);
      }
  
      private static List<Message> readMessageList(DataInputStream in) throws Exception {
          List<Message> list=new LinkedList<Message>();
          Address dest=Util.readAddress(in);
          Address src=Util.readAddress(in);
  
          while(in.readBoolean()) {
              Message msg=new Message(false);
              msg.readFrom(in);
              msg.setDest(dest);
              if(msg.getSrc() == null)
                  msg.setSrc(src);
              list.add(msg);
          }
          return list;
      }
  
      protected static Message readMessage(DataInputStream instream) throws Exception {
          Message msg=new Message(false); // don't create headers, readFrom() will do this
          msg.readFrom(instream);
          return msg;
      }
  
  
      public static void main(String[] args) throws FileNotFoundException {
          String file=null;
  
          for(int i=0; i < args.length; i++) {
              if(args[i].equals("-file")) {
                  file=args[++i];
                  continue;
              }
              help();
              return;
          }
  
          new ParseMessages(file).parse();
      }
  
      static private void help() {
          System.out.println("ParseMessages [-file <filename>]");
      }
  }
  
  
  

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev