Application.hxx
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #if !defined(VOCAL_APPLICATION_HXX)
  2. #define VOCAL_APPLICATION_HXX
  3. /* ====================================================================
  4.  * The Vovida Software License, Version 1.0 
  5.  * 
  6.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  7.  * 
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in
  17.  *    the documentation and/or other materials provided with the
  18.  *    distribution.
  19.  * 
  20.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  21.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  22.  *    not be used to endorse or promote products derived from this
  23.  *    software without prior written permission. For written
  24.  *    permission, please contact vocal@vovida.org.
  25.  *
  26.  * 4. Products derived from this software may not be called "VOCAL", nor
  27.  *    may "VOCAL" appear in their name, without prior written
  28.  *    permission of Vovida Networks, Inc.
  29.  * 
  30.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  31.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  32.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  33.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  34.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  35.  * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  36.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  37.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  38.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  39.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  40.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  41.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  42.  * DAMAGE.
  43.  * 
  44.  * ====================================================================
  45.  * 
  46.  * This software consists of voluntary contributions made by Vovida
  47.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  48.  * Inc.  For more information on Vovida Networks, Inc., please see
  49.  * <http://www.vovida.org/>.
  50.  *
  51.  */
  52. static const char* const Application_hxx_Version = 
  53.     "$Id: Application.hxx,v 1.3 2001/04/15 11:12:55 icahoon Exp $";
  54. #include "Runnable.hxx"
  55. #include "VocalCommon.hxx"
  56. #include "GarbageCan.hxx"
  57. /** Infrastructure common to VOCAL.<br><br>
  58.  */
  59. namespace Vocal 
  60. {
  61. using Vocal::GarbageCan;
  62. /** A singleton class which should be the entry point for a process.<br><br>
  63.  *  
  64.  *  @see    Vocal::Runnable
  65.  */
  66. class Application : public Vocal::Runnable
  67. {
  68.     public:
  69.      /** To get the singleton. Will create the Application the first
  70.  *  time called.
  71.       */
  72.      static Application &     instance();
  73.     private:
  74.         
  75.      /** This method must be implemented by the user that extends this
  76.  *  class. For example, if you extend this Application class, 
  77.  *  calling the new class MyApplication, your implementation should 
  78.  *  be something like: <br><br>
  79.  *  <code>
  80.  *  Application *   Application::create()<br>
  81.  *  {<ul>
  82.  *   return ( new MyApplication );
  83.  *  </ul>
  84.  *  }</code>
  85.       */
  86. static Application *     create();
  87.     public:
  88.      /** Should be called from the program's main(). It could
  89.  *  possibly look like:<br><br>
  90.  *  <code>
  91.  *  int main(int argc, char ** argv, char ** arge)<br>
  92.  *  {<ul>
  93.  *   return ( Application::main(argc, argv, arge) );
  94.  *  </ul>
  95.  *  }</code>
  96.  *
  97.  *  This method creates the instance of the Application, 
  98.  *  initializes it, runs it, uninitializes it and destroys the
  99.  *  instance.
  100.       */
  101. static ReturnCode       main(int      argc, 
  102.                      char  **  argv, 
  103.  char  **  arge);
  104.     protected:
  105.      /** Default constructor. Avoid creating objects in the constructor.
  106.  *  Instead, create them dynamically in init and destroy them in
  107.  *  uninit.
  108.       */
  109.      Application();
  110.     public:
  111.      /** Virtual destructor
  112.       */
  113. virtual ~Application();
  114.     protected:
  115.      /** Initialize the application. The command line arguments are
  116.  *  passed unaltered.
  117.       */
  118.      virtual ReturnCode       init(int      argc, 
  119.                      char  **  argv, 
  120.  char  **  arge);
  121.  
  122.      /** Uninitialize the application.
  123.       */
  124. virtual void     uninit();
  125.     private:
  126.      static Application   *   myApplication;
  127.         
  128.         GarbageCan                  myGarbageCan;
  129. };
  130. } // namespace Vocal
  131. #include "deprecated/DeprecatedApplication.hxx"
  132. #endif // !defined(VOCAL_APPLICATION_HXX)