Skip to content

Commit

Permalink
Simplify forwarding of OCPP messages that might have a json __AND__ a…
Browse files Browse the repository at this point in the history
… binary representation
  • Loading branch information
ahzf committed Aug 17, 2024
1 parent 90b82c2 commit 503dadb
Show file tree
Hide file tree
Showing 97 changed files with 1,647 additions and 470 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@
namespace cloud.charging.open.protocols.OCPPv2_1
{

public enum SerializationFormatGroup
{
JSON,
Binary
}


/// <summary>
/// Extensions methods for OCPP Request/Response Serialization Formats.
/// </summary>
Expand Down Expand Up @@ -142,18 +149,29 @@ public static Boolean TryParse(UInt16 Number, out SerializationFormats Serializa
switch (Number)
{

case 1:
case 10:
SerializationFormat = SerializationFormats.JSON;
return true;


case 50:
SerializationFormat = SerializationFormats.JSON_UTF8_Binary;
return true;


case 100:
SerializationFormat = SerializationFormats.BinaryCompact;
return true;

case 2:
case 101:
SerializationFormat = SerializationFormats.BinaryTextIds;
return true;

case 3:
case 102:
SerializationFormat = SerializationFormats.BinaryTLV;
return true;


default:
SerializationFormat = SerializationFormats.Unkown;
return false;
Expand Down Expand Up @@ -245,14 +263,20 @@ public static Boolean TryParse(ReadOnlySpan<Byte> Slice, out SerializationFormat
/// <summary>
/// Return a string representation of the given serialization format.
/// </summary>
/// <param name="SerializationFormats">A serialization format.</param>
public static String AsText(this SerializationFormats SerializationFormats)

=> SerializationFormats switch {
SerializationFormats.BinaryCompact => "Compact",
SerializationFormats.BinaryTextIds => "TextIds",
SerializationFormats.BinaryTLV => "TagLengthValue",
_ => "unknown"
/// <param name="SerializationFormat">A serialization format.</param>
public static String AsText(this SerializationFormats SerializationFormat)

=> SerializationFormat switch {

SerializationFormats.JSON => "JSON",
SerializationFormats.JSON_UTF8_Binary => "JSON_UTF8_Binary",

SerializationFormats.BinaryCompact => "Compact",
SerializationFormats.BinaryTextIds => "TextIds",
SerializationFormats.BinaryTLV => "TagLengthValue",

_ => "unknown"

};

#endregion
Expand All @@ -262,14 +286,21 @@ public static String AsText(this SerializationFormats SerializationFormats)
/// <summary>
/// Return a numeric representation of the given serialization format.
/// </summary>
/// <param name="SerializationFormats">A serialization format.</param>
public static UInt16 AsNumber(this SerializationFormats SerializationFormats)

=> SerializationFormats switch {
SerializationFormats.BinaryCompact => 1,
SerializationFormats.BinaryTextIds => 2,
SerializationFormats.BinaryTLV => 3,
_ => 0
/// <param name="SerializationFormat">A serialization format.</param>
public static UInt16 AsNumber(this SerializationFormats SerializationFormat)

=> SerializationFormat switch {

SerializationFormats.JSON => 10,

SerializationFormats.JSON_UTF8_Binary => 50,

SerializationFormats.BinaryCompact => 100,
SerializationFormats.BinaryTextIds => 101,
SerializationFormats.BinaryTLV => 102,

_ => 0

};

#endregion
Expand All @@ -279,11 +310,11 @@ public static UInt16 AsNumber(this SerializationFormats SerializationFormats)
/// <summary>
/// Return a binary representation of the given serialization format.
/// </summary>
/// <param name="SerializationFormats">A serialization format.</param>
public static Byte[] AsBytes(this SerializationFormats SerializationFormats)
/// <param name="SerializationFormat">A serialization format.</param>
public static Byte[] AsBytes(this SerializationFormats SerializationFormat)
{

var result = BitConverter.GetBytes(SerializationFormats.AsNumber());
var result = BitConverter.GetBytes(SerializationFormat.AsNumber());

if (BitConverter.IsLittleEndian)
Array.Reverse(result);
Expand All @@ -294,49 +325,76 @@ public static Byte[] AsBytes(this SerializationFormats SerializationFormats)

#endregion


#region Group(this SerializationFormat)

/// <summary>
/// Whether the given serialization format is TEXT or BINARY.
/// </summary>
/// <param name="SerializationFormat">A serialization format.</param>
public static SerializationFormatGroup Group(this SerializationFormats SerializationFormat)

=> SerializationFormat switch {

SerializationFormats.JSON_UTF8_Binary or
SerializationFormats.BinaryCompact or
SerializationFormats.BinaryTextIds or
SerializationFormats.BinaryTLV
=> SerializationFormatGroup.Binary,

_ => SerializationFormatGroup.JSON

};

#endregion


}


/// <summary>
/// OCPP Request/Response Serialization Formats.
/// </summary>
public enum SerializationFormats : Byte
public enum SerializationFormats : UInt16
{

/// <summary>
/// Unknown format
/// </summary>
Unkown,
Unkown = 0,

/// <summary>
/// The OCPP request/response default format.
/// </summary>
Default,
Default = 1,


/// <summary>
/// Explicitly send this request/response as OCPP-defined JSON.
/// </summary>
JSON,
JSON = 10,


/// <summary>
/// Explicitly send this request/response as OCPP-defined JSON, but within a binary HTTP Web Socket frame.
/// </summary>
JSON_UTF8_Binary,
JSON_UTF8_Binary = 50,


/// <summary>
/// Compact format
/// </summary>
BinaryCompact,
BinaryCompact = 100,

/// <summary>
/// TextId format
/// </summary>
BinaryTextIds,
BinaryTextIds = 101,

/// <summary>
/// Extensible Tag-Length-Value (TLV) format
/// </summary>
BinaryTLV
BinaryTLV = 102

}

Expand Down
Loading

0 comments on commit 503dadb

Please sign in to comment.