TTCN-3 AND C#
           // TTCN-3 // TUTORIAL // USAGE // INTERFACES // DOWNLOAD // ABOUT

USAGE

// TOOLS // TTCN-3 EXPRESS // TTCN-3 STUDIO // C# EXAMPLE // JAVA EXAMPLE

EXAMPLE USING TTCN-3 AND C#

The TTCN-3 Module

module MyModule {

   type port Port message { inout charstring }

   type component Comp { port Port P }

   testcase Testcase() runs on Comp
   {
      log("sending Ping");
      P.send(charstring:"Ping") ;

      var charstring answer;
      P.receive(charstring:?) -> value answer ;
      log("received " & answer);
   }
   control {
      execute( Testcase() );
   }
}

The Adapter in C#

class MyAdapter : Etsi.Ttcn3.SystemAdapter
{
   Etsi.Ttcn3.TriPortId SavedPortId;
   Etsi.Ttcn3.TriComponentId SavedComponentId;

   public override Etsi.Ttcn3.TriStatus triMap (
      Etsi.Ttcn3.TriPortId compPortId,
      Etsi.Ttcn3.TriPortId tsiPortId
   )
   {
      SavedPortId = tsiPortId;
      SavedComponentId = compPortId.getComponent();

      return Etsi.Ttcn3.TriStatus.TRI_OK;
   }

   public override Etsi.Ttcn3.TriStatus triSend (
      Etsi.Ttcn3.TriComponentId componentId,
      Etsi.Ttcn3.TriPortId tsiPortId,
      Etsi.Ttcn3.TriAddress address,
      Etsi.Ttcn3.TriMessage sendMessage
   )
   {
      Respond();

      return Etsi.Ttcn3.TriStatus.TRI_OK;
   }

   void Respond()
   {
      Etsi.Ttcn3.TriMessage msg =
         Etsi.Ttcn3.Framework.GetFactory().TriMessage();
      byte[] bytes = new System.Text.UTF8Encoding().GetBytes("Pong");
      msg.setEncodedMessage(bytes);

      Etsi.Ttcn3.Framework.GetTriCommunicationTE().triEnqueueMsg (
         SavedPortId,
         null,
         SavedComponentId,
         msg
      );
   }

}

The Codec in C#

class MyCodec : Etsi.Ttcn3.Codec
{
   public override Etsi.Ttcn3.Value decode (
      Etsi.Ttcn3.TriMessage message,
      Etsi.Ttcn3.Type decodingHypothesis
   )
   {
      byte[] bytes = message.getEncodedMessage();
      string s = new System.Text.UTF8Encoding().GetString(bytes);

      Etsi.Ttcn3.CharstringValue value =
         Etsi.Ttcn3.Framework.GetFactory().CharstringValue();
      value.setString(s);

      return value;
   }

   public override Etsi.Ttcn3.TriMessage encode (
      Etsi.Ttcn3.Value value
   )
   {
      Etsi.Ttcn3.CharstringValue R = (Etsi.Ttcn3.CharstringValue) value;
      string str = R.getString();
      byte[] bytes = new System.Text.UTF8Encoding().GetBytes(str);
      Etsi.Ttcn3.TriMessage msg =
         Etsi.Ttcn3.Framework.GetFactory().TriMessage();
      msg.setEncodedMessage(bytes);

      return msg;
   }
}

Compiling and Running the Example

ttxp /compile MyModule
csh /target:library /reference:C:\ESPRESSO\ttcn-3\etsi.dll MyAdapter.jsl MyCodec.jsl
ttxp /run MyModule