All Projects → MatviiB → Notifier

MatviiB / Notifier

Licence: mit
NO LIBRARIES socket per page bridge for your Laravel application. (CLIENT PART INCLUDED)

Projects that are alternatives of or similar to Notifier

Angular5.2 Laravel5.6
Angular 5.2 and Laravel 5.6 Authentication and CRUD
Stars: ✭ 17 (-70.18%)
Mutual labels:  laravel-application, laravel, laravel-5-package, laravel5
Laravel Shop
Laravel 电商实战教程的项目代码
Stars: ✭ 2,341 (+4007.02%)
Mutual labels:  laravel-application, laravel, laravel5
Blogetc
Easily add a full Laravel blog (with built in admin panel and public views) to your laravel project with this simple package.
Stars: ✭ 198 (+247.37%)
Mutual labels:  laravel-application, laravel, laravel-5-package
Laravel Gitscrum
GitScrum is a Project Management Tool, developed to help entrepreneurs, freelancers, managers, and teams Skyrocket their Productivity with the Agile methodology and Gamification.
Stars: ✭ 2,686 (+4612.28%)
Mutual labels:  laravel-application, laravel, laravel-5-package
Laravel Database Encryption
A package for automatically encrypting and decrypting Eloquent attributes in Laravel 5.5+, based on configuration settings.
Stars: ✭ 238 (+317.54%)
Mutual labels:  laravel, laravel-5-package, laravel5
Laravel Vue Tasks
📝 Task app built with Laravel 5.5 and Vue 2
Stars: ✭ 66 (+15.79%)
Mutual labels:  laravel-application, laravel, laravel5
Laracrud
Laravel Code Generator based on MySQL Database
Stars: ✭ 238 (+317.54%)
Mutual labels:  laravel-application, laravel, laravel-5-package
Laravel Pdf
A Simple package for easily generating PDF documents from HTML. This package is specially for laravel but you can use this without laravel.
Stars: ✭ 79 (+38.6%)
Mutual labels:  laravel, laravel-5-package, laravel5
Lang
List of 78 languages for Laravel Framework 4, 5, 6, 7 and 8, Laravel Jetstream , Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova and Laravel Spark.
Stars: ✭ 6,285 (+10926.32%)
Mutual labels:  laravel-application, laravel, laravel5
Laravel Widgetize
A minimal package to help you make your laravel application cleaner and faster.
Stars: ✭ 791 (+1287.72%)
Mutual labels:  laravel, laravel-5-package, laravel5
Larrock Core
Core components for LarrockCMS
Stars: ✭ 46 (-19.3%)
Mutual labels:  laravel, laravel-5-package, laravel5
Auth Tests
Always-current tests for Laravel's authentication system. Curated by the community.
Stars: ✭ 230 (+303.51%)
Mutual labels:  laravel, laravel-5-package, laravel5
Facebook
📨 Facebook Notifications Channel for Laravel
Stars: ✭ 120 (+110.53%)
Mutual labels:  laravel, laravel-5-package, notifications
Project
⭐️ Antares Project Application Skeleton. This is the very first place you should start. It allows you to create a brand new awesome project in easy few steps.
Stars: ✭ 84 (+47.37%)
Mutual labels:  laravel-application, laravel, notifications
Eye
Eyewitness.io package for Laravel 5 applications
Stars: ✭ 114 (+100%)
Mutual labels:  laravel, laravel-5-package, laravel5
Learn Laravel
Laravel 学习资料和开源项目集
Stars: ✭ 229 (+301.75%)
Mutual labels:  laravel-application, laravel, laravel5
Laravel Email Verification
Laravel package to handle user verification using an activation mail
Stars: ✭ 63 (+10.53%)
Mutual labels:  laravel, laravel-5-package, laravel5
Laravel Desktop Notifier
💻 Send notifications to your desktop from your Laravel Artisan Commands. An JoliNotif wrapper for Laravel.
Stars: ✭ 333 (+484.21%)
Mutual labels:  laravel, notifications, notifier
Barryvanveen
📰 Personal blog of Barry van Veen. Focuses on Laravel Framework, website optimization and natural computing.
Stars: ✭ 24 (-57.89%)
Mutual labels:  laravel-application, laravel, laravel5
Laravel Settings
Simple Settings package for a laravel application
Stars: ✭ 45 (-21.05%)
Mutual labels:  laravel, laravel-5-package, laravel5

build passed code-intelligence license downloads

Base concepts

You don't need socket.io, pusher.js, jQuery, bootstrap, node.js, vue.js to start using this package.

This package can be used for sending data synchronously to each user.

This package sends data ONLY to named routes declared as GET.

You will get your own socket server on back-end and your clients will connect to it directly, without any third-party requests to be send.

You will have pretty notifications from scratch.

To view available routes you can run php artisan notifier:init show command. It will display available routes in the table and initiate the socket server.

Code Description
event(new Notify($data)); - send to all routes.
event(new Notify($data, $routes)); - send to routes in $routes array.
event(new Notify($data, $routes, $users)); - send to routes in $routes and only to users in $users.

Installation

composer require matviib/notifier

For Laravel < 5.5 add provider to config/app.php

MatviiB\Notifier\NotifierServiceProvider::class,

For publish notifier config file and js file for notifications out of the box:

php artisan vendor:publish

and choose "Provider: MatviiB\Notifier\NotifierServiceProvider" if requested.

Starting server

Add worker daemon for php artisan notifier:init process with Supervisor,

OR

Just run php artisan notifier:init in terminal.

If you use SSL you need add to your nginx configuration file to server block:

    location /websocket {
        proxy_pass http://<your-domain>:<port>; #server host and port
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        # Timeout configuration.
        proxy_redirect off;
        proxy_connect_timeout  300;
        proxy_send_timeout     300;
        proxy_read_timeout     300;
   }

Usage

At first you need to add @include('notifier::connect') before using socket.addEventListener() in your view or main layout to use it on ALL pages.

If you want use notifications from the scratch you need to add @include('notifier::connect_and_show') to the view.

Anywhere in your back-end add next event:

event(new Notify($data));

On front-end part add event listener

<script>
    socket.addEventListener('message', function (event) {
        console.log('Message from server', event.data);
    });
</script>

Use built-in notifications.

Built-in notifications is a vue.js with vue-notifications plugin. If you already use vue.js in application you can just add this plugin yourself.

Mapping $data parameter.
Parameter Description
'note' => 1, - use notes true
`'type' => 'warn success
'title' => 'TEXT' - title of the note
'text' => 'Lorem ipsum' - note's body
Positioning.

In config/notifier.php you can modify position where notifications will be shown.

// Horizontal options: left, center, right
// Vertical options: top, bottom
'position' => [
        'vertical' => 'bottom',
        'horizontal' => 'right'
    ]

Security

This package allows one way messages - only from server to client.

All messages from client after connecting will be ignored.

From server side messages protected with socket_pass parameter from notifier config.

Channels to users protected with unique hash.

Example with charts

After installation add to web.php

Route::get('chart', function () {
    return view('chart');
})->name('chart');

create view /resources/views/chart.blade.php

<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Chart</title>
</head>
<body>
<canvas id="myChart"></canvas>
@include('notifier::connect')
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<script type="text/javascript">

    var data = [12, 19, 3, 17, 6, 3, 7, 45, 60, 25];

    var myChart = new Chart(document.getElementById('myChart'), {
        type: 'line',
        data: {
            labels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
            datasets: [{
                label: 'example',
                data: data
            }]
        }
    });

    socket.addEventListener('message', function (event) {
        myChart.data.datasets[0].data.splice(0, 1);
        myChart.data.datasets[0].data.push(JSON.parse(event.data).data.value);
        myChart.update();
    });
</script>
</body>
</html>

In .env fix your APP_URL APP_URL=http://<<U APP URL>>

Create test command php artisan make:command Test

use MatviiB\Notifier\Events\Notify; 

...

protected $signature = 'test';

public function handle()
    {
        while ($i < 100) {
            $value = random_int(10, 100);
            $data['value'] = $value;
            event(new Notify($data, ['chart']));
            usleep(rand(100000, 500000));
        }
}

Run: php artisan notifier:init

Run in another shell: php artisan test

Open /chart page.

Usage Example

Send new values to chart on some page synchronously to each user:

event(new Notify($data, ['chart']));

Or to users with id 3 and 5: event(new Notify($data, ['chart'], [3, 5]));

laravel socket server

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].