2010-08-27 28 views
6

Tôi đang sử dụng QuickFIX và C# để tạo trình chấp nhận FIX (máy chủ). Tôi muốn khách hàng (người khởi xướng FIX) đăng nhập bằng tên người dùng và mật khẩu. Tuy nhiên, tôi không chắc chắn làm thế nào tôi có thể làm điều đó trong QuickFIX.Tùy chỉnh quy trình đăng nhập FIX trong trình chấp nhận QuickFIX

Bằng cách gỡ lỗi vào mã nguồn QuickFix tôi đã phát hiện ra chuỗi sự kiện sau:

  • QuickFix sẽ gọi Session::verify để xác minh đăng nhập.
  • Session::verify sẽ thực hiện các kiểm tra khác nhau về những thứ như số ID và số thứ tự của comp và tại một số điểm xác định rằng đăng nhập nhận được là hợp lệ.
  • Session::verify sau đó sẽ gọi số gọi lại là Application::fromAdmin mà tôi cho là địa điểm tự nhiên để tùy chỉnh những thứ như đăng nhập.
  • Tuy nhiên, tại thời điểm này đăng nhập đã được xác định là OK bởi QuickFIX và một thông báo đăng nhập tương ứng sẽ được trả về bởi người chấp nhận khi trả về cuộc gọi lại.

Làm cách nào để tùy chỉnh quy trình đăng nhập FIX trong một người chấp nhận? Đang sửa đổi mã QuickFIX tùy chọn duy nhất của tôi?

Trả lời

5

Nếu bạn đang sử dụng FIX 4.3 trở lên, thông báo Logon có thể có thẻ Password. Nếu bạn đang sử dụng phiên bản trước, hãy đặt nó làm thẻ tùy chỉnh và thêm nó vào từ điển.

Trong trình xử lý fromAdmin, hãy kiểm tra xem mật khẩu có đúng không (từ bảng tra cứu hoặc ở nơi khác). Nếu không, hãy ném một ngoại lệ RejectLogon. Nếu ngoại lệ này không được ném, QuickFix sẽ cho rằng mọi thứ đều ổn và đăng nhập người dùng.

Ví dụ (cần thêm kiểm tra sự tỉnh táo):

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

Ném ngoại lệ 'Từ chối đăng nhập' vào' từAdmin' khi nhận được thông báo đăng nhập không có tên người dùng và mật khẩu thích hợp là phần bị thiếu. –

1

từAdmin thông báo cho bạn khi tin nhắn quản trị được gửi từ đối tác đến công cụ FIX của bạn. Điều này có thể hữu ích để thực hiện xác nhận thêm về các thông điệp đăng nhập như để kiểm tra mật khẩu. Việc ném ngoại lệ RejectLogon sẽ ngắt kết nối đối tác.

Xác minh phiên thường ckecks cho chuỗi bắt đầu FIX, SenderCompID và mục tiêu CompID. Nếu 3 này là tốt thì phiên được thiết lập (QuickFIXJ có các trường khác cũng cho id subcomp).

Ngay cả sau khi phiên đã được thiết lập thư sẽ không được chấp nhận tại người chấp nhận, cho phiên cụ thể đó, cho đến khi quá trình đăng nhập đã hoàn tất. Bạn sẽ nhận được một từ chối nếu bạn cố gắng như vậy.

Vì vậy, trong fromAdmin bạn có thể kiểm tra yêu cầu thông báo đăng nhập đến và kiểm tra mật khẩu hợp lệ, có trong thông báo đăng nhập, bạn mong đợi kết nối/phiên đó.

1

Ném một RejectLogon QuickFIXException phá vỡ toàn bộ mã và làm gián đoạn phần còn lại của phiên giao dịch (nếu bạn có nhiều hơn một). Trong trường hợp của riêng tôi, tôi soạn một thông báo đăng xuất và gửi lại cho đối tác. Mã sẽ giống như sau:

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); 
      } 
    }  
} 
Các vấn đề liên quan