2012-02-13 2 views
1

Я использую отличный OpenIso8583Net для отправки/получения сообщений ISO. Однако, поскольку каждая организация имеет свое собственное определение и настройку, я хочу иметь возможность настраивать формат с минимальным прикосновением к источнику проектов, чтобы он мог легче обновиться до новых версий.
Так вот три настройки я столкнулся прямо сейчас:Расширение/изменение OpenIso8583.Net

  • Как я могу сделать Bitmap использовать AsciiFormatter вместо BinaryFormatter? поскольку bitmap является частным полем класса AMessage, я не могу получить к нему доступ, даже если я непосредственно получаю новый пользовательский класс от AMessage. И конструктор по умолчанию использует BinaryFormatter. В настоящее время я модифицировал конструктор безразмерных Bitmap.cs для использования AsciiFormatter.
  • То же самое относится к форматированию переменной длины. По умолчанию используется AsciiFormatter. Но я бы хотел, чтобы он использовал BcdFormatter. Я изменил эту часть, чтобы использовать BcdFormatter по умолчанию в VariableLengthFormatter.
    Буду признателен, если кто-нибудь покажет мне лучший способ справиться с этими настройками, расширив, не изменяя.
  • Предположим, я хочу отображать поля в файле журнала. Примером может служить то, что я показал в Generating MAC by encrypting data в разделе Fields. Прямо сейчас, я должен сделать Template собственности общественности и использовать следующий фрагмент кода: для (вар я = 2; я

Как я могу получить доступ к полям, не делая Template общественности Я хочу, чтобы получить доступ к Display метод полей в моей основной программе для целей регистрации.

ответ

4

я только внес изменения в проект, чтобы позволить этому. в версии 0.5.0 (обновить пакет NuGet)

Bitmap Formatter

Вы можете установить формат растрового изображения в шаблоне для своего класса сообщений. Вот некоторые примеры кода:

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) 
    { 

    } 
} 

Set Длина Formatter поля

В методе static AsciiIso(), если изменить таким образом, вы измените поле 2, чтобы использовать длину BCD форматировщик:

// Set field 2 to use BCD formatter 
template[2] = FieldDescriptor.BcdVar(2, 19, Formatters.Bcd); 

Log File

Для отображения сообщения в лог-файл, используйте метод .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] 
+1

Спасибо Джону. Отличная работа с проектом. Мне просто нравится :) – Kamyar

+0

Только что заметил, что 'LengthFormatter' of FieldDescriptor не имеет сеттера. Я вручную добавил установщик, пока вы не обновите источник. Благодарю. – Kamyar