How to Use Managers in FCLite

Brief

The article describes usage of managers in FCLite.

Details

Managers create convenient interfaces, provide the following functionality:

Starting Managers

To ensure correct usage of table manager, please follow these steps:

1. Login (see the tutorial [here](./gettingstarted/performing_login.md)).

2. After changing the status to connected execute 'refresh' command for the manager of the business entity you need (Offers, Orders, Open Positions etc).

3. Wait for Loaded.

Starting Managers Hide

typescriptjavascript
const loadManager = ( manager: IDataManager): Promise<IDataManager> => { return new Promise((resolve, reject) => { const listener: IDataManagerStateChangeListener = { onStateChange: state => { if (state.isLoaded()) { manager.unsubscribeStateChange(listener); resolve(manager); } else if (state.hasError()) { manager.unsubscribeStateChange(listener); reject(state.getError()); } }, }; manager.subscribeStateChange(listener); manager.refresh(); }); }; await loadManager(session.getInstrumentsManager());

Dependencies between business entities

Some business entities contain composite information that depends on other business entities. If you do not update all dependent managers, you will receive empty or incorrect information (For example, no dividends or commissions)

Target manager

Dependent managers

---

---

IInstrumentsManager

-

IClientMessagesManager

-

ILeverageProfilesManager

IInstrumentsManager

IClosedPositionsManager

IInstrumentsManager

IRolloverProfilesManager

IInstrumentsManager

IAccountCommissionsManager

IInstrumentsManager

IOffersManager

IInstrumentsManager

IPriceHistoryManager

IInstrumentsManager

IOrdersManager

IOffersManager

IOpenPositionsManager

IAccountCommissionsManager, IRolloverProfilesManager, IInstrumentsManager, ILeverageProfilesManager

IAccountsManager

IOpenPositionsManager

IPositionsSummaryManager

IOpenPositionsManager

Dependencies between business entities Hide

typescriptjavascript
const loadManager = ( manager: IDataManager): Promise<IDataManager> => { return new Promise((resolve, reject) => { const listener: IDataManagerStateChangeListener = { onStateChange: state => { if (state.isLoaded()) { manager.unsubscribeStateChange(listener); resolve(manager); } else if (state.hasError()) { manager.unsubscribeStateChange(listener); reject(state.getError()); } }, }; manager.subscribeStateChange(listener); manager.refresh(); }); }; await Promise.all([ loadManager(session.getInstrumentsManager()), loadManager(session.getOffersManager()), ]);

Receiving Notifications about business entities changes

To receive notifications about business entities changes you should:

1. Create a business entity change listener class that implements corresponding interface (IOpenPositionChangeListener, IOrderChangeListener, IPositionsSummaryChangeListener etc).

2. Subscribe business entity change listener to a change events.

3. Unsubscribe business entity change listener from that manager event when you are done.

Subscribe to offer change Hide

typescriptjavascript
const loadManager = ( manager: IDataManager): Promise<IDataManager> => { return new Promise((resolve, reject) => { const listener: IDataManagerStateChangeListener = { onStateChange: state => { if (state.isLoaded()) { manager.unsubscribeStateChange(listener); resolve(manager); } else if (state.hasError()) { manager.unsubscribeStateChange(listener); reject(state.getError()); } }, }; manager.subscribeStateChange(listener); manager.refresh(); }); }; await Promise.all([ loadManager(session.getInstrumentsManager()), loadManager(session.getOffersManager()), ]); const offerChangeListener: IOfferChangeListener = { onChange: function (offerInfo: OfferInfo): void { let offer = session.getOffersManager().getOfferById(offerInfo.getOfferId()); console.table([offer]); }, onAdd: function (offerInfo: OfferInfo): void { let offer = session.getOffersManager().getOfferById(offerInfo.getOfferId()); console.table([offer]); } } session.getOffersManager().subscribeOfferChange(offerChangeListener);

back