# API of UA Equity market
![](./introduction.jpg)<br/>
Session of managing ordering, getting data of historical bars and market, and crypto market from server for JavaScript apps.<br/>
[`IntenseLabUaEquityMarket`](references/IntenseLabUaEquityMarket.md) is API for transfer data between browser and server via WebSocket,
it has 4 channels for receiving / sending data from server: [`ExecutionDataClient`](references/clients/UaEquityExecutionDataClient.md);
[`HistoricalDataClient`](references/clients/UaEquityHistoricalDataClient.md); [`MarketDataClient`](references/clients/UaEquityMarketDataClient.md);
[`ManagementDataClient`](references/clients/UaEquityManagementDataClient.md). Also this API has a lot [messages](references/messages/Readme.md)
for receiving / sending data from server and collection of [enumerations](references/enumerations/Readme.md).
This API has methods and subscribers for authentication.

## Usage

### Initializing and connection

```js
import IntenseLabUaEquityMarket from 'intenselab-ua-equity-market';

var onAuthenticationSuccess = function(authenticationSuccess) {
    /* There code for successful authentication. */
};

var onAuthenticationFail = function(authenticationFail) {
    /* There code for failure authentication. */
};

IntenseLabUaEquityMarket.OnAuthenticationSuccessResponse.subscribe(onAuthenticationSuccess); // Subscribe onAuthenticationSuccess on this event.
IntenseLabUaEquityMarket.OnAuthenticationSuccessResponse.subscribe(onAuthenticationFail); // Subscribe onAuthenticationSuccess on this event.

IntenseLabUaEquityMarket.Connect('user', 'password', 'wss://http://pro.trader.intenselab.eu'); // Connect to server of IntenseLab.

IntenseLabUaEquityMarket.Disconnect(); // Disconnect from server.

/* Example removes functions from subscribers */
IntenseLabUaEquityMarket.OnAuthenticationSuccessResponse.unsubscribe(onAuthenticationSuccess);
IntenseLabUaEquityMarket.OnAuthenticationSuccessResponse.unsubscribe(onAuthenticationFail); 
```

### Subscription on exception of IntenseLabUaEquityMarket
```js
var onError = function(error) {
    /* There code for exception of IntenseLabUaEquityMarket. */
};

IntenseLabUaEquityMarket.OnException.subscribe(onError); // Subscribe onAuthenticationSuccess on this event.
```

### Clients of data
`IntenseLabUaEquityMarket.ExecutionDataClient` - the client of execution data, reference of [UaEquityExecutionDataClient](references/clients/UaEquityExecutionDataClient.md).<br>
`IntenseLabUaEquityMarket.HistoricalDataClient` - the client of historical data, reference of [UaEquityHistoricalDataClient](references/clients/UaEquityHistoricalDataClient.md).<br>
`IntenseLabUaEquityMarket.MarketDataClient` - the client of market data, reference of [UaEquityMarketDataClient](references/clients/UaEquityMarketDataClient.md).<br>
`IntenseLabUaEquityMarket.ManagementDataClient` - the client for management data, reference of [UaEquityManagementDataClient](references/clients/UaEquityManagementDataClient.md).<br>

### Messages
``IntenseLabUaEquityMarket.Messages`` - there is a lot of [messages](references/messages/Readme.md), example to use message:

```js
var newOrder = new IntenseLabUaEquityMarket.Messages.Execution.NewUaEquityOrder();
newOrder.Price = 115.5;
/* A lot of code for sets model of newOrder */

IntenseLabUaEquityMarket.ExecutionDataClient.PlaceOrder(newOrder);
```

### Enum
Enum is type of value or constants value, value of enumeration is [`EnumValue`](references/enumerations/EnumValue.md) and
a lot collection of [enumerations](references/enumerations/Readme.md) can be found in `IntenseLabUaEquityMarket.Enums`.<br/>
Example to use enumeration:

```js
var newOrder = new IntenseLabUaEquityMarket.Messages.Execution.NewUaEquityOrder();
newOrder.OrderSide = IntenseLabUaEquityMarket.Enums.OrderSide.Sell;
```

### Equaling enumeration
Example to use equaling enumeration:

```js
var equaled = dataReceiving.ServerState === IntenseLabUaEquityMarket.Enums.ServerState.Disconnected; // False.

var serverState = IntenseLabUaEquityMarket.Enums.ServerState.getValue(dataReceiving.ServerState); // Sets serverState for fix conflict of equaling.

equaled = serverState === IntenseLabUaEquityMarket.Enums.ServerState.Disconnected; // True.
```

Or use for high performance:

```js
var equaled = dataReceiving.ServerState.name === IntenseLabUaEquityMarket.Enums.ServerState.Disconnected.name; // True.
```

Using switch:

```js
var serverState = IntenseLabUaEquityMarket.Enums.ServerState.getValue(dataReceiving.ServerState); // Sets serverState for fix conflict of equaling.

switch (serverState) {
    case IntenseLabUaEquityMarket.Enums.ServerState.Disconnected:
        /* There code, where serverState is ServerState.Disconnected */
        break;
    case IntenseLabUaEquityMarket.Enums.ServerState.Connected:
        /* There code, where serverState is ServerState.Connected */
        break;
    case IntenseLabUaEquityMarket.Enums.ServerState.Ready:
        /* There code, where serverState is ServerState.Ready */
        break;
}
```

### When can send message from client
Subscribe on event `OnServerStateChanged` every clients, if this event called and returned value `ServerState.Ready`, then client can send message to server.

### Creating new IntenseLabUaEquityMarket
```js
var newIntenseLabUaEquityMarket = IntenseLabUaEquityMarket.CreateNewInstance();
```
