# cxf-events


> 💬 Unified events for CXF extensions

# Motivation

Games exchange messages in different formats and with different IDs. For example, a login command looks different on BigFarm and Empire. `cxf-events` normalizes & standardizes basic events in a game-agnostic way. Your CXF extension can subscribe to `cxf.*` events and work in almost all games.

```
+------------------+
|                  |
| LOGIN_BASIC_DATA |--->------+
|                  |       becomes
+------------------+          ↓
                      +---------------+
                      |               |
                      |   cxf.login   |---→ your CXF Extension
                      |               |
                      +---------------+
+------------------+          ↑
|                  |       becomes
|        gbd       |--->------+
|                  |
+------------------+
```

# Usage
+ Include `@goodgamestudios/cxf-events` in `@goodgamestudios/cxf-plugins`

```js
// Wait for cxf to be ready
require('@goodgamestudios/cxf-ready').then(cxf => {
  // Subscribe to relevant events
  cxf.on(CxfEvents.Login, loginData => {
    // do something on login
  })
})
```

# Events

## `cxf.login`
Emitted after a successful player login.
In addition to sending the login arguments with the event, `cxf.login` also stores them in `cxf.playerId`, `cxf.instanceId`, `cxf.networkId`, `cxf.gameId` and `cxf.language`.

+ **Event ID** `cxf.login`
+ **Arguments** ` { playerId, instanceId, networkId, gameId, language }`

#### Example
```js
require('@goodgamestudios/cxf-ready').then(cxf => {
  cxf.on(CxfEvents.Login, loginData => {
    // do something on login
  })
})
```

# How to listen for new game events

## Bigfarm
To be able to listen for a new event from bigfarm, you will need to either listen to its descriptive event or its ID event. For instance:
If you want to listen for the SUBSCRIPTION_INFO event (ID 460) you will need to:

To be able to listen for a new event from bigfarm, you will need to either listen to its descriptive event and also its ID event. For instance,
if you want to listen for the SUBSCRIPTION_INFO event (ID 460) you will need to:

```js
// Just listening for this event is not enough
cxf.once('SUBSCRIPTION_INFO', (e: BigfarmEvent<BigfarmSubscriptionEvent>) => {
  // Your code here
});
// Subscribing to event id, so the first event will be fowarded to CXF
cxf.on('460', () => {});
```