Pubnub One-One Chat Отправка сообщения всем пользователям - PullRequest
0 голосов
/ 07 мая 2018

Это мой код чата в Pubnub

 var pubnub = PUBNUB.init({
    publish_key   : 'my_key',
    subscribe_key : 'sub-key'
});

  pubnub.subscribe({

    channel : "{{$channel}}",

    message : function(m){

     $(".conversation-list").append(
        '<li class="clearfix '+ m.clearifix +' ">' +
        '<div class="chat-avatar">' +
        '<img src="' + m.image + '">'+
        '<i> {{date('h:i')}}  </i>' +
        '</div>' +
        '<div class="conversation-text">' +
        '<div class="ctext-wrap">' +
        '<i> '+ m.name + '</i>' +
        '<p>' + m.message + '</p>' +
        '</div>' +
        '</div>' +
        '</li>'
        ).animate({scrollTop: $(".conversation-list")[0].scrollHeight}, 0);
     $('.reply-text').val('');

 },
     //connect : publish
 });

  $('.send-reply-to-user').on('click', function (e) {
    e.preventDefault();

    if ($('.reply-text').val()== '')
        return false;
    else

        console.log(pubnub.publish);
   // console.log(this);

    var user_to_id = $(".send-reply-to-user").attr('user_to_id');
    var message = $('.reply-text').val();
    var name = $('#user_name').val();
    var image = document.getElementById("user_image").getAttribute("src");
    var clearifix = $('#user_clearifx').val();

    pubnub.publish({
        channel : "{{$channel}}",
        message: { name : name, message : message, image : image, clearifix : clearifix }
    });

    if ($.trim(message).length != 0) {
        $.ajax({
            url: '{{route('send:user:chat:message')}}',
            cache: false,
            method: 'POST',
            data: {user_to_id: user_to_id, message: message, _token: '{{csrf_token()}}'},
            beforeSend: function () {
            },
            success: function (result) {
            }

        })
    }

});

Этот код работает отлично, единственная проблема в том, что сообщения отправляются всем пользователям, я хочу отправить сообщение одному пользователю.

Example: User one: John send a message to User two Deo, 
Example 2: John sends a message to Marry

и так далее. Используя Pubnub JS API, Backend используется как Laravel 5.6

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Наконец-то исправлена ​​Моя проблема, частные каналы работали хорошо, На самом деле проблема была с моим бэкэндом. Он возвращал данные от всех пользователей, которых я исправил, теперь работает нормально.

0 голосов
/ 07 мая 2018

Я рекомендую использовать самоуверенный JavaScript-фреймворк PubNub, который называется ChatEngine . Это отнимает много тяжелой работы, связанной с созданием чата с PubNub. Вот пример кода, который поможет вам начать создавать приватные чаты 1: 1. Убедитесь, что вы используете кнопку настройки , чтобы подготовить бэкэнд для своей учетной записи.

<script src="https://cdn.jsdelivr.net/npm/chat-engine@0.9.5/dist/chat-engine.min.js" type="text/javascript"></script>
<script type="text/javascript">

// Init ChatEngine with PubNub
const publishKey = '__Your_PubNub_Publish_Key__';
const subscribeKey = '__Your_PubNub_Subscribe_Key__';

const ChatEngine = ChatEngineCore.create({
  publishKey,
  subscribeKey,
}, {
  globalChannel: 'global',
});

const user = {
    uuid: 'randomstringofchars',
    name: 'John Smith'
}

const chats = {};

ChatEngine.connect(user.uuid, user);

ChatEngine.on('$.ready', function(data) {

    // store my new user as `me`
    let me = data.me;

    // returns a ChatEngine chat object
    function makePrivateChat(theirUserId) {
        const chatKey = [theirUserId, me.uuid].sort().join('-');

        // Don't make the same 1:1 chat if it already exists
        if (chats[chatKey]) {
            return;
        }

        // true for private chat
        const chat = new ChatEngine.Chat(chatKey, true);

        chats[chatKey] = chat;
    }

    // Auto add a 1:1 chat to UI when invited by someone
    me.direct.on('$.invite', makePrivateChat);

    // Define a button for making new 1:1 chats in your UI
    newOneToOneChatButton.on('click', function (event, theirUserId) {
        someChatObject.invite(theirUserId);
    });
});
</script>
...