OpenTTCN/Knowledge base/Writing Custom Codec Component/main.cpp

From OpenTTCN

Jump to: navigation, search

  OpenTTCN DocZone

  Home | Developer's corner | Knowledge base | Working documents | Documentation | OpenTTCN IDE | Tutorials | Training | How do I | Frequently asked questions | Technical support


main.cpp


Back to main article >>

#include "CodecComponentImpl.h"

#include <tci/TciCdProvided.h>

#include <StartHere.h>
#include <StartHereCD.h>

#include <isl/ProcessHelper.h>

#include <iostream>
#include <memory>

#include <stdio.h>

using namespace ORG_ETSI_TTCN3_TCI;
using namespace ORG_ETSI_TTCN3_TRI;

void Console_WriteLine(const std::string& s) // mimicks Console.WriteLine() C# behaviour
{
    std::cout << s << std::endl;
}

void Console_Write(const std::string& s) // mimicks Console.Write() C# behaviour
{
    std::cout << s;
}

class CD_impl : public TciCdProvided
{
    std::auto_ptr<OpenTTCN::SDK::CodecComponent> _ccDelegate;

public:

    CD_impl(): _ccDelegate(OpenTTCN::SDK::StartHereCD::
        getCodecComponent("http://www.example.com/Codecs/2011/SimpleFrameCodec"))
    {
    }

    virtual ~CD_impl() { }

    virtual TriMessage* encode(const TciValue* value_)
    {
        // Invoke custom codec component encoder:

        return _ccDelegate->encode(value_);
    }

    virtual TciValue* decode(const TriMessage* message_,
        const TciType* decodingHypothesis_)
    {
        // Indication that custom codec component decoder is applicable:

        return _ccDelegate->decode(message_, decodingHypothesis_);
    }
};

int main(int argc, char *argv[])
{
    std::string sessionName = "some_app";
    Console_WriteLine("Session is " + sessionName);

    try
    {
        OpenTTCN::SDK::StartHere::initialize();

        // Register factory methods for built-in codec components:

        OpenTTCN::SDK::StartHereCD::registerCodecComponentFactory(
            &some_app_codec_component::CodecComponentImpl::create);

        OpenTTCN::SDK::StartHereCD::registerCodecImpl(new CD_impl());

        OpenTTCN::SDK::StartHereCD::registerAsStandaloneCodec(sessionName);

        Console_WriteLine("Running as a standalone codec.");

        while (true) OpenTTCN::ISL::sleepInMillis(100000);
    }
    catch (std::runtime_error& e)
    {
        Console_WriteLine(std::string() + "main(): Error (std::runtime_error): " + e.what());
    }
    catch (...)
    {
        Console_WriteLine("main(): Unexpected exception.");
    }
}
Views
Personal tools