Je me connecte à plusieurs API qui utilisent toutes FXI4.2 mais maintenant je souhaite me connecter à une autre qui utilise sa propre version de FIX4.4.QuickFix/N comment mieux gérer plusieurs versions FIX
J'ai une application de routeur qui envoie des ordres aux différentes API et il semblerait que j'ai besoin de dupliquer toutes mes méthodes (par exemple OnMessage(), NewSingleOrder etc) pour faire face aux 2 protocoles FIX.
Y a-t-il une façon plus intelligente de faire ceci pour éviter cette duplication? Modérateurs: Je sais que c'est un peu ouvert maintenant, mais je vais ajouter quelques extraits de code une fois que je reçois un feedback initial.
public void OnMessage(QuickFix.FIX42.MarketDataIncrementalRefresh message, SessionID sessionID)
{
int count = message.NoMDEntries.getValue();
QuickFix.FIX42.MarketDataSnapshotFullRefresh.NoMDEntriesGroup repeatingMDItem = new QuickFix.FIX42.MarketDataSnapshotFullRefresh.NoMDEntriesGroup();
DateTime sourceDT = DateTime.ParseExact(message.Header.GetField(52), "yyyyMMdd-HH:mm:ss.fff", ci);
DateTime dt = TimeZoneInfo.ConvertTimeToUtc(sourceDT, utcZone);
DateTime nowUTC = TimeZoneInfo.ConvertTime(DateTime.UtcNow, utcZone, utcZone);
TimeSpan diffToUK = nowUTC - dt;
for (int i = 1; i <= count; i++)
{
message.GetGroup(i, repeatingMDItem);
String symbol = repeatingMDItem.GetField(55);
int tickBandNoDecPlaces = int.Parse(repeatingMDItem.GetField(5071));
masterForm.MDATA.AddData(symbol, tickBandNoDecPlaces, sourceDT);
}
}
FIX44 acceptera-t-il tous les FIX précédents?
Comment puis-je ignorer la version FIX?
public void OnMessage(QuickFix.FIX42.MarketDataSnapshotFullRefresh message, SessionID sessionID)
{
OnMessageAgnostic(message, sessionID);
}
public void OnMessage(QuickFix.FIX44.MarketDataSnapshotFullRefresh message, SessionID sessionID)
{
OnMessageAgnostic(message, sessionID);
}
public int FixVersion(QuickFix.Message message)
{
switch (message.GetString(8)) // BeginString
{
case Values.BeginString_FIX42:
return 42;
case Values.BeginString_FIX44:
return 44;
default:
throw new NotSupportedException("This version of FIX is unsupported");
}
}
public void OnMessageAgnostic(QuickFix.Message message, SessionID sessionID)
{
int count;
if (FixVersion(message)==44)
{
count = ((QuickFix.FIX44.MarketDataSnapshotFullRefresh)message).NoMDEntries.getValue();
}
}
Oui, je vois. En outre, au lieu de votre classe MarketDataIncrementalRefreshHandler(). Je pourrais juste passer comme Quickfix.Message et jeter quand j'ai besoin de la version spécifique ... – ManInMoon
Vous pourriez, oui. Cela va rendre votre classe dérivée de 'Application' très grande, cependant. Et vous ne pouvez lancer à partir de 'Quickfix.Message' après que le message a été fissuré. –
voir modifier s'il vous plaît. Cela me permet de lancer seulement quand j'ai besoin de traiter des bits spécifiques à la version. Le reste du code peut être le même – ManInMoon