/* 9P Protocol JAVA
 * P9P/msg/msg9P.java
 * Autor: Jaime Garzon (2006) jgarzon@gmail.com
 *
 * Implementacion del objeto MENSAJE de 9P.
 * El metodo estatico setTypeMsg, retorna un msg9P mas
 * especifico de 9P, dependiendo del valor de "t"
 *
 * Los metodos Write y Read, permiten escribir el valor
 * de la forma little-endian en un Buffer o leerlo de un
 * array de bytes, respectivamente.
*/

package P9P.msg;
import P9P.type.*;
import java.io.*;

public abstract class msg9P {

   public abstract void write(ByteArrayOutputStream buf);
   public abstract void read (byte[] msg, int i);
   public abstract String toString();

   public byte9P type = new byte9P();
   public short9P tag = new short9P();

   public static msg9P setTypeMsg (byte t) {

      switch(t) {
         case cto9P.Tversion: return new Tversion9P();
         case cto9P.Tauth:    return new Tauth9P();
         case cto9P.Tattach:  return new Tattach9P();
         case cto9P.Tflush:   return new Tflush9P();
         case cto9P.Twalk:    return new Twalk9P();
         case cto9P.Topen:    return new Topen9P();
         case cto9P.Tcreate:  return new Tcreate9P();
         case cto9P.Tread:    return new Tread9P();
         case cto9P.Twrite:   return new Twrite9P();
         case cto9P.Tclunk:   return new Tclunk9P();
         case cto9P.Tremove:  return new Tremove9P();
         case cto9P.Tstat:    return new Tstat9P();
         case cto9P.Twstat:   return new Twstat9P();

         case cto9P.Rversion: return new Rversion9P();
         case cto9P.Rauth:    return new Rauth9P();
         case cto9P.Rattach:  return new Rattach9P();
         case cto9P.Rflush:   return new Rflush9P();
         case cto9P.Rwalk:    return new Rwalk9P();
         case cto9P.Ropen:    return new Ropen9P();
         case cto9P.Rcreate:  return new Rcreate9P();
         case cto9P.Rread:    return new Rread9P();
         case cto9P.Rwrite:   return new Rwrite9P();
         case cto9P.Rclunk:   return new Rclunk9P();
         case cto9P.Rremove:  return new Rremove9P();
         case cto9P.Rstat:    return new Rstat9P();
         case cto9P.Rwstat:   return new Rwstat9P();
         case cto9P.Rerror:   return new Rerror9P();
      }
      return null;
   }

   protected String tagDb() {
      return "Tag:"+tag.value+" ";
   }
}