IMessage Sample
Source code
using System;
using System.IO;
using System.Reflection;
using System.Text;
using OnixS.SimpleBinaryEncoding.CodeGenerator;
using OnixS.SimpleBinaryEncoding.Templates;
namespace OnixS.SimpleBinaryEncoding.IMessageSample
{
class Program
{
static void Main()
{
Console.WriteLine("IMessage API sample.");
try
{
TemplateLibrary.LicenseStore = "../../../../../license|.";
TemplateLibrary library = TemplateLibrary.Parse(File.ReadAllText(@"../../../../templates/ilinkbinary.xml"));
Generator generator = new();
Assembly assembly = generator.GenerateAssembly<CmeILinkHeader>(library, "OnixS.SimpleBinaryEncoding.Sample");
IDecoder decoder = (IDecoder)Activator.CreateInstance(assembly.GetType("OnixS.SimpleBinaryEncoding.Sample.Decoder", true));
IEncoder encoder = (IEncoder)Activator.CreateInstance(assembly.GetType("OnixS.SimpleBinaryEncoding.Sample.Encoder", true));
var buffer = new MemoryPointer(new byte[65536]);
{
IMessage negotiate = encoder.Wrap(500, buffer);
negotiate.SetString(Tag.HMACSignature, "HMAC")
.SetString(Tag.AccessKeyID, "AccessKey")
.SetUnsignedInteger(Tag.UUID, 1)
.SetUnsignedLong(Tag.RequestTimestamp, (ulong)(DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks) * 1000000 / TimeSpan.TicksPerMillisecond)
.SetString(Tag.Session, "ABC")
.SetString(Tag.Firm, "ABCDE");
WriteToConsole("Encoded message", negotiate);
}
{
IMessage negotiate = decoder.Wrap(buffer);
WriteToConsole("Decoded message", negotiate);
}
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.ToString());
}
}
private static void WriteToConsole(string prefix, IMessage negotiate)
{
Console.WriteLine(@$"
{prefix}:
{negotiate}
hmacSignature={negotiate.GetString(Tag.HMACSignature)},
accessKeyID={negotiate.GetString(Tag.AccessKeyID)},
UUID={negotiate.GetUnsignedLong(Tag.UUID)},
requestTimestamp={negotiate.GetUnsignedLong(Tag.RequestTimestamp)},
session={negotiate.GetString(Tag.Session)},
firm={negotiate.GetString(Tag.Firm)}
Memory region: {Encoding.Default.GetString(negotiate.Buffer[..negotiate.MessageLength])}
");
}
}
}