OpenTTCN/Developer corner/Implementing external functions/Skeletons/C sharp/CD impl.cs

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


CD_impl.cs


Back to main article >>

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));
        }
    }
}
Views
Personal tools