laravel,socketio and redis chat appliaction, can't make the first request after page reload to emit the...
i have been trying to solve this problem since long time but i found nothing,
i am trying to build a simple private chat app using
- Laravel
- Socketio
- Redis,
i built the chat but i have a bug that i can't fix yet,
the problem is when i first open the chat or on page reload when i send the first message it shows up to the receiver at the right time but it doesn't show to its owner although it's emitted to both users , then every other message shows up to both users at the right time , and here is the code,
also the errorevent does the same, it's supposed to send the error message to the its owner but it does not send the first message through socketio .
server.js
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
var rediserror = new Redis();
redis.psubscribe('private-message-channel.*' , function(err , count) {
console.log('error is '+err+' and count is '+count);
});
redis.on('pmessage' , function(pattern ,channel , message) {
console.log('channel is '+channel+' and message is '+message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
rediserror.psubscribe('private-error-channel.*' , function(err , count) {
console.log('error is '+err+' and count is '+count);
});
rediserror.on('pmessage' , function( pattern ,channel , message) {
console.log("channel is " + channel + " and message is: " + message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
var redischatchannel = new Redis();
redischatchannel.psubscribe('private-chat-channel.*' , function(err , count){
console.log('error is '+err+' and count is '+count);
});
redischatchannel.on('pmessage' , function(pattern , channel , message) {
console.log("channel is "+channel +" and message is: "+message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
http.listen(3000, function () {
console.log('server lisening at port 3000');
});
chatroom.blade.php
@extends('layouts.app')
@section('content')
@if(!$messages)
<h3>No Messages in your chat with {{$to->name}} yet</h3>
@else
<div id="msgs">
@foreach($messages as $message)
<p><em><b>{{$message->fromusername}}</b></em> : {{$message->body}}</p>
<hr>
@endforeach
</div>
@endif
<form id="chatform" >
<div class="form-group">
<input type="text" id="body"/>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Send" />
</div>
</form>
@endsection
@section('script')
<script>
var socket = io('http://localhost:3000');
socket.removeAllListeners(`private-chat-channel.{{$chatid}}.{{auth()->user()->id}}:App\Events\ChatEvent`);
socket.on(`private-chat-channel.{{$chatid}}.{{auth()->user()->id}}:App\Events\ChatEvent` , function(msg){
//console.log(msg);
$('#msgs').append(`<p><em><b>${msg.data.fromusername}</b></em> : ${msg.data.body}</p><hr>`)
});
$('#chatform').submit(function(e) {
e.preventDefault();
var body = $('#body').val();
var chatid ={{$chatid}} ;
axios.post('/store-message' , {
body:body,
chatid:chatid
}).then( function(response){
console.log(response);
var message=response;
socket.removeAllListeners(`private-message-channel.${message.data.from}.${message.data.to}:App\Events\MessageEvent`);
socket.on(`private-message-channel.${message.data.from}.${message.data.to}:App\Events\MessageEvent` , function(msg) {
console.log(msg);
$('#msgs').append(`<p><em><b>${msg.data.fromusername}</b></em> : ${msg.data.body}</p><hr>`);
$('#body').val('');
});
}).catch(function(error){
socket.removeAllListeners(`private-error-channel.{{auth()->user()->id}}:App\Events\ErrorMessage`);
socket.on(`private-error-channel.{{auth()->user()->id}}:App\Events\ErrorMessage` , function(msg){
console.log(msg);
});
console.error(error);
});
})
</script>
@endsection
store_message
method from chat controller
public function store_message(Request $request)
{
$validator = Validator::make($request->all() , [
'chatid' => 'required',
'body' => 'required'
]);
if($validator->fails())
{
event(new ErrorMessage( auth()->user() ,$validator->errors()));
return response()->json(['errors' => $validator->errors()] , 400);
}
//dd($request);
if(!Chat::find($request->input('chatid')))
{
event(new ErrorMessage( auth()->user() ,'chat not found'));
return response()->json(['error'=>'error chat not found'] , 400);
}
$chat = Chat::find($request->chatid);
if($chat['user1_id'] == auth()->user()->id)
{
$to = $chat['user2_id'];
} elseif($chat['user2_id'] == auth()->user()->id)
{
$to = $chat['user1_id'];
}
//dd($to);
$message = new Message;
$message->chat_id = $request->chatid;
$message->from = auth()->user()->id;
$message->to = $to;
$message->fromusername= auth()->user()->name;
$message->tousername = User::find($to)->name;
$message->body = $request->body;
$message->save();
event(new MessageEvent(auth()->user() , $message));
event(new ChatEvent($request->chatid , $to ,$message));
return $message;
}
MessageEvent.php
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppUser;
class MessageEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user , $data )
{
$this->data = $data;
$this->user = $user;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('message-channel.'.$this->user->id.'.'.$this->data->to);
}
}
ErrorEvent.php
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppUser;
class ErrorMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user , $data)
{
$this->user = $user;
$this->data = $data;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('error-channel.'.$this->user->id);
}
}
php laravel-5 redis socket.io
add a comment |
i have been trying to solve this problem since long time but i found nothing,
i am trying to build a simple private chat app using
- Laravel
- Socketio
- Redis,
i built the chat but i have a bug that i can't fix yet,
the problem is when i first open the chat or on page reload when i send the first message it shows up to the receiver at the right time but it doesn't show to its owner although it's emitted to both users , then every other message shows up to both users at the right time , and here is the code,
also the errorevent does the same, it's supposed to send the error message to the its owner but it does not send the first message through socketio .
server.js
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
var rediserror = new Redis();
redis.psubscribe('private-message-channel.*' , function(err , count) {
console.log('error is '+err+' and count is '+count);
});
redis.on('pmessage' , function(pattern ,channel , message) {
console.log('channel is '+channel+' and message is '+message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
rediserror.psubscribe('private-error-channel.*' , function(err , count) {
console.log('error is '+err+' and count is '+count);
});
rediserror.on('pmessage' , function( pattern ,channel , message) {
console.log("channel is " + channel + " and message is: " + message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
var redischatchannel = new Redis();
redischatchannel.psubscribe('private-chat-channel.*' , function(err , count){
console.log('error is '+err+' and count is '+count);
});
redischatchannel.on('pmessage' , function(pattern , channel , message) {
console.log("channel is "+channel +" and message is: "+message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
http.listen(3000, function () {
console.log('server lisening at port 3000');
});
chatroom.blade.php
@extends('layouts.app')
@section('content')
@if(!$messages)
<h3>No Messages in your chat with {{$to->name}} yet</h3>
@else
<div id="msgs">
@foreach($messages as $message)
<p><em><b>{{$message->fromusername}}</b></em> : {{$message->body}}</p>
<hr>
@endforeach
</div>
@endif
<form id="chatform" >
<div class="form-group">
<input type="text" id="body"/>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Send" />
</div>
</form>
@endsection
@section('script')
<script>
var socket = io('http://localhost:3000');
socket.removeAllListeners(`private-chat-channel.{{$chatid}}.{{auth()->user()->id}}:App\Events\ChatEvent`);
socket.on(`private-chat-channel.{{$chatid}}.{{auth()->user()->id}}:App\Events\ChatEvent` , function(msg){
//console.log(msg);
$('#msgs').append(`<p><em><b>${msg.data.fromusername}</b></em> : ${msg.data.body}</p><hr>`)
});
$('#chatform').submit(function(e) {
e.preventDefault();
var body = $('#body').val();
var chatid ={{$chatid}} ;
axios.post('/store-message' , {
body:body,
chatid:chatid
}).then( function(response){
console.log(response);
var message=response;
socket.removeAllListeners(`private-message-channel.${message.data.from}.${message.data.to}:App\Events\MessageEvent`);
socket.on(`private-message-channel.${message.data.from}.${message.data.to}:App\Events\MessageEvent` , function(msg) {
console.log(msg);
$('#msgs').append(`<p><em><b>${msg.data.fromusername}</b></em> : ${msg.data.body}</p><hr>`);
$('#body').val('');
});
}).catch(function(error){
socket.removeAllListeners(`private-error-channel.{{auth()->user()->id}}:App\Events\ErrorMessage`);
socket.on(`private-error-channel.{{auth()->user()->id}}:App\Events\ErrorMessage` , function(msg){
console.log(msg);
});
console.error(error);
});
})
</script>
@endsection
store_message
method from chat controller
public function store_message(Request $request)
{
$validator = Validator::make($request->all() , [
'chatid' => 'required',
'body' => 'required'
]);
if($validator->fails())
{
event(new ErrorMessage( auth()->user() ,$validator->errors()));
return response()->json(['errors' => $validator->errors()] , 400);
}
//dd($request);
if(!Chat::find($request->input('chatid')))
{
event(new ErrorMessage( auth()->user() ,'chat not found'));
return response()->json(['error'=>'error chat not found'] , 400);
}
$chat = Chat::find($request->chatid);
if($chat['user1_id'] == auth()->user()->id)
{
$to = $chat['user2_id'];
} elseif($chat['user2_id'] == auth()->user()->id)
{
$to = $chat['user1_id'];
}
//dd($to);
$message = new Message;
$message->chat_id = $request->chatid;
$message->from = auth()->user()->id;
$message->to = $to;
$message->fromusername= auth()->user()->name;
$message->tousername = User::find($to)->name;
$message->body = $request->body;
$message->save();
event(new MessageEvent(auth()->user() , $message));
event(new ChatEvent($request->chatid , $to ,$message));
return $message;
}
MessageEvent.php
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppUser;
class MessageEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user , $data )
{
$this->data = $data;
$this->user = $user;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('message-channel.'.$this->user->id.'.'.$this->data->to);
}
}
ErrorEvent.php
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppUser;
class ErrorMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user , $data)
{
$this->user = $user;
$this->data = $data;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('error-channel.'.$this->user->id);
}
}
php laravel-5 redis socket.io
add a comment |
i have been trying to solve this problem since long time but i found nothing,
i am trying to build a simple private chat app using
- Laravel
- Socketio
- Redis,
i built the chat but i have a bug that i can't fix yet,
the problem is when i first open the chat or on page reload when i send the first message it shows up to the receiver at the right time but it doesn't show to its owner although it's emitted to both users , then every other message shows up to both users at the right time , and here is the code,
also the errorevent does the same, it's supposed to send the error message to the its owner but it does not send the first message through socketio .
server.js
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
var rediserror = new Redis();
redis.psubscribe('private-message-channel.*' , function(err , count) {
console.log('error is '+err+' and count is '+count);
});
redis.on('pmessage' , function(pattern ,channel , message) {
console.log('channel is '+channel+' and message is '+message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
rediserror.psubscribe('private-error-channel.*' , function(err , count) {
console.log('error is '+err+' and count is '+count);
});
rediserror.on('pmessage' , function( pattern ,channel , message) {
console.log("channel is " + channel + " and message is: " + message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
var redischatchannel = new Redis();
redischatchannel.psubscribe('private-chat-channel.*' , function(err , count){
console.log('error is '+err+' and count is '+count);
});
redischatchannel.on('pmessage' , function(pattern , channel , message) {
console.log("channel is "+channel +" and message is: "+message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
http.listen(3000, function () {
console.log('server lisening at port 3000');
});
chatroom.blade.php
@extends('layouts.app')
@section('content')
@if(!$messages)
<h3>No Messages in your chat with {{$to->name}} yet</h3>
@else
<div id="msgs">
@foreach($messages as $message)
<p><em><b>{{$message->fromusername}}</b></em> : {{$message->body}}</p>
<hr>
@endforeach
</div>
@endif
<form id="chatform" >
<div class="form-group">
<input type="text" id="body"/>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Send" />
</div>
</form>
@endsection
@section('script')
<script>
var socket = io('http://localhost:3000');
socket.removeAllListeners(`private-chat-channel.{{$chatid}}.{{auth()->user()->id}}:App\Events\ChatEvent`);
socket.on(`private-chat-channel.{{$chatid}}.{{auth()->user()->id}}:App\Events\ChatEvent` , function(msg){
//console.log(msg);
$('#msgs').append(`<p><em><b>${msg.data.fromusername}</b></em> : ${msg.data.body}</p><hr>`)
});
$('#chatform').submit(function(e) {
e.preventDefault();
var body = $('#body').val();
var chatid ={{$chatid}} ;
axios.post('/store-message' , {
body:body,
chatid:chatid
}).then( function(response){
console.log(response);
var message=response;
socket.removeAllListeners(`private-message-channel.${message.data.from}.${message.data.to}:App\Events\MessageEvent`);
socket.on(`private-message-channel.${message.data.from}.${message.data.to}:App\Events\MessageEvent` , function(msg) {
console.log(msg);
$('#msgs').append(`<p><em><b>${msg.data.fromusername}</b></em> : ${msg.data.body}</p><hr>`);
$('#body').val('');
});
}).catch(function(error){
socket.removeAllListeners(`private-error-channel.{{auth()->user()->id}}:App\Events\ErrorMessage`);
socket.on(`private-error-channel.{{auth()->user()->id}}:App\Events\ErrorMessage` , function(msg){
console.log(msg);
});
console.error(error);
});
})
</script>
@endsection
store_message
method from chat controller
public function store_message(Request $request)
{
$validator = Validator::make($request->all() , [
'chatid' => 'required',
'body' => 'required'
]);
if($validator->fails())
{
event(new ErrorMessage( auth()->user() ,$validator->errors()));
return response()->json(['errors' => $validator->errors()] , 400);
}
//dd($request);
if(!Chat::find($request->input('chatid')))
{
event(new ErrorMessage( auth()->user() ,'chat not found'));
return response()->json(['error'=>'error chat not found'] , 400);
}
$chat = Chat::find($request->chatid);
if($chat['user1_id'] == auth()->user()->id)
{
$to = $chat['user2_id'];
} elseif($chat['user2_id'] == auth()->user()->id)
{
$to = $chat['user1_id'];
}
//dd($to);
$message = new Message;
$message->chat_id = $request->chatid;
$message->from = auth()->user()->id;
$message->to = $to;
$message->fromusername= auth()->user()->name;
$message->tousername = User::find($to)->name;
$message->body = $request->body;
$message->save();
event(new MessageEvent(auth()->user() , $message));
event(new ChatEvent($request->chatid , $to ,$message));
return $message;
}
MessageEvent.php
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppUser;
class MessageEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user , $data )
{
$this->data = $data;
$this->user = $user;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('message-channel.'.$this->user->id.'.'.$this->data->to);
}
}
ErrorEvent.php
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppUser;
class ErrorMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user , $data)
{
$this->user = $user;
$this->data = $data;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('error-channel.'.$this->user->id);
}
}
php laravel-5 redis socket.io
i have been trying to solve this problem since long time but i found nothing,
i am trying to build a simple private chat app using
- Laravel
- Socketio
- Redis,
i built the chat but i have a bug that i can't fix yet,
the problem is when i first open the chat or on page reload when i send the first message it shows up to the receiver at the right time but it doesn't show to its owner although it's emitted to both users , then every other message shows up to both users at the right time , and here is the code,
also the errorevent does the same, it's supposed to send the error message to the its owner but it does not send the first message through socketio .
server.js
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
var rediserror = new Redis();
redis.psubscribe('private-message-channel.*' , function(err , count) {
console.log('error is '+err+' and count is '+count);
});
redis.on('pmessage' , function(pattern ,channel , message) {
console.log('channel is '+channel+' and message is '+message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
rediserror.psubscribe('private-error-channel.*' , function(err , count) {
console.log('error is '+err+' and count is '+count);
});
rediserror.on('pmessage' , function( pattern ,channel , message) {
console.log("channel is " + channel + " and message is: " + message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
var redischatchannel = new Redis();
redischatchannel.psubscribe('private-chat-channel.*' , function(err , count){
console.log('error is '+err+' and count is '+count);
});
redischatchannel.on('pmessage' , function(pattern , channel , message) {
console.log("channel is "+channel +" and message is: "+message);
message = JSON.parse(message);
io.emit(channel+':'+message.event , message.data);
});
http.listen(3000, function () {
console.log('server lisening at port 3000');
});
chatroom.blade.php
@extends('layouts.app')
@section('content')
@if(!$messages)
<h3>No Messages in your chat with {{$to->name}} yet</h3>
@else
<div id="msgs">
@foreach($messages as $message)
<p><em><b>{{$message->fromusername}}</b></em> : {{$message->body}}</p>
<hr>
@endforeach
</div>
@endif
<form id="chatform" >
<div class="form-group">
<input type="text" id="body"/>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Send" />
</div>
</form>
@endsection
@section('script')
<script>
var socket = io('http://localhost:3000');
socket.removeAllListeners(`private-chat-channel.{{$chatid}}.{{auth()->user()->id}}:App\Events\ChatEvent`);
socket.on(`private-chat-channel.{{$chatid}}.{{auth()->user()->id}}:App\Events\ChatEvent` , function(msg){
//console.log(msg);
$('#msgs').append(`<p><em><b>${msg.data.fromusername}</b></em> : ${msg.data.body}</p><hr>`)
});
$('#chatform').submit(function(e) {
e.preventDefault();
var body = $('#body').val();
var chatid ={{$chatid}} ;
axios.post('/store-message' , {
body:body,
chatid:chatid
}).then( function(response){
console.log(response);
var message=response;
socket.removeAllListeners(`private-message-channel.${message.data.from}.${message.data.to}:App\Events\MessageEvent`);
socket.on(`private-message-channel.${message.data.from}.${message.data.to}:App\Events\MessageEvent` , function(msg) {
console.log(msg);
$('#msgs').append(`<p><em><b>${msg.data.fromusername}</b></em> : ${msg.data.body}</p><hr>`);
$('#body').val('');
});
}).catch(function(error){
socket.removeAllListeners(`private-error-channel.{{auth()->user()->id}}:App\Events\ErrorMessage`);
socket.on(`private-error-channel.{{auth()->user()->id}}:App\Events\ErrorMessage` , function(msg){
console.log(msg);
});
console.error(error);
});
})
</script>
@endsection
store_message
method from chat controller
public function store_message(Request $request)
{
$validator = Validator::make($request->all() , [
'chatid' => 'required',
'body' => 'required'
]);
if($validator->fails())
{
event(new ErrorMessage( auth()->user() ,$validator->errors()));
return response()->json(['errors' => $validator->errors()] , 400);
}
//dd($request);
if(!Chat::find($request->input('chatid')))
{
event(new ErrorMessage( auth()->user() ,'chat not found'));
return response()->json(['error'=>'error chat not found'] , 400);
}
$chat = Chat::find($request->chatid);
if($chat['user1_id'] == auth()->user()->id)
{
$to = $chat['user2_id'];
} elseif($chat['user2_id'] == auth()->user()->id)
{
$to = $chat['user1_id'];
}
//dd($to);
$message = new Message;
$message->chat_id = $request->chatid;
$message->from = auth()->user()->id;
$message->to = $to;
$message->fromusername= auth()->user()->name;
$message->tousername = User::find($to)->name;
$message->body = $request->body;
$message->save();
event(new MessageEvent(auth()->user() , $message));
event(new ChatEvent($request->chatid , $to ,$message));
return $message;
}
MessageEvent.php
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppUser;
class MessageEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user , $data )
{
$this->data = $data;
$this->user = $user;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('message-channel.'.$this->user->id.'.'.$this->data->to);
}
}
ErrorEvent.php
<?php
namespace AppEvents;
use IlluminateBroadcastingChannel;
use IlluminateQueueSerializesModels;
use IlluminateBroadcastingPrivateChannel;
use IlluminateBroadcastingPresenceChannel;
use IlluminateFoundationEventsDispatchable;
use IlluminateBroadcastingInteractsWithSockets;
use IlluminateContractsBroadcastingShouldBroadcast;
use AppUser;
class ErrorMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user , $data)
{
$this->user = $user;
$this->data = $data;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('error-channel.'.$this->user->id);
}
}
php laravel-5 redis socket.io
php laravel-5 redis socket.io
asked Nov 13 '18 at 13:38
moody9moody9
12
12
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282288%2flaravel-socketio-and-redis-chat-appliaction-cant-make-the-first-request-after%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282288%2flaravel-socketio-and-redis-chat-appliaction-cant-make-the-first-request-after%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown