//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project
//
//File: tastate.cpp
//
//Version: $Revision: 1.15 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/10/08 13:21:03 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Jussi Turunen
//
//Description:
//      See corresponding header file.
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History: 

#include <OB/CORBA.h>
#include <OB/Util.h>

#include <stdio.h>
#include <stdlib.h>

#ifdef HAVE_FSTREAM
#   include <fstream>
#else
#   include <fstream.h>
#endif

#include "pf/debug.h"

#include "msg_impl.h"
#include "forwarder.h"
#include "taprimitives.h"
#include "tastate.h"


taState *taState :: _only = 0;

taState *taState :: instance(void)
{
    if (_only == 0)
    {
      _only = new taState();
    }
    return _only;
}

taState :: taState(void)
    : pfState(),
      taInputs(),
      uaalUpInputs(),
      _receiver(0)
{
    return;
}

taState :: ~taState(void)
{
    return;
}

void taState :: taMessengerAct(taMessenger *messenger_,
                               pfProtocol *adapter_)
{
    pfTestAdapter *adapter = dynamic_cast<pfTestAdapter*>(adapter_);
    
    string msg = "PDU from N-1 to tester PCO " + adapter->getPCO();
    debugUser(msg);
    string s = messenger_->getIdentifier();
    s = "T" + adapter->getPCO() + s;

    CORBA_String_var identifier =
        CORBA_string_dup((s.c_str()));  
    messenger_->printData();
    // for test systems without _receiver i.e. for testing without the tester
    if (!CORBA_is_nil(_receiver)!=0)
    {
        _receiver->send(identifier , messenger_->getData());
    }
    return;
}

void taState :: setReceiver(CORBA_ORB_ptr orb_, const string &peerName_)
{
    CORBA_Object_ptr obj = oesForwarder::loadIOR(orb_, peerName_);
    _receiver = otMessage::_narrow(obj);
    // no assert here preferably since execution stops without warning
    // assert(!CORBA_is_nil(_receiver));

    return;
}

void taState :: uaalESTABLISHindAct(uaalESTABLISHind *,
                                    pfProtocol *)
{
    debugUser("uaalESTABLISHindAct");
    return;
}
void taState :: uaalESTABLISHconfAct(uaalESTABLISHconf *,
                                     pfProtocol *)
{
    debugUser("uaalESTABLISHconfAct");
    return;
}

void taState :: uaalRELEASEindAct(uaalRELEASEind *,
                                  pfProtocol *)
{
    debugUser("uaalRELEASEindAct");
    return;
}

void taState :: uaalRELEASEconfAct(uaalRELEASEconf *,
                                   pfProtocol *)
{
    debugUser("uaalRELEASEconfAct");
    return;
}


void taState :: uaalDATAindAct(uaalDATAind *,
                               pfProtocol *)
{
    debugUser("uaalDATAindAct");
    return;
}

            
void taState :: uaalUNITDATAindAct(uaalUNITDATAind *,
                                   pfProtocol *)
{
    debugUser("uaalUNITDATAindAct");
    return;
}
            


