MarketFactory C# API 3.0
MFClient Class Reference

An API client, which processes a single network connection. More...

Inheritance diagram for MFClient:
MFAdmin

Public Member Functions

 MFClient (string _username, string _password, string _hostname1, int _port1)
 Create a new client object. More...
 
 MFClient (string _username, string _password, string _hostname1, int _port1, string _hostname2, int _port2)
 Create a new client object (with failover). More...
 
APIResult cancelAll (int feedID, string cxlID)
 Cancel all the orders on a feed. More...
 
APIResult cancelAll (string cxlID)
 Cancel all the orders, on all _feeds. More...
 
APIResult cancelOrder (string cxlID, string clOrdID)
 Cancel a previously placed order by client order id ('clOrdID'). More...
 
APIResult cancelOrder (string cxlID, long orderID)
 Cancel a previously placed order by internal 'orderID'. More...
 
APIResult close ()
 Close the connection. More...
 
APIResult connect ()
 Connect to the first available server with user credentials. More...
 
APIFeed getFeedByID (int id)
 After a successful connection is established, you may access the server's list of _feeds, markets. More...
 
APIFeed getFeedByName (string name)
 After a successful connection is established, you may access the server's list of _feeds, markets. More...
 
APIFeed [] getFeeds ()
 After a successful connection is established, you may access the server's list of _feeds, markets. More...
 
string getHostname ()
 Returns the primary/secondary server hostname (whichever one is being used). More...
 
Queue< PingTime > getLastPingTimes ()
 
APIMarket getMarketByID (APIFeed feed, int marketID)
 After a successful connection is established, you may access the server's list of _feeds, markets. More...
 
APIMarket getMarketByName (APIFeed feed, string name)
 After a successful connection is established, you may access the server's list of _feeds, markets. More...
 
int getPort ()
 Returns the primary/secondary server port (whichever one is being used). More...
 
int getSequenceID (int feedID)
 Get the last received sequenceID after successful subscription. More...
 
string getSignature ()
 Get protocol api signature. More...
 
bool isConnected ()
 Return true if the _channel is _connected. More...
 
bool isRunning ()
 Returns true if the client is currently dispatching events (i.e., you called run()). More...
 
bool isStopRequested ()
 
APIResult join ()
 Block until the client has exited the dispatch loop. More...
 
void log (string message)
 Logs a debug message into the Whisperer server _log file. More...
 
void log (string message, LogLevel level)
 
KeyValuePair< APIResult, long > modifyOrder (string clOrdID, string clNewID, MFFloat amount, MFFloat price)
 Submit modification to an existing order. More...
 
APIResult processEvents (MFHandler _handler)
 Process all pending events in the reactor, and return as soon as reads/writes have been flushed. More...
 
KeyValuePair< APIResult, int > registerMarketComb (int feedID, int[] marketIds)
 Register for a given list of markets on a given feed. More...
 
APIResult replay (int feedID, int fromSequenceID, int toSequenceID)
 Request replay of order flow events in the range [fromSequenceID, toSequenceID=-1]. More...
 
APIResult requestSnapshot (int feedID, int marketID)
 Request a market data snapshot for the feed and market ID. More...
 
virtual APIResult run (MFHandler _handler)
 Run a loop that will continuously dispatch incoming messages to a _handler implementation. More...
 
void setDebug (bool debug)
 
void setStickySubscriptions (bool sticky)
 Enable/Disable sticky subscriptions. More...
 
void setStickySubscriptions (bool sticky, bool clearSubscriptionsOnStop)
 
void setUseHeartbeat (bool use)
 
APIResult stop ()
 Request to stop the event dispatch loop, does not disconnect the client from the server. More...
 
KeyValuePair< APIResult, long > submitOrder (string clOrdID, int feedID, int marketID, Side side, MFFloat amount, MFFloat price, OrderType ordType, TimeInForce tif)
 Submit an order. More...
 
KeyValuePair< APIResult, long > submitOrder (string clOrdID, int feedID, int marketID, Side side, MFFloat amount, MFFloat price, MFFloat stopPrice, MFFloat maxShowAmt, OrderType ordType, TimeInForce tif)
 Submit an order without minAmount (kept for backward compatibility). More...
 
KeyValuePair< APIResult, long > submitOrder (string clOrdID, int feedID, int marketID, Side side, MFFloat amount, MFFloat price, MFFloat stopPrice, MFFloat maxShowAmt, MFFloat minFillAmt, OrderType ordType, TimeInForce tif, List< KeyValuePair< string, string >> parameters)
 
KeyValuePair< APIResult, long > submitOrder (string clOrdID, int feedID, int marketID, Side side, MFFloat amount, MFFloat price, MFFloat stopPrice, MFFloat maxShowAmt, MFFloat minFillAmt, OrderType ordType, TimeInForce tif, OrderParameters parameters=null)
 Submits the order. Use an OrderParametersBuilder to construct a reusable OrderParameters object. Offers better performance if the you want to reuse the same order parameters for multiple submitOrder calls. More...
 
APIResult subscribeAllMD ()
 Subscribe to all the market data feeds. More...
 
APIResult subscribeMD (int feedID, int marketID, String clSubID)
 Subscribe to market data updates for a specific feed. More...
 
APIResult subscribeMD (int feedID, int marketID)
 Subscribe to market data updates for a specific feed. More...
 
APIResult subscribeOF (int feedID, String clSubID)
 Subscribe to trading for a specific feed. More...
 
APIResult subscribeOF (int feedID)
 Subscribe to trading for a specific feed. More...
 
void test (APITest test)
 Internal testing function. More...
 
APIResult unregisterMarketComb (int batchDefID)
 Unregister for a given list of markets on a given feed using id. More...
 
APIResult unsubscribeAll ()
 Unsubscribe all market data and trading subscriptions. More...
 
APIResult unsubscribeMD (int feedID, int marketID, String clSubID)
 Unsubscribe to market data updates for a specific feed. More...
 
APIResult unsubscribeMD (int feedID, int marketID)
 Unsubscribe to market data updates for a specific feed. More...
 
APIResult unsubscribeOF (int feedID, String clSubID)
 Unsubscribe to trading for a specific feed. More...
 
APIResult unsubscribeOF (int feedID)
 Unsubscribe to trading for a specific feed. More...
 

Static Public Member Functions

static MFClient open (string user, string pass, string host, int port)
 A convenience method which creates a new client object, attempts to connect to Whisperer, and cleans up and throws an exception if we could not connect. More...
 
static MFClient open (string user, string pass, string _hostname1, int _port1, string _hostname2, int _port2)
 A convenience method which creates a new client object, attempts to connect to Whisperer, and cleans up and throws an exception if we could not connect. More...
 

Protected Member Functions

virtual APIResult connectOne (String host, int port)
 
APIResult send (IMessage msg)
 

Protected Attributes

string _hostname1
 
string _hostname2
 
Logger _log = Logger.getLogger("com.marketfactory.api")
 
string _password
 
int _port1
 
int _port2
 
string _username
 

Detailed Description

An API client, which processes a single network connection.

There may be more than one client instance, one for each network connection. A client dispatches callbacks on a _handler interface which the client implements.

See also
MFHandler.

NOTE: Converted from MFClient.java.

Constructor & Destructor Documentation

◆ MFClient() [1/2]

MFClient ( string  _username,
string  _password,
string  _hostname1,
int  _port1 
)

Create a new client object.

A new client still needs to be connected (see connect()).

◆ MFClient() [2/2]

MFClient ( string  _username,
string  _password,
string  _hostname1,
int  _port1,
string  _hostname2,
int  _port2 
)

Create a new client object (with failover).

A new client still needs to be connected (see connect()).

Member Function Documentation

◆ setUseHeartbeat()

void setUseHeartbeat ( bool  use)

◆ setDebug()

void setDebug ( bool  debug)

◆ setStickySubscriptions() [1/2]

void setStickySubscriptions ( bool  sticky)

Enable/Disable sticky subscriptions.

Set clearSubscriptionsOnStop=false if subscriptions should persist on disconnect/stop/start.

◆ setStickySubscriptions() [2/2]

void setStickySubscriptions ( bool  sticky,
bool  clearSubscriptionsOnStop 
)

◆ isConnected()

bool isConnected ( )

Return true if the _channel is _connected.

◆ connect()

APIResult connect ( )

Connect to the first available server with user credentials.

Returns 0 if the connection attempt succeeded; returns a negative number if on failure.

Note: this should not be invoked by _handler.

◆ connectOne()

virtual APIResult connectOne ( String  host,
int  port 
)
protectedvirtual

Reimplemented in MFAdmin.

◆ close()

APIResult close ( )

Close the connection.

(This can only be called this when you're not dispatching.)

Note: this should not be invoked by _handler.

◆ isRunning()

bool isRunning ( )

Returns true if the client is currently dispatching events (i.e., you called run()).

◆ stop()

APIResult stop ( )

Request to stop the event dispatch loop, does not disconnect the client from the server.

◆ isStopRequested()

bool isStopRequested ( )

◆ join()

APIResult join ( )

Block until the client has exited the dispatch loop.

Note: this should not be invoked by _handler.

◆ run()

virtual APIResult run ( MFHandler  _handler)
virtual

Run a loop that will continuously dispatch incoming messages to a _handler implementation.

This method returns some time after a request to stop is made using stop(), or if an error occurs (e.g. the connection is broken). A zero return value indicates a normal exit via a stop request.

If the connection is broken and the client succesfully fails over to a secondary server, this dispatcher does not return; onDisconnect() and onConnect() are invoked to let the handler know that this occurred. If the reconnection attempt is not successful, the dispatcher will return an error code.

Every call to run() must be preceded by a successful connect() – this call is made for you, but only once, when a client is obtained via open().

Note: this should not be invoked by _handler.

Reimplemented in MFAdmin.

◆ processEvents()

APIResult processEvents ( MFHandler  _handler)

Process all pending events in the reactor, and return as soon as reads/writes have been flushed.

This can be used to integrate our API within a GUI toolkit's event processing loop without having to create a secondary thread.

◆ send()

APIResult send ( IMessage  msg)
protected

◆ getSignature()

string getSignature ( )

Get protocol api signature.

◆ getSequenceID()

int getSequenceID ( int  feedID)

Get the last received sequenceID after successful subscription.

Returns -2 if not subscribed. Returns -1 if there are no OF messages for the client on the feed.

◆ getFeeds()

APIFeed [] getFeeds ( )

After a successful connection is established, you may access the server's list of _feeds, markets.

If you have not yet _connected to the server this will return empty.

◆ getFeedByName()

APIFeed getFeedByName ( string  name)

After a successful connection is established, you may access the server's list of _feeds, markets.

This method will return a pointer to the feed of a given name if it exists and NULL if it does not. (this class maintains ownership to the object so do not delete it).

Returns
a pointer to the Feed of the given name or NULL if it does not exist.

◆ getFeedByID()

APIFeed getFeedByID ( int  id)

After a successful connection is established, you may access the server's list of _feeds, markets.

This method will return a pointer to the feed of a given id if it exists and NULL if it does not. (this class maintains ownership to the object so do not delete it).

Returns
a pointer to the Feed of the given id or NULL if it does not exist.

◆ getMarketByName()

APIMarket getMarketByName ( APIFeed  feed,
string  name 
)

After a successful connection is established, you may access the server's list of _feeds, markets.

This method will return a pointer to the market with a given name within the specified feed if such market exists or NULL if there is no market with the same name.

Returns
a pointer to the Market with the given name within the given feed or NULL if it does not exist.

◆ getMarketByID()

APIMarket getMarketByID ( APIFeed  feed,
int  marketID 
)

After a successful connection is established, you may access the server's list of _feeds, markets.

This method will return a pointer to the market with a given id within the specified feed if such market exists or NULL if there is no market with the same id.

Returns
a pointer to the Market with the given market id within the given feed or NULL if it does not exist.

◆ getHostname()

string getHostname ( )

Returns the primary/secondary server hostname (whichever one is being used).

Does not indicate whether a connection is in progress or successfully established.

◆ getPort()

int getPort ( )

Returns the primary/secondary server port (whichever one is being used).

Does not indicate whether a connection is in progress or successfully established.

◆ getLastPingTimes()

Queue<PingTime> getLastPingTimes ( )

◆ replay()

APIResult replay ( int  feedID,
int  fromSequenceID,
int  toSequenceID 
)

Request replay of order flow events in the range [fromSequenceID, toSequenceID=-1].

Only open-ended requests are accepted by the server.

Returns
0 if the replay request has been sent, -1 on error.

◆ subscribeMD() [1/2]

APIResult subscribeMD ( int  feedID,
int  marketID,
String  clSubID 
)

Subscribe to market data updates for a specific feed.

onSubscriptionEvent() will be called to notify that the flow of updates is ready. If the subscription is valid, onMarketData() will be called later on. The client subscription ID allows one-to-one message matching.

Returns
APIResult.OK if the subscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ subscribeMD() [2/2]

APIResult subscribeMD ( int  feedID,
int  marketID 
)

Subscribe to market data updates for a specific feed.

onSubscriptionEvent() will be called to notify that the flow of updates is ready. If the subscription is valid, onMarketData() will be called later on.

Returns
APIResult.OK if the subscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ subscribeOF() [1/2]

APIResult subscribeOF ( int  feedID,
String  clSubID 
)

Subscribe to trading for a specific feed.

onSubscriptionEvent() will be called to notify that the order gateway is ready. If the subscription is valid, it will be possible to submit and cancel orders and receive trading events.

Returns
APIResult.OK if the subscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ subscribeOF() [2/2]

APIResult subscribeOF ( int  feedID)

Subscribe to trading for a specific feed.

onSubscriptionEvent() will be called to notify that the order gateway is ready. If the subscription is valid, it will be possible to submit and cancel orders and receive trading events.

Returns
APIResult.OK if the subscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ subscribeAllMD()

APIResult subscribeAllMD ( )

Subscribe to all the market data feeds.

This is intended as a test utility; ideally you control which feeds and markets you connect to.

Returns
APIResult.OK if the subscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ unsubscribeMD() [1/2]

APIResult unsubscribeMD ( int  feedID,
int  marketID,
String  clSubID 
)

Unsubscribe to market data updates for a specific feed.

Returns
APIResult.OK if the unsubscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ unsubscribeMD() [2/2]

APIResult unsubscribeMD ( int  feedID,
int  marketID 
)

Unsubscribe to market data updates for a specific feed.

Returns
APIResult.OK if the unsubscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ unsubscribeOF() [1/2]

APIResult unsubscribeOF ( int  feedID,
String  clSubID 
)

Unsubscribe to trading for a specific feed.

Returns
APIResult.OK if the unsubscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ unsubscribeOF() [2/2]

APIResult unsubscribeOF ( int  feedID)

Unsubscribe to trading for a specific feed.

Returns
APIResult.OK if the unsubscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ unsubscribeAll()

APIResult unsubscribeAll ( )

Unsubscribe all market data and trading subscriptions.

Call this if you want to stop receiving callbacks but don't want to disconnect.

Returns
APIResult.OK if the unsubscription request has been sent, APIResult.SOCKERR_WRITING on error.

◆ registerMarketComb()

KeyValuePair<APIResult,int> registerMarketComb ( int  feedID,
int []  marketIds 
)

Register for a given list of markets on a given feed.

Returns
KeyValuePair The first member is APIResult.OK if the comb has been registered. The second member is a unique id to identify the market combination.

◆ unregisterMarketComb()

APIResult unregisterMarketComb ( int  batchDefID)

Unregister for a given list of markets on a given feed using id.

Returns
APIResult.OK if the unregistration request has been sent.

◆ requestSnapshot()

APIResult requestSnapshot ( int  feedID,
int  marketID 
)

Request a market data snapshot for the feed and market ID.

(Note that after connecting you should get a snapshot automatically, so this should be used rarely.)

Returns
0 if the snapshot request has been sent, -1 on error.

◆ submitOrder() [1/4]

KeyValuePair<APIResult,long> submitOrder ( string  clOrdID,
int  feedID,
int  marketID,
Side  side,
MFFloat  amount,
MFFloat  price,
OrderType  ordType,
TimeInForce  tif 
)

Submit an order.

Returns
-1 if the order could not be placed because it is redundant.

◆ submitOrder() [2/4]

KeyValuePair<APIResult,long> submitOrder ( string  clOrdID,
int  feedID,
int  marketID,
Side  side,
MFFloat  amount,
MFFloat  price,
MFFloat  stopPrice,
MFFloat  maxShowAmt,
OrderType  ordType,
TimeInForce  tif 
)

Submit an order without minAmount (kept for backward compatibility).

Returns
-1 if the order could not be placed because it is redundant.

◆ submitOrder() [3/4]

KeyValuePair<APIResult,long> submitOrder ( string  clOrdID,
int  feedID,
int  marketID,
Side  side,
MFFloat  amount,
MFFloat  price,
MFFloat  stopPrice,
MFFloat  maxShowAmt,
MFFloat  minFillAmt,
OrderType  ordType,
TimeInForce  tif,
List< KeyValuePair< string, string >>  parameters 
)

◆ submitOrder() [4/4]

KeyValuePair<APIResult, long> submitOrder ( string  clOrdID,
int  feedID,
int  marketID,
Side  side,
MFFloat  amount,
MFFloat  price,
MFFloat  stopPrice,
MFFloat  maxShowAmt,
MFFloat  minFillAmt,
OrderType  ordType,
TimeInForce  tif,
OrderParameters  parameters = null 
)

Submits the order. Use an OrderParametersBuilder to construct a reusable OrderParameters object. Offers better performance if the you want to reuse the same order parameters for multiple submitOrder calls.

Returns
APIResult describing the success or failure; and the orderid or 0 if the action failed.
Parameters
clOrdIDclient order identifier.
feedIDFeed identifier.
marketIDmarket identifier.
sideside
amountamount
priceprice
stopPricestop price
maxShowAmtmax show amount
minFillAmtminimum fill amount
ordTypeorder type
tiftime in force
parametersoptional OrderParameters

◆ modifyOrder()

KeyValuePair<APIResult,long> modifyOrder ( string  clOrdID,
string  clNewID,
MFFloat  amount,
MFFloat  price 
)

Submit modification to an existing order.

Returns
Pair The first member is APIResult.OK if the order has been sent. The second member is the orderID.

◆ cancelOrder() [1/2]

APIResult cancelOrder ( string  cxlID,
string  clOrdID 
)

Cancel a previously placed order by client order id ('clOrdID').

Return false if the order cannot be found locally, i.e., if the 'clOrdID' does not correspond to any previously placed order on this client interface.

◆ cancelOrder() [2/2]

APIResult cancelOrder ( string  cxlID,
long  orderID 
)

Cancel a previously placed order by internal 'orderID'.

Return false if the internal 'orderID' could not be provided.

◆ cancelAll() [1/2]

APIResult cancelAll ( int  feedID,
string  cxlID 
)

Cancel all the orders on a feed.

◆ cancelAll() [2/2]

APIResult cancelAll ( string  cxlID)

Cancel all the orders, on all _feeds.

◆ log() [1/2]

void log ( string  message)

Logs a debug message into the Whisperer server _log file.

(We use this for inserting markers for automated testing and debugging.)

◆ log() [2/2]

void log ( string  message,
LogLevel  level 
)

◆ test()

void test ( APITest  test)

Internal testing function.

Do not use this.

◆ open() [1/2]

static MFClient open ( string  user,
string  pass,
string  host,
int  port 
)
static

A convenience method which creates a new client object, attempts to connect to Whisperer, and cleans up and throws an exception if we could not connect.

Otherwise the new client object is returned;

◆ open() [2/2]

static MFClient open ( string  user,
string  pass,
string  _hostname1,
int  _port1,
string  _hostname2,
int  _port2 
)
static

A convenience method which creates a new client object, attempts to connect to Whisperer, and cleans up and throws an exception if we could not connect.

Otherwise the new client object is returned;

Member Data Documentation

◆ _username

string _username
protected

◆ _password

string _password
protected

◆ _hostname1

string _hostname1
protected

◆ _port1

int _port1
protected

◆ _hostname2

string _hostname2
protected

◆ _port2

int _port2
protected

◆ _log

Logger _log = Logger.getLogger("com.marketfactory.api")
protected
Confidential. Copyright © 2011 MarketFactory, Inc.