The article describes usage of managers in FCLite.
Managers create convenient interfaces, provide the following functionality:
Initialization of business entities
Keeps business entities with up-to-date values in memory.
Raises events when a business entities changes
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
typescriptjavascriptconst 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
typescriptjavascriptconst 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
typescriptjavascriptconst 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);