Jun 9, 2018
0
Level 1
Listening socket via Laravel Events
Hi all. I have a code look like this
Event File:
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class ApiDataListener implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
/**
* Create a new event instance.
* @param $event string
* @param $data array
* @return void
*/
public function __construct($event,$data)
{
$this->data = [
'event' => $event,
'data' => $data
];
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return ['api-data'];
}
}
JS file
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('api-data');
redis.on('message', function(channel, message) {
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});
http.listen(3000, function(){
console.log('Listening on Port 3000');
});
And in my blade template I have a javascript code look like this
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
<script src="{{ asset('js/app.js') }}"></script>
<script>
var socket = io.connect('http://even.loc:3000');
socket.on('api-data:App\Events\ApiDataListener', function (data) {
console.log(data);
});
</script>
So I have an custom artisan command which sent my new data by socket via event function
event( new \App\Events\ApiDataListener( $event,
[ 'model' => $data ]
) );
All is working good. But I cant send data to my socket listener to process my data
I think I need to have a code look like this, but I cant get my data in my listener'
socket.emit('event-name',{data:data})
I apologize if the question is not relevant, I just never worked with the socket.
Please or to participate in this conversation.