> For the complete documentation index, see [llms.txt](https://equ8.gitbook.io/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://equ8.gitbook.io/documentation/integration-guide/polling-server-events.md).

# Polling server events

This is the last step of the server integration! 😆

**Events must be polled as often as possible, preferably every “server frame”.**

The server-side events are:

* `equ8_event_id_send_request`. EQU8 has data to send.
* `equ8_event_id_status`. Status for the given user has changed (banned for instance).

If we received a `equ8_event_id_send_request` event, EQU8 has data that should be sent to the client.

If we received a `equ8_event_id_status` event, the status for the given client has changed; we simply re-run the `user_is_allowed_to_play`-function.

**EQU8 will NEVER send more than `256` (`0x100`) bytes in a single packet.**

#### C/C++

{% tabs %}
{% tab title="C/C++" %}

```cpp
switch(equ8_sm_poll_event(c.unique_id(), &equ8_data))
{
    case equ8_event_id_send_request:
    {
        std::cout << "EQU8 Data Send Request: user: '"
            << c.unique_id() << "' size: "
            << equ8_data.send_request.size << std::endl;
        packet_equ8_data session{
            equ8_data.send_request.payload,
            equ8_data.send_request.size };
        //
        // Send the EQU8 data to the client
        //
        send_packet(c, &session);
        break;
    }
    case equ8_event_id_status:
    {
        if(!user_is_allowed_to_play(c.remote_in(), c.unique_id(),
            equ8_data.status.action))
        {
            std::cout << "Client '" << c.unique_id()
                << "' kicked (action: "
                << equ8_data.status.action << ")" << std::endl;
            return false;
        }
        break;
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
switch (equ8.session_manager.poll_event(c.name, ev))
{
    case equ8.equ8_event_id.send_request:
    {
        Console.WriteLine(
            "EQU8 Data Send Request: user: '{0}' size: {1}",
            c.name, ev.get_send_event_size());
        send_packet(c, new packet_equ8_data(
            ev.duplicate_send_event()));
    }
    break;
    case equ8.equ8_event_id.status:
    {
        var action = ev.get_status_action();
        if (!user_is_allowed_to_play(c.addr, c.name, action))
        {
            Console.WriteLine("Client '{0}' kicked (action: {1})",
                c.name, action);
            remove_client(i);
        }
    }
    break;
}
```

{% endtab %}
{% endtabs %}
