// $Id$
//---------------------------------------------------------------------------
// To be able to handle CORBA requests an application usually calls orb->run().
// To integrate this into VCL applications we will run the orb in a separate
// thread. The ability to run the orb in a thread other than the main thread is
// a non-standard extension to CORBA provided by TAO. If you would rather use
// strictly standard CORBA calls, you need to add the code:
//
//   if (orb->work_pending())
//     orb->perform_work();
//
// somewhere into your application's event loop.
//
// Note that a "pure" client application (one that does not handle requests
// from any other application) need not do either of these things.
//---------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "ORBThread.h"
//---------------------------------------------------------------------------
__fastcall TORBThread::TORBThread (CORBA::ORB_ptr orb)
   : TThread (true),
     orb_ (CORBA::ORB::_duplicate (orb))
{
  Resume ();
}
//---------------------------------------------------------------------------
__fastcall TORBThread::~TORBThread ()
{
  try
    {
      orb_->shutdown (0);
    }
  catch (const CORBA::Exception&)
    {
    }

  WaitFor ();
}
//---------------------------------------------------------------------------
void __fastcall TORBThread::Execute ()
{
  try
    {
      orb_->run ();
    }
  catch (const CORBA::Exception& e)
    {
      ShowMessage (e._rep_id ());
      Application->Terminate ();
    }
}
//---------------------------------------------------------------------------
