Twilio聊天事件memberUpdated,而userInfoUpdated从未被解雇

时间:2017-06-23 15:51:33

标签: javascript jquery twilio twilio-api

我正在查看这些事件正在触发的案例,我已经在这些代码上实现了

jQuery(document).ready(function() {

  var chatChannel;
  var chatClient;
  var username;
  var $input = $('#chat-input');

  $.post("/tokens", function(data) {
    username = data.username;
    chatClient = new Twilio.Chat.Client(data.token);
    chatClient.getSubscribedChannels().then(createOrJoinGeneralChannel);
  });

  function createOrJoinGeneralChannel() {
    // Get the general chat channel, which is where all the messages are
    // sent in this simple application
    // print('Attempting to join "general" chat channel...');
    var promise = chatClient.getChannelByUniqueName("#{params[:chat_channel]}");
    promise.then(function(channel) {
        chatChannel = channel;
        console.log("#{params[:chat_channel]} is exist");
        console.log(chatChannel);
        setupChannel();
        return channel.getMembers();
        // $input.removeClass('.hidden')
    })
    .then(function(members){
      members.forEach(function(member){
        console.log('member', member);
        member.on('userInfoUpdated', function(){
          console.log('userInfoUpdated', member);
        })
      })
    })
    .catch(function() {
        // If it doesn't exist, let's create it
        console.log("creating #{params[:chat_channel]} channel");
        chatClient.createChannel({
            uniqueName: "#{params[:chat_channel]}",
            friendlyName: 'General Chat Channel'
        }).then(function(channel) {
            console.log("Created #{params[:chat_channel]} channel:");
            console.log(channel);
            chatChannel = channel;
            setupChannel();
        });
    });
  }

  function setupChannel() {
    chatChannel.join().then(function(channel) {
      printMessage(username + ' joined the chat.');
      chatChannel.on('typingStarted', showTypingStarted);
      chatChannel.on('typingEnded', hideTypingStarted);
      chatChannel.on('memberJoined', notifyMemberJoined);
      chatChannel.on('memberLeft', notifyMemberLeft);
      chatChannel.on('memberUpdated', updateMemberMessageReadStatus);
    });
    chatChannel.on('messageAdded', function(message) {
      printMessage(message.author + ": " + message.body);
    });
  }

  function updateMemberMessageReadStatus(member){
    console.log('memberUpdated');
    console.log('member.lastConsumedMessageIndex', member.lastConsumedMessageIndex);
    console.log('member.lastConsumptionTimestamp', member.lastConsumptionTimestamp);
  }

  function leaveCurrentChannel() {
    if (chatChannel) {
      chatChannel.leave().then(function (leftChannel) {
        console.log('left ' + leftChannel.friendlyName);
        leftChannel.removeListener('messageAdded', function(message) {
          printMessage(message.author + ": " + message.body);
        });
        leftChannel.removeListener('typingStarted', showTypingStarted);
        leftChannel.removeListener('typingEnded', hideTypingStarted);
        leftChannel.removeListener('memberJoined', notifyMemberJoined);
        leftChannel.removeListener('memberLeft', notifyMemberLeft);
        leftChannel.removeListener('memberUpdated', updateMemberMessageReadStatus);
      });
    }
  }

  function showTypingStarted(member) {
    console.log('somebody is typing');
    $('#is_typing').html(member.identity + ' is typing...');
  }

  function hideTypingStarted(member) {
    $('#is_typing').html('');
  }

  function notifyMemberJoined(member) {
    console.log('notifyMemberJoined');
    printMessage(member.identity + ' joined the channel');
  }

  function notifyMemberLeft(member) {
    console.log('notifyMemberLeft');
    printMessage(member.identity + ' left the channel');
  }

  $input.on('keydown', function(e) {
    if (e.keyCode == 13) {
      chatChannel.sendMessage($input.val());
      $input.val('');
    } else {
      //console.log('typing');
      chatChannel.typing();
    }
  });

  window.addEventListener("beforeunload", function (e) {
    // var confirmationMessage = "\o/";

    (e || window.event).returnValue = leaveCurrentChannel(); //Gecko + IE
    return leaveCurrentChannel();                            //Webkit, Safari, Chrome
  });

});

我已经和控制台一起看看我的

console.log('userInfoUpdated', member);

或这些家伙

console.log('memberUpdated');
console.log('member.lastConsumedMessageIndex', member.lastConsumedMessageIndex);
console.log('member.lastConsumptionTimestamp', member.lastConsumptionTimestamp);
在我对聊天事件进行测试期间,他们从未被解雇过,而且我对如何显示我的用户在线状态或消息状态是读还是未读的方式感到困惑< / p>

所以请在案件上赐教,谢谢

1 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

根据最新版Twilio Chat的JS文档,您需要在成员上收听的事件名为'updated'。因此,倾听'userInfoUpdated'将无效。

我还建议在此代码中使用:

chatChannel.join().then(function(channel) {
  //...
  chatChannel.on('memberUpdated', updateMemberMessageReadStatus);
  //...
})

您使用传递给回调的channel,而不是原始的chatChannel对象。像这样:

chatChannel.join().then(function(channel) {
  //...
  channel.on('memberUpdated', updateMemberMessageReadStatus);
  //...
})

我不知道这是否能解决问题,但我现在想不出任何其他事情。