Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Struct for binary message serializiation/deserialization

Tags:

c#

binary

I'm new to binary in C# and have a question on the best way to do this. I have an application I'm trying to communicate that has a specific binary message format. It has to begin with a B8 hex code, and end with a BB hex code, with the binary message in between. What is the best way of being able to take a byte buffer and cast it to the message for easy access to the message properties? I'd imagine a struct, but in all honesty i don't really know.

EDIT:

The reason i don't want it in binary is so that I can easliy use the data in my application. For example, i'd like to convert the binary bits that represent a command type to an enum. Like this (just a representation of what I'd like to do):

struct CommandMessage
{
    public CommandType Command { get; set; }
    public object Data { get; set; }
}

enum CommandType
{
    UserJoined,
    MessageReceived
}
like image 439
LordZardeck Avatar asked Nov 12 '22 07:11

LordZardeck


1 Answers

I would suggest to use protobuf-net for DTO serialization.

So, define some entity e.g Package (CommandMessage in your sample) which has

public Command Command;

public byte[] Data; (serialized with protobuf)

Based on Command you will be able to deserialize Data to concrete DTO type using protobuf.

If your message should start with special prefix, you can handle this in Package as well. Also, Package should handle writing/reading itself to/from binary stream or buffers (that's pretty strait forward).

e.g package.WriteTo(buffer) produces [BB,Command,Data,B8]. Same for package.ReadFrom()

like image 143
illegal-immigrant Avatar answered Nov 15 '22 06:11

illegal-immigrant