<commit_before>P2RatchetBundle
===============

Version: **1.0.6**


### Installation

    "require": {
        "p2/ratchet-bundle": "dev-master"
    }


### Configuration

    p2_ratchet:
        provider: ~             # The client provider to use, null for default
        address: 0.0.0.0        # The address to receive sockets on (0.0.0.0 means receive from any)
        port: 8080              # The port the socket server will listen on


### Usage

* Implement the [ClientInterface](WebSocket/Client/ClientInterface.php) in your applications user model or document.
* Implement the [ClientProviderInterface](WebSocket/Client/ClientProviderInterface.php) in your applications user provider or managing repository.
* Set the `provider` setting to the service id of your applications client provider implementation or leave blank for the default anonymous provider.
* Implement the [ApplicationInterface](WebSocket/Server/ApplicationInterface) to listen on your own socket events ([Getting started](#getting-started)).
* Use the `{{ websocket_client(token, debug) }}` macro within your templates to enable the frontend websocket client.
* Write your client side event handler scripts. See the [Javascript API](#javascript-api) section for more detail.
* Open a terminal and start the server `app/console socket:server:start`. By default it will accept connection from *:8080 (see [Command Line Tool](#command-line-tool))


### Getting started

The [ApplicationInterface](WebSocket/Server/ApplicationInterface) acts only as an alias for symfony`s EventSubscriberInterface. Its used to detect websocket event subscribers explicitly.

Write your application as you would write a common event subscriber. The event handler methods will receive exactly one argument: a [ConnectionEvent](WebSocket/ConnectionEvent) instance, containing information about the socket connection and the payload (see [ConnectionInterface](WebSocket/Connection/ConnectionInterface) and [Payload](WebSocket/Payload) for more details).

```php
# src/Acme/Bundle/ChatBundle/WebSocket/Application.php
<?php

namespace Acme\Bundle\ChatBundle\WebSocket;

use P2\Bundle\RatchetBundle\WebSocket\Server\ApplicationInterface;

class Application implements ApplicationInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            'acme.websocket.some.event' => 'onSomeEvent'
            // ...
        );
    }

    // put your event handler code here ...
}

```

#### Service DI Configuration

Create a service definition for your websocket application. Tag your service definition with `kernel.event_subscriber` and `p2_ratchet.application` to register the application to the server.

The service definition may look like this:
```yaml
# src/Acme/Bundle/ChatBundle/Resources/config/services.yml
services:

    # websocket chat application
    websocket_chat:
        class: Acme\Bundle\ChatBundle\WebSocket\ChatApplication
        tags:
            - { name: kernel.event_subscriber }
            - { name: p2_ratchet.application }
```


### Command Line Tool

```bash
php app/console socket:server:start [port] [address]
```


### Events

| Event          | Description                                          |
|----------------|----------------------------------------------------- |
| SOCKET_OPEN    | Fired when the server received a new connection.     |
| SOCKET_CLOSE   | Fired when the socket connection was closed.         |
| SOCKET_ERROR   | Fired when an error occurred during transmission.    |
| SOCKET_MESSAGE | Fired when a message was send through a connection.  |


#### WebSocket Events

##### Client:
| Event                 | Payload            | Description           |
| --------------------- | ------------------ | ----------------------|
| `socket.auth.request` | `{ token }`        | This event is dispatched by the javascript client directly after the socket connection was opened. Its attempt is to send the value of `p2_ratchet_access_token` to the server to identify the websocket client within your application. |

##### Server:
| Event                 | Payload            | Description           |
| --------------------- | ------------------ | ----------------------|
| `socket.auth.success` | `{ client }`       | Fired on a successful authentication request. The payload contains the public user data returned by ClientInterface::jsonSerialize() |
| `socket.auth.failure` | `{ errors }`       | Fired when an error occurred during the authentication process. The payload contains the errors returned. |


### Hook-in Points

The bundle allows you to hook into the react event loop to add your own periodic timers. All you have to do is to create a class implementing (WebSocket/Server/Loop/PeriodicTimerInterface) and to tag it as "p2_ratchet.periodic_timer".
Then the timers will be added to the loop on server startup.

##### Example:
```php
# src/Acme/Bundle/ChatBundle/WebSocket/Loop/CustomTimer.php
<?php

namespace Acme\Bundle\ChatBundle\WebSocket\Loop;

use P2\Bundle\RatchetBundle\WebSocket\Server\Loop\PeriodicTimerInterface;

class CustomTimer implements PeriodicTimerInterface
{
    /**
     * Returns the interval for this timer
     *
     * @return int
     */<commit_msg>Update readme and fix namespace errors<commit_after>P2RatchetBundle
===============

Version: **1.0.5**


### Installation

    "require": {
        "p2/ratchet-bundle": "dev-master"
    }


### Configuration

    p2_ratchet:
        provider: ~             # The client provider to use, null for default
        address: 0.0.0.0        # The address to receive sockets on (0.0.0.0 means receive from any)
        port: 8080              # The port the socket server will listen on


### Usage

* Implement the [ClientInterface](WebSocket/Client/ClientInterface.php) in your applications user model or document.
* Implement the [ClientProviderInterface](WebSocket/Client/ClientProviderInterface.php) in your applications user provider or managing repository.
* Set the `provider` setting to the service id of your applications client provider implementation or leave blank for the default anonymous provider.
* Implement the [ApplicationInterface](WebSocket/Server/ApplicationInterface.php) to listen on your own socket events ([Getting started](#getting-started)).
* Use the `{{ websocket_client(token, debug) }}` macro within your templates to enable the frontend websocket client.
* Write your client side event handler scripts. See the [Javascript API](#javascript-api) section for more detail.
* Open a terminal and start the server `app/console socket:server:start`. By default it will accept connection from *:8080 (see [Command Line Tool](#command-line-tool))


### Getting started

The [ApplicationInterface](WebSocket/Server/ApplicationInterface.php) acts only as an alias for symfony`s EventSubscriberInterface. Its used to detect websocket event subscribers explicitly.

Write your application as you would write a common event subscriber. The event handler methods will receive exactly one argument: a [ConnectionEvent](WebSocket/ConnectionEvent.php) instance, containing information about the socket connection and the payload (see [ConnectionInterface](WebSocket/Connection/ConnectionInterface.php) and [Payload](WebSocket/Payload.php) for more details).

```php
# src/Acme/Bundle/ChatBundle/WebSocket/Application.php
<?php

namespace Acme\Bundle\ChatBundle\WebSocket;

use P2\Bundle\RatchetBundle\WebSocket\Server\ApplicationInterface;

class Application implements ApplicationInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            'acme.websocket.some.event' => 'onSomeEvent'
            // ...
        );
    }

    // put your event handler code here ...
}

```

#### Service DI Configuration

Create a service definition for your websocket application. Tag your service definition with `kernel.event_subscriber` and `p2_ratchet.application` to register the application to the server.

The service definition may look like this:
```yaml
# src/Acme/Bundle/ChatBundle/Resources/config/services.yml
services:

    # websocket chat application
    websocket_chat:
        class: Acme\Bundle\ChatBundle\WebSocket\ChatApplication
        tags:
            - { name: kernel.event_subscriber }
            - { name: p2_ratchet.application }
```


### Command Line Tool

```bash
php app/console socket:server:start [port] [address]
```


### Events

| Event          | Description                                          |
|----------------|----------------------------------------------------- |
| SOCKET_OPEN    | Fired when the server received a new connection.     |
| SOCKET_CLOSE   | Fired when the socket connection was closed.         |
| SOCKET_ERROR   | Fired when an error occurred during transmission.    |
| SOCKET_MESSAGE | Fired when a message was send through a connection.  |


#### WebSocket Events

##### Client:
| Event                 | Payload            | Description           |
| --------------------- | ------------------ | ----------------------|
| `socket.auth.request` | `{ token }`        | This event is dispatched by the javascript client directly after the socket connection was opened. Its attempt is to send the value of `p2_ratchet_access_token` to the server to identify the websocket client within your application. |

##### Server:
| Event                 | Payload            | Description           |
| --------------------- | ------------------ | ----------------------|
| `socket.auth.success` | `{ client }`       | Fired on a successful authentication request. The payload contains the public user data returned by ClientInterface::jsonSerialize() |
| `socket.auth.failure` | `{ errors }`       | Fired when an error occurred during the authentication process. The payload contains the errors returned. |


### Hook-in Points

The bundle allows you to hook into the react event loop to add your own periodic timers. All you have to do is to create a class implementing [PeriodicTimerInterface](WebSocket/Server/Loop/PeriodicTimerInterface.php) and to tag it as "p2_ratchet.periodic_timer".
Then the timers will be added to the loop on server startup.

##### Example:
```php
# src/Acme/Bundle/ChatBundle/WebSocket/Loop/CustomTimer.php
<?php

namespace Acme\Bundle\ChatBundle\WebSocket\Loop;

use P2\Bundle\RatchetBundle\WebSocket\Server\Loop\PeriodicTimerInterface;

class CustomTimer implements PeriodicTimerInterface
{
    /**
     * Returns the interval for this timer
     *
     * @return int
     */
{'fraction_non_alphanumeric': 0.12221273365594458, 'fraction_numerical': 0.005313597115475852, 'mean_word_length': 2.9743589743589745, 'pattern_counts': {'":': 4, '<': 7, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 4, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6449447', 'n_tokens_mistral': 2650, 'n_tokens_neox': 2553, 'n_words': 957}