OpenTTCN/Developer corner/Implementing external functions/Skeletons/C sharp/CD impl.cs
From OpenTTCN
Home | Developer's corner | Knowledge base | Working documents | Documentation | OpenTTCN IDE | Tutorials | Training | How do I | Frequently asked questions | Technical support |
CD_impl.cs
using System;
using System.Text;
using Etsi.Ttcn3.Tci;
using Etsi.Ttcn3.Tri;
using OpenTTCN.Sdk;
namespace ExtFuncAdapter
{
class CD_impl : ITciCDProvided
{
public ITriMessage Encode(ITciValue value)
{
Console.WriteLine("Encode(): value = " + ((value != null) ? value.ToString() : "null"));
if (value.Type.TypeClass == TciTypeClass.Charstring)
{
ITciCharstringValue v = (ITciCharstringValue) value;
string buffer = "TypeCode=charstring:TypeName=" +
value.Type.Name + ":Value=" +
FormatConverter.CharstringToOctetstring(v.StringValue);
return new TriMessage((new System.Text.UTF8Encoding()).GetBytes(buffer));
}
else if (value.Type.TypeClass == TciTypeClass.IntegerType)
{
ITciIntegerValue v = (ITciIntegerValue) value;
string buffer = "TypeCode=integer:TypeName=" +
value.Type.Name + ":Value=" + v.StringValue;
return new TriMessage((new System.Text.UTF8Encoding()).GetBytes(buffer));
}
throw new AdapterException(String.Format(
"Unable to encode value '{0}'.", value.ToString()));
}
public ITciValue Decode(ITriMessage message, ITciType decodingHypothesis)
{
ITciCDRequired req = StartHereCD.TciCDRequired;
string s = (new System.Text.UTF8Encoding()).GetString(message.EncodedMessage);
string[] elems = s.Split(new char[] { ':' });
string typeCode = "";
string typeName = "";
string value = "";
foreach (string elem in elems)
{
string[] subelems = elem.Split(new char[] { '=' });
if (subelems[0] == "TypeCode") typeCode = subelems[1];
else if (subelems[0] == "TypeName") typeName = subelems[1];
else if (subelems[0] == "Value") value = subelems[1];
else
{
throw new AdapterException(
String.Format("Unrecognized element tag: {0}.", elem));
}
}
if (typeCode == "charstring")
{
ITciCharstringValue result =
(ITciCharstringValue) req.GetTypeForName(typeName).NewInstance();
result.StringValue = FormatConverter.OctetstringToCharstring(value);
return result;
}
else if (typeCode == "integer")
{
ITciIntegerValue result =
(ITciIntegerValue) req.GetTypeForName(typeName).NewInstance();
result.StringValue = value;
return result;
}
throw new AdapterException(String.Format("Unable to decode value '{0}'.", s));
}
}
}
