ccmqmsgque 9.0
Loading...
Searching...
No Matches
Example: MyTransaction

Documentation of the MyTransaction tool used for example.test.

INTRODUCTION

The MyTransaction tool is used to test the longterm-transaction-feature of ccmqmsgque.

To test this feature the client connect to the server and send two service-calls:

  • one longterm-transaction-service-call using the low-api
  • one longterm-transaction-service-call using the high-api

The service-call itself is quite simple:

  • the private part is a string : Privat_Data_1 or Privat_Data_2
  • the public part is an integer : 1111 or 2222

The GOAL for this test is:

  • test the longterm-transaction-feature
  • test the BufferListCheckOptionC with and without default-value
  • test the callback-feature with and without error

CODE client

#include <iostream>

using namespace ccmqmsgque;

void callback(MqContextC *ctx) {
  ctx->ReadT_START();
  MK_STRN myPrivateHandle = ctx->ReadC();
  ctx->ReadT_END();
  MK_INT myServiceResult = ctx->ReadI();

  std::cout << "myPrivateHandle=" << myPrivateHandle << ", myServiceResult=" << myServiceResult << std::endl;
}

int MK_CDECL main(int argc, MK_STRN argv[]) {
  MqMsgque::Setup();
  MqContextC ctx;
  try {
    ctx.ConfigSetName("MyTransaction");

    // setup commandline arguments used for parsing
    MkBufferListC args = {argc, argv};

    // check if the '--token' option is available, default "SRVC"
    MK_STRN token = args.CheckOptionC("--token", "SRVC");

    // connect to the server
    ctx.LinkCreate(args);

    // register callback
    ctx.ServiceCreate("CLB1", MqContextC::StaticCallbackF(callback));
     
    // send block using the LOW-Api
    ctx.SendSTART();
    ctx.SendT_START();
    ctx.SendC("Privat_Data_1");
    ctx.SendT_END();
    ctx.SendI(11111);
    ctx.SendEND_AND_TRANSACTION(token, "CLB1");
     
    // send block using the HIGN-Api -> same as above, but shorter
    char buffer[30];
    sprintf(buffer, "%s:(C)I",token);
    ctx.Send("T", "CLB1", buffer, "Privat_Data_2", 22222);
     
    // now we wait for exact ONE result of the "ctx"
    ctx.ProcessEvent(MQ_WAIT_OWN);

  } catch (const std::exception& e) {

    ctx.ErrorCatch(e);
  }
  ctx.Exit();
}