2010-08-27 12 views
6

मैं एक FIX स्वीकार्य (सर्वर) बनाने के लिए QuickFIX और C# का उपयोग कर रहा हूं। मैं उपयोगकर्ता नाम और पासवर्ड का उपयोग कर लॉगऑन करने के लिए क्लाइंट (FIX आरंभकर्ता) चाहता हूं। हालांकि, मुझे यकीन नहीं है कि मैं इसे QuickFIX में कैसे कर सकता हूं।एक क्विकफ़ीक्स स्वीकार्य में FIX लॉगऑन प्रक्रिया को अनुकूलित करना

QuickFix स्रोत कोड मैं घटनाओं के निम्न क्रम की खोज की है में डिबगिंग द्वारा:

  • QuickFix लॉगऑन सत्यापित करने के लिए Session::verify कॉल करेंगे।
  • Session::verify कंप आईडी और अनुक्रम संख्या जैसी चीजों के विभिन्न चेक निष्पादित करेगा और कुछ बिंदु पर यह निर्धारित किया जाएगा कि प्राप्त लॉगऑन मान्य है।
  • Session::verify फिर Application::fromAdmin कॉलबैक को कॉल करेगा जो मुझे लगता है कि लॉगऑन जैसी चीजों को अनुकूलित करने के लिए प्राकृतिक जगह है।
  • हालांकि, इस बिंदु पर लॉगऑन पहले से ही क्विकफ़ीएक्स द्वारा ठीक होने के लिए निर्धारित किया गया है और कॉलबैक लौटने पर स्वीकार्य द्वारा संबंधित लॉगऑन संदेश वापस कर दिया जाएगा।

मैं एक स्वीकार्य में FIX लॉगऑन प्रक्रिया को कैसे अनुकूलित करूं? क्या QuickFIX कोड को मेरा एकमात्र विकल्प संशोधित कर रहा है?

उत्तर

5

यदि आप FIX 4.3 या बाद में उपयोग कर रहे हैं, तो Logon संदेश में Password टैग हो सकता है। यदि आप पिछले संस्करण का उपयोग कर रहे हैं, तो इसे एक कस्टम टैग बनाएं और इसे शब्दकोश में जोड़ें।

fromAdmin हैंडलर में, यह जांचें कि पासवर्ड सही है (लुकअप टेबल या अन्य जगहों से)। यदि ऐसा नहीं है, तो RejectLogon अपवाद फेंक दें। यदि यह अपवाद फेंक दिया नहीं गया है, तो क्विकफ़िक्स मान लेगा कि सब कुछ ठीक है और उपयोगकर्ता को लॉग ऑन करें।

उदाहरण (अधिक विवेक चेकों की जरूरत है):

public void fromAdmin(Message message, SessionID id) 
{ 
    var logon = message as QuickFix44.Logon; 

    if (logon != null) 
    { 
     string userName = logon.getUserName().getValue(); 
     string expectedPassword = PasswordsByUser[userName]; 

     string suppliedPassword = logon.getPassword().getValue(); 

     if(expectedPassword != suppliedPassword) 
      throw new RejectLogon(); 
    }  
} 
+1

उचित उपयोगकर्ता नाम और पासवर्ड के बिना लॉगऑन संदेश प्राप्त करते समय 'एडमिमिन' में 'अस्वीकृति लॉगऑन' अपवाद फेंकना गायब टुकड़ा था। –

1

से एडमिन आपको सूचित करता है कि एक काउंटरपार्टी से आपके FIX इंजन में एक व्यवस्थापकीय संदेश भेजा जाता है। लॉगऑन संदेशों पर अतिरिक्त सत्यापन करने के लिए यह उपयोगी हो सकता है जैसे कि पासवर्ड की जांच करना। एक RejectLogon अपवाद फेंकना counterparty डिस्कनेक्ट करेगा।

सत्र सत्यापन आम तौर पर फिक्स स्टार्ट स्ट्रिंग, सेंडरकंपिड और लक्ष्य कंपिड के लिए cckcks। यदि यह 3 ठीक हैं तो सत्र स्थापित किया गया है (QuickFIXJ के पास अन्य क्षेत्र भी उपकंपी आईडी के लिए हैं)।

सत्र स्थापित होने के बाद भी संदेश स्वीकारकर्ता पर स्वीकार नहीं किया जाएगा, उस विशिष्ट सत्र के लिए, लॉगऑन प्रक्रिया पूरी होने तक। यदि आप ऐसा करते हैं तो आपको अस्वीकार कर दिया जाएगा।

तो एडमिन से आप आने वाले लॉगऑन संदेश अनुरोध की जांच कर सकते हैं और लॉगऑन संदेश में निहित वैध पासवर्ड की जांच कर सकते हैं, आप उस कनेक्शन/सत्र की अपेक्षा करते हैं।

1

फेंकने एक RejectLogon QuickFIXException पूरे कोड टूट जाता है और सत्र के बाकी व्यवधान (यदि आप एक से अधिक होती हैं)। मेरे अपने मामले में, मैं एक लॉगआउट संदेश लिखता हूं और इसे वापस प्रतिपक्ष में भेजता हूं। कोड इस तरह कुछ होगा:

public void fromAdmin(Message message, SessionID id) 
{ 
    var logon = message as QuickFix44.Logon; 

    if (logon != null) 
    { 
     string userName = logon.getUserName().getValue(); 
     string expectedPassword = PasswordsByUser[userName]; 

     string suppliedPassword = logon.getPassword().getValue(); 

     if(expectedPassword != suppliedPassword) 
      { 
       Message _logoutmess = new Message(); 
       _logoutmess.Header.SetField(new MsgType() { Tag = 35, Obj = "5" }); 
       _logoutmess.SetField(new Text("Invalid credentials")); 
       Session.SendToTarget(_logoutmess, id); 
      } 
    }  
} 
संबंधित मुद्दे