TextProtocolItem.java
上传用户:psq1974
上传日期:2007-01-06
资源大小:1195k
文件大小:2k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. /* Copyright (C) 1998, 1999 State University of New York at Stony Brook
  2.    Author: Andrew V. Shuvalov ( andrew@ecsl.cs.sunysb.edu )
  3.    Software license is located in file "COPYING"
  4.    VideoServer application
  5.      $Id: TextProtocolItem.java,v 1.5 1999/01/14 02:41:52 andrew Exp $
  6. */
  7. package edu.sunysb.cs.ecsl.videoserver;
  8. import java.io.*;
  9. import java.util.Vector;
  10. import java.lang.reflect.Method;
  11. import java.lang.Class;
  12. /** Every item of this class must hold the Method to work on specific
  13.     text protocol's command
  14. */
  15. class TextProtocolItem 
  16. {
  17.   private String keyword = null;
  18.   private java.lang.reflect.Method methodToCall = null;
  19.   VideoServerThread implementator = null;
  20.   Class parameterTypes[] = new Class[1];
  21.   /** keep instances of possible exceptions to compare */
  22.   KillRequestedException kre = new KillRequestedException("");
  23.   SyntaxException se = new SyntaxException("");
  24.   IOException ioe = new IOException();
  25.   /** implementator class must have a function called 'keyword' + '_impl'.
  26.       Parameter types is fixed
  27.    */
  28.   public TextProtocolItem( VideoServerThread _implementator, String _keyword )
  29.     throws SyntaxException
  30.     {
  31.       implementator = _implementator;
  32.       try
  33. {
  34.   parameterTypes[0] = Class.forName( "java.util.Vector" );
  35. }
  36.       catch( ClassNotFoundException e )
  37. {
  38.   throw new SyntaxException( "Stupid, " + e.toString() );
  39. }
  40.       keyword = _keyword.toLowerCase().trim();
  41.       String name = keyword + "_impl";
  42.       try
  43. {
  44.   methodToCall = implementator.getClass().
  45.     getMethod( name, parameterTypes );
  46. }
  47.       catch( NoSuchMethodException e )
  48. {
  49.   throw new SyntaxException( "Not implemented: " + name );
  50. }
  51.     }
  52.   protected void execute( Vector args )
  53.     throws SyntaxException, KillRequestedException, IOException,
  54.    IllegalAccessException, NoSuchMethodException
  55.     {
  56.       try
  57. {
  58.   Object c_args[] = new Object[1];
  59.   c_args[0] = args;
  60.   methodToCall.invoke( implementator, c_args );
  61. }
  62.       catch( java.lang.reflect.InvocationTargetException e )
  63. {
  64.     Throwable te = (Throwable) e.getTargetException();
  65.     if( kre.getClass().isInstance( te ))
  66. throw (KillRequestedException) te;
  67.     if( se.getClass().isInstance( te ))
  68. throw (SyntaxException) te;
  69.     if( ioe.getClass().isInstance( te ))
  70. throw (IOException) te;
  71.     // unknown
  72.     throw new SyntaxException( te.toString() );
  73. }
  74.     }
  75. }