0

I'm implementing a Vue messaging component inside my laravel application. Messages are being successfully sent to Pusher as seen in the debug console but I've been struggling for three days to get laravel to listen so users on the same private channel can receive messages.

This is based on this app on github https://github.com/AfikDeri/Messenger-App-VueJS-and-Laravel

I have double-checked all key areas of the code that may be at fault but can't find the issue.

Have cleared cache and config in Laravel and recompiled Javascript code multiple times. I'm testing on XAMPP Version: 7.2.12 / windows 7.

Have tried turning off Windows firewall and Avast Antivirus.

Messages are being received in the Pusher debug console and are also being added to the database via axios and sent back to the sending client application and pushed onto the sender's message array. They just aren't been seen by the recipient and I'm not seeing any trace of event broadcasting in chrome.

ChatApp.vue

<template>
    <div class="chat-app">
        <conversation :contact="selectedContact" :messages="messages" @new="saveNewMessage"></conversation>
        <contacts-list :contacts="contacts" @selected="startConversationWith"></contacts-list>
    </div>
</template>
<script>

export default{
    props:{
        user:{
            type: Object,
            required:true
        }
    },

    data(){
        return{
            selectedContact: null,
            messages: [],
            contacts: [],
        }
    },
    mounted(){

        Echo.private(`messages.${this.user.id}`)
            .listen('NewMessage', (e) => {
             //   console.log('Broadcast received.');
                this.handleIncoming(e.message);
            });
         axios.get('/contacts')
             .then((response) => {
                 console.log(response.data);
                 this.contacts = response.data;
         });

    },

    methods:{
        startConversationWith(contact){
            axios.get(`/conversation/${contact.id}`)
                .then((response) =>{
                    this.messages = response.data;
                    this.selectedContact = contact;
                    }

                )
        },
        saveNewMessage(message){
            this.messages.push(message);
        },
        handleIncoming(message) {
                alert(JSON_stringify(message));
            if (this.selectedContact && message.from_id == this.selectedContact.id) {
                this.saveNewMessage(message);
                return;
            }

        },
    }

  }
</script>

In App\Events\NewMessage.php

namespace App\Events;

use App\Message;
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 NewMessage implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $message;

    public function __construct(Message $message)
    {
        $this->message = $message;
    }

    public function broadcastOn()
    {
        return new PrivateChannel('messages.' . $this->message->to_id);
    }

    public function broadcastWith()
    {
        $this->message->load('fromContact');

        return ["message" => $this->message];
    }
}

in bootstrap.js


import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({

    broadcaster: 'pusher',
    //   key: process.env.MIX_PUSHER_APP_KEY,
    //cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    key: '455936d5b071dd92ef25',
    cluster: 'us3',
    encrypted: false
});
require('./echo');
console.log(window.Echo.options);

in App/config/app.php

 Illuminate\Broadcasting\BroadcastServiceProvider::class,

 App\Providers\BroadcastServiceProvider::class,

// Are uncommented


in BroadcastServiceProvider

public function boot()
    {
     // Broadcast::routes(); 

/*changed this to fix a pusher auth error
     only prob is it routes pusher to /home after authentication but without error */

        Broadcast::routes(['middleware' => 'auth']);
        require base_path('routes/channels.php');
    }

in channels.php :

Broadcast::channel('messages.{$id}', function ($user, $id) {
    //dd($user->id, $id);
    return $user->id === (int) $id;
});

In the ContactController

 public function send(Request $request){
       $message = new Message();
       $message->from_id = auth()->user()->id;
       $message->to_id = $request->contact_id;
       $message->text = $request->text;
       $message->conversation_id = 1;

       if($message->save()) {

           broadcast(new NewMessage($message));
           return response()->json($message);
       }
       else{
           return response()->json('failed');
       }

In chrome > I am seeing these messages

Pusher : State changed : connecting -> connected with new socket ID 52.5078004

registerEventsMessage called  

//I think the next error is when I refreshed the browser forcing the Vue app to reconnect.

{event: "pusher:error", data: {code: 4009, message: "Connection not authorized within timeout"}}
data: {code: 4009, message: "Connection not authorized within timeout"}
event: "pusher:error"

//This appeared initially but not when messages were sent

No callbacks on presence-chat for pusher:subscription_error  
No callbacks on private-messages.14 for pusher:subscription_error

The chat application should update in the recipients chat stream when a new message is sent to their channel but nothing happens. I'm not seeing any errors in the chrome console. User ids and dynamic channel names appear to be rendering correctly.

I do see this error when I refresh the browser but after that messaging appears to work normally. No errors show in the pusher console and I can see all messages are received there.

I'm relatively new to Laravel and Vue Would greatly appreciate any assistance or guidance on how to troubleshoot.

Xarga
  • 1
  • 2

2 Answers2

0

obviously something is missing. since you are following tutorial check issues on it https://github.com/AfikDeri/Messenger-App-VueJS-and-Laravel/issues

ekpono
  • 172
  • 4
  • thanks - I checked those but none apply. The send is working without errors. The 403 authentication issue referred to was there but resolved and the 404 error doesn't apply. – Xarga Apr 25 '19 at 06:52
0

I'm wondering if I don't have the right ports open with xampp? What ports does pusher/echo listen on?

C:\Users\Rob> netstat -a -p TCP -o -n

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       2112
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       516
  TCP    0.0.0.0:443            0.0.0.0:0              LISTENING       2112
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       10832
  TCP    0.0.0.0:8733           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:9007           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:27275          0.0.0.0:0              LISTENING       1568
  TCP    0.0.0.0:49152          0.0.0.0:0              LISTENING       796
  TCP    0.0.0.0:49153          0.0.0.0:0              LISTENING       892
  TCP    0.0.0.0:49154          0.0.0.0:0              LISTENING       1088
  TCP    0.0.0.0:49157          0.0.0.0:0              LISTENING       864
  TCP    0.0.0.0:49158          0.0.0.0:0              LISTENING       852
  TCP    0.0.0.0:49159          0.0.0.0:0              LISTENING       1100
  TCP    127.0.0.1:3306         127.0.0.1:53658        TIME_WAIT       0
  TCP    127.0.0.1:5354         0.0.0.0:0              LISTENING       2012
  TCP    127.0.0.1:5354         127.0.0.1:49155        ESTABLISHED     2012
  TCP    127.0.0.1:5354         127.0.0.1:49156        ESTABLISHED     2012
  TCP    127.0.0.1:5939         0.0.0.0:0              LISTENING       2396
  TCP    127.0.0.1:5939         127.0.0.1:49263        ESTABLISHED     2396
  TCP    127.0.0.1:6942         0.0.0.0:0              LISTENING       7956
  TCP    127.0.0.1:8000         0.0.0.0:0              LISTENING       8212
  TCP    127.0.0.1:8000         127.0.0.1:53643        TIME_WAIT       0
  TCP    127.0.0.1:8000         127.0.0.1:53649        TIME_WAIT       0
  TCP    127.0.0.1:8000         127.0.0.1:53690        TIME_WAIT       0
  TCP    127.0.0.1:8000         127.0.0.1:53691        TIME_WAIT       0
  TCP    127.0.0.1:8000         127.0.0.1:53726        TIME_WAIT       0
  TCP    127.0.0.1:8000         127.0.0.1:53728        ESTABLISHED     8212
  TCP    127.0.0.1:8000         127.0.0.1:53733        TIME_WAIT       0
  TCP    127.0.0.1:12025        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:12110        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:12119        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:12143        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:12465        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:12563        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:12993        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:12995        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:27015        0.0.0.0:0              LISTENING       1980
  TCP    127.0.0.1:27275        0.0.0.0:0              LISTENING       1568
  TCP    127.0.0.1:49155        127.0.0.1:5354         ESTABLISHED     1980
  TCP    127.0.0.1:49156        127.0.0.1:5354         ESTABLISHED     1980
  TCP    127.0.0.1:49263        127.0.0.1:5939         ESTABLISHED     1684
  TCP    127.0.0.1:49269        127.0.0.1:49270        ESTABLISHED     1684
  TCP    127.0.0.1:49270        127.0.0.1:49269        ESTABLISHED     1684
  TCP    127.0.0.1:49541        127.0.0.1:49542        ESTABLISHED     7956
  TCP    127.0.0.1:49542        127.0.0.1:49541        ESTABLISHED     7956
  TCP    127.0.0.1:49543        127.0.0.1:49544        ESTABLISHED     7956
  TCP    127.0.0.1:49544        127.0.0.1:49543        ESTABLISHED     7956
  TCP    127.0.0.1:53644        127.0.0.1:8000         TIME_WAIT       0
  TCP    127.0.0.1:53650        127.0.0.1:8000         TIME_WAIT       0
  TCP    127.0.0.1:53657        127.0.0.1:3306         TIME_WAIT       0
  TCP    127.0.0.1:53658        127.0.0.1:3306         TIME_WAIT       0
  TCP    127.0.0.1:53692        127.0.0.1:8000         TIME_WAIT       0
  TCP    127.0.0.1:53693        127.0.0.1:8000         TIME_WAIT       0
  TCP    127.0.0.1:53728        127.0.0.1:8000         ESTABLISHED     7764
  TCP    127.0.0.1:53735        127.0.0.1:8000         TIME_WAIT       0
  TCP    127.0.0.1:53760        127.0.0.1:9229         SYN_SENT        5912
  TCP    127.0.0.1:63342        0.0.0.0:0              LISTENING       7956
  TCP    192.168.1.116:139      0.0.0.0:0              LISTENING       4
  TCP    192.168.1.116:49236    77.234.41.235:80       ESTABLISHED     1568
  TCP    192.168.1.116:50809    66.135.205.94:443      ESTABLISHED     1136
  TCP    192.168.1.116:53013    23.35.181.178:443      ESTABLISHED     7764
  TCP    192.168.1.116:53025    54.186.190.8:443       ESTABLISHED     7764
  TCP    192.168.1.116:53456    192.184.69.164:443     CLOSE_WAIT      7764
  TCP    192.168.1.116:53460    23.220.197.16:443      ESTABLISHED     7764
  TCP    192.168.1.116:53461    151.101.65.69:443      ESTABLISHED     7764
  TCP    192.168.1.116:53463    104.16.31.34:443       ESTABLISHED     7764
  TCP    192.168.1.116:53475    192.184.69.180:443     CLOSE_WAIT      7764
  TCP    192.168.1.116:53476    172.217.1.226:443      ESTABLISHED     7764
  TCP    192.168.1.116:53481    77.234.41.223:443      CLOSE_WAIT      7764
  TCP    192.168.1.116:53487    172.217.9.2:443        ESTABLISHED     7764
  TCP    192.168.1.116:53504    108.177.9.157:443      ESTABLISHED     7764
  TCP    192.168.1.116:53506    172.217.14.162:443     ESTABLISHED     7764
  TCP    192.168.1.116:53511    192.184.69.150:443     CLOSE_WAIT      7764
  TCP    192.168.1.116:53627    213.227.173.132:5938   ESTABLISHED     2396
  TCP    192.168.1.116:53631    23.52.96.18:80         TIME_WAIT       0
  TCP    192.168.1.116:53722    34.222.204.130:80      ESTABLISHED     7764
  TCP    192.168.1.116:53727    34.222.204.130:80      ESTABLISHED     7764
  TCP    192.168.1.116:53742    77.234.41.53:80        TIME_WAIT       0
  TCP    192.168.1.116:53744    77.234.41.56:80        TIME_WAIT       0
Xarga
  • 1
  • 2