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

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: AcqServConnThread.java,v 1.4 1999/01/14 02:41:52 andrew Exp $
  6. */
  7. package edu.sunysb.cs.ecsl.videoserver;
  8. import java.io.*;
  9. import java.net.*;
  10. class AcqServConnThread extends Thread implements AcqServProtocol {
  11.   VideoServer parentApplication = null;
  12.   VSProperties properties = null;
  13.   private Socket socket = null;
  14.   private DataOutputStream outputstream = null;
  15.   private BufferedReader inputreader = null;
  16.   AcqServConnThread( VideoServer app, VSProperties props ) 
  17.     throws UnknownHostException, IOException
  18.     {
  19.       super( "1" );
  20.       parentApplication = app;
  21.       properties = props;
  22.     }
  23.   public void run() 
  24.     {
  25.       InetAddress addr = null;
  26.       try
  27. {
  28.   addr = java.net.InetAddress.getByName
  29.     ( properties.getProperty( properties.AcquisitionServerIP ));
  30. }
  31.       catch ( java.net.UnknownHostException e ) 
  32. {
  33.   parentApplication.log( 0, e.toString() );
  34.   //   parentApplication.AcqServConnThreadDie();
  35.   return;
  36. }
  37.       try
  38. {
  39.   socket = new Socket( addr, properties.getPropertyInt
  40.        ( properties.AcquisitionServerPort ));
  41.   // set timeout time for all input calls
  42.   socket.setSoTimeout( 100 );
  43.   outputstream = new DataOutputStream( socket.getOutputStream() );
  44.   inputreader = new BufferedReader( new InputStreamReader
  45.     ( socket.getInputStream() ));
  46. }
  47.       catch ( IOException e ) 
  48. {
  49.   parentApplication.log( 0, e.toString() );
  50.   //   parentApplication.AcqServConnThreadDie();
  51.   return;
  52. }
  53.       // inform acq server where to broadcast data. 
  54.       try
  55. {
  56.   setupAcquisitionStream
  57.     ( properties.getProperty
  58.       ( properties.AcquisitionServerBroacastDestIP ),
  59.       properties.getProperty
  60.       ( properties.AcquisitionServerBroacastDestPort ));
  61.   while( true )
  62.     {
  63.       // this call pick-up and parse the command.
  64.       waitForInput();
  65.     }
  66. }
  67.       catch( Exception e ) 
  68. {
  69.   // ends the thread there
  70.   parentApplication.log( 0, e.toString() );
  71. }
  72.       //      parentApplication.AcqServConnThreadDie();
  73.     }
  74.   /** database server informs acquisition server of the push server which
  75.       is interested to receive video stream. If broadcast or multicast is 
  76.       needed, this is performed by the push server, not by acquisition
  77.       server
  78.   */
  79.   protected synchronized void setupAcquisitionStream
  80.       ( String ipaddr, String portnum )
  81.     {
  82.       try
  83. {
  84.   outputstream.writeBytes( _add_acq_stream_[KEY] + "n" );
  85.   outputstream.writeBytes( ipaddr + "n" + portnum + "n" );
  86. }
  87.       catch( IOException e )
  88. {
  89.   // if exception occurs, add log record and zero socket
  90.   parentApplication.log( 0, e.toString() );
  91.   try {
  92.     socket.close(); }
  93.   catch( Exception dummy ) {}
  94.   socket = null;
  95. }
  96.     }
  97.   /** this method lock the thread 
  98.    */
  99.   protected synchronized void waitForInput()
  100.     throws IOException
  101.     {
  102.       String command = null;
  103.       try
  104. {
  105.   command = inputreader.readLine();
  106. }
  107.       catch( InterruptedIOException e )
  108. {
  109.   // this means that timeout occurs. Simple exit
  110. }
  111.     }
  112. }