2017 © Pedro Peláez
 

library nette-websockets

Nette extension for implementing flexible yet simple WebSockets server

image

webloopio/nette-websockets

Nette extension for implementing flexible yet simple WebSockets server

  • Thursday, July 12, 2018
  • by keyBeatz
  • Repository
  • 2 Watchers
  • 0 Stars
  • 19 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 12 % Grown

The README.md

Nette Websockets

Installation

Install this package via composer, (*1)

$ composer require webloopio/nette-websockets

Setup and start

Enable needed extensions in Nette config.neon. We are using Kdyby/Console to run commands., (*2)

extensions:
    netteWebsockets: Webloopio\NetteWebsockets\DI\NetteWebsocketsExtension
    console: Kdyby\Console\DI\ConsoleExtension

To start the websockets server, execute this command from your Nette project root, (*3)

$ php www/index.php webloop:ws-server:start

You can stop the running server by pressing ctrl+C while in terminal, (*4)

Usage

Defining controllers

This package provides Controller interface so you can divide your application into logic pieces. You can think of Controllers like Presenters in Nette., (*5)

To register a new controller you can simply extends package Controller class, (*6)

<?php
use Webloopio\NetteWebsockets\Controller\Controller;

class ChatController extends Controller {

}

Then you must register your new Controller in config, (*7)

services:
    authController:
        class: ChatController
        tags: [webloopio.nettews.controller]

# OR

netteWebsockets: 
    controllers:
        - ChatController

Controller methods

We are providing two types of methods you can use, (*8)

Action

<?php
use Webloopio\NetteWebsockets\Controller\Controller;
use Webloopio\NetteWebsockets\Client\Client;
use Webloopio\NetteWebsockets\Server\Message;

class ChatController extends Controller {
    public function actionSend( Client $client, Message $message ) {
        $chatMessage = $message->getMessage(); // Hello!
        $userId = $client->getUserId();

        // some logic?
        $this->chatService->saveMessage( $userId, $chatMessage );

        // send raw WS message directly to user
        $client->send( "Hi" ); 
        // or
        $this->sendMessage( $client, "Hi again" );
    }
}

Loop

<?php
use Webloopio\NetteWebsockets\Controller\Controller;
use Webloopio\NetteWebsockets\Client\Client;
use Webloopio\NetteWebsockets\Client\ClientCollection;
use Webloopio\NetteWebsockets\Server\Message;

class ChatController extends Controller {
    public function loopDispatch( ClientCollection $clients ) {
        // we can fetch new messages from db
        $messages = $this->chatService->getNewMessages();

        if( !$messages ) {
            return;
        }

        // dispatch new messages to all users that are online
        foreach( $clients->getClients() as $client ) {
            $this->sendMessage( $client, $messages->getJson() );
        }
    }
}

Commands

Start server

$ php www/index.php webloop:ws-server:start

The Versions