OpenTTCN/Knowledge base/Writing Custom Codec Component/main.cpp
From OpenTTCN
Home | Developer's corner | Knowledge base | Working documents | Documentation | OpenTTCN IDE | Tutorials | Training | How do I | Frequently asked questions | Technical support |
main.cpp
#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.");
}
}
