2016-03-17 1 views
0

Je travaille sur SignalR (v2.2.0) chat avec le client IOS en utilisant SwiftR. Tout fonctionne très bien client IOS ainsi que client Web (Asp.net) est capable de faire le chat en utilisant:SignalR (v2.2.0) Client.Group() ne fonctionne pas pour le client IOS

Client:

var chatHub = $.connection.chatHub; 
$("#btnStartChat").click(function() { 

      var name = $("#txtNickName").val();//UserName 
      var userId = $("#txtUserId").val(); 
      var room = $("#txtRoomId").val(); 
      if (name.length > 0) { 
       chatHub.server.joinRoom(userId, room, name).done(function() { 
        chatHub.server.connect(userId, room, name); 
       }); 
      } 
      else { 
       alert("Please enter name"); 
      } 

     }); 
    chatHub.client.messageReceived = function (userName, message) { 

      AddMessage(userName, message); 
      $("#istyping").html(''); 
     }; 
function AddMessage(userName, message) { 
     $('#divChatWindow').append('<div class="message"><span class="userName">' + userName + '</span>: ' + message + '</div>'); 

     var height = $('#divChatWindow')[0].scrollHeight; 
     $('#divChatWindow').scrollTop(height); 
    } 
    // On New User Connected 
     chatHub.client.onNewUserConnected = function (id, name) { 
      // alert('first time add'); 
      AddUser(chatHub, id, name); 
     }; 

Serveur:

public async Task JoinRoom(string user_Id, string room_Id, string user_Name) 
    { 
     //Add user in database for room 
     AddLoginUser(room_Id, this.Context.ConnectionId, user_Id); 

     await this.Groups.Add(this.Context.ConnectionId, room_Id); 
    } 


    public void Connect(string user_Id, string room_Id, string user_Name) 
    { 
     var id = Context.ConnectionId; 
     Clients.Caller.onConnected(id, user_Name, GetRoomUser(room_Id), GetRoomMessage(room_Id)); 

     // send to all in group to update user list 
     Clients.OthersInGroup(room_Id).onNewUserConnected(id, user_Name); 
    } 



public void SendMessageToAll(string user_Name, string message, string room_Id, string user_Id) 
    { 
     // store messages in db 
     // SaveRoomMessage(user_Id, message, room_Id); 

     // Broad cast message 
     Clients.All.messageReceived(user_Name, message); 
     //Clients.Group(room_Id).messageReceived(user_Name, message); 
    } 

Problème:

Dans la méthode ci-dessus si am changer le

Clients.All.messageReceived(user_Name, message); 

à

Clients.Group(room_Id).messageReceived(user_Name, message); 

IOS client ne peut pas recevoir un message même client IOS est capable d'envoyer un message au client Web. Ici, les clients Web peuvent envoyer et recevoir des messages entre eux sans aucun problème.

J'ai beaucoup cherché à ce sujet sur le web, mais je n'ai pas trouvé d'informations à ce sujet. Si vous avez encore besoin de plus d'informations alors s'il vous plaît laissez-moi savoir que je vais essayer de fournir le plus possible.

Merci d'avance.

+0

Où ajoutez-vous vos clients aux groupes? Quelque chose comme 'attend this.Groups.Add (this.Context.ConnectionId, room_Id);' –

Répondre

0

Faites-vous quelque chose comme ça pour ajouter vos clients à vos groupes?

Serveur:

public async Task JoinRoom(string room_id) 
{ 
    await this.Groups.Add(this.Context.ConnectionId, room_id); 
} 

public async Task UnJoinRoom(string room_id) 
{ 
    await this.Groups.Remove(this.Context.ConnectionId, room_id); 
} 

Client:

js:

var chatHub = $.connection.chatHub; 
chatHub.server.joinRoom('roomId') 

rapide:

chatHub.invoke("joinRoom", arguments: ["room_id"]) 

Après si vous appelez

Clients.Group('room_Id').messageReceived(user_Name, message); 

il devrait fonctionner.

+0

Merci pour votre réponse .. je vais essayer cela et vous laisser dès que possible. – Sunny

+0

Roger j'avais mis à jour ma question selon vos suggestions et tout fonctionne bien client IOS capable d'envoyer/recevoir des messages. Mais la liste des utilisateurs de connexion sur le client Web n'est pas mise à jour si l'utilisateur a ajouté dans IOS d'un autre côté tout fonctionne bien dans le Web. – Sunny

+0

Qu'est-ce que la liste d'utilisateurs de connexion? Comment mettez-vous à jour cette liste? (Je veux dire sur le côté client) –