Расширение / изменение OpenIso8583.Net
Я использую отличный OpenIso8583Net для отправки / получения сообщений ISO. Однако, поскольку каждая организация имеет свое собственное определение и настройку, я хочу иметь возможность настраивать формат с минимальным прикосновением к источнику проектов, чтобы иметь возможность более легко обновляться до новых версий.
Итак, вот три настройки, с которыми я сталкиваюсь сейчас:
- Как я могу сделать
Bitmap
использоватьAsciiFormatter
вместоBinaryFormatter
? поскольку растровое изображение является частным полемAMessage
класс, я не могу получить к нему доступ, даже если я напрямую получаю новый пользовательский класс изAMessage
, И конструктор используетBinaryFormatter
по умолчанию. В настоящее время я изменил конструктор Bitmap.cs без параметров, чтобы использоватьAsciiFormatter
, - Та же самая история идет для форматера переменной длины. Оно использует
AsciiFormatter
по умолчанию. Но я бы хотел использоватьBcdFormatter
, Я изменил эту часть, чтобы использоватьBcdFormatter
по умолчанию в VariableLengthFormatter.
Я был бы признателен, если бы кто-нибудь показал мне лучший способ обработки этих настроек путем расширения, а не изменения. - Предположим, я хочу отобразить поля в файле журнала. Примером может служить то, что я отобразил в разделе " Генерация MAC" путем шифрования данных в
Fields
раздел. Прямо сейчас я должен сделатьTemplate
свойство public и используйте следующий фрагмент: for (var i = 2; i
Как я могу получить доступ к полям, не делая Template
общественности? Я хочу получить доступ к Display
метод полей в моей основной программе для целей регистрации.
1 ответ
Я только что внес изменения в проект, чтобы позволить это. Начиная с версии 0.5.0 (обновите свой пакет NuGet)
Растровое форматирование
Вы можете установить форматирование растрового изображения в шаблоне для вашего класса сообщений. Вот пример кода:
public class AsciiIsoMsg : Iso8583
{
// First you need to customise the template
// The message
private static readonly Template template;
static AsciiIsoMsg()
{
// Get the default template for the Iso8583 class
template = GetDefaultIso8583Template();
// change the bitmap formatter
template.BitmapFormatter = new AsciiFormatter();
}
// override the base class using the template and you will be using the bitmap formatter
public AsciiIsoMsg():base(template)
{
}
}
Задать длину Formatter поля
в static AsciiIso()
Метод, если вы измените таким образом, вы измените поле 2 для использования форматера длины BCD:
// Set field 2 to use BCD formatter
template[2] = FieldDescriptor.BcdVar(2, 19, Formatters.Bcd);
Журнальный файл
Чтобы отобразить сообщение в файле журнала, используйте .ToString()
метод класса сообщения, например
var msg = new AsciiIsoMsg();
msg.MessageType = Iso8583.MsgType._0200_TRAN_REQ;
msg[3] = "010000";
Console.WriteLine(msg.ToString());
Который дает:
0200:
[Fixed n 6 0006] 003 [010000]