2016-03-07 2 views
0

Я создал настраиваемые методы SignalR для перенаправления пользователей, если они хотят присоединиться к группе, у которой уже есть 2 члена. Кажется, что все работает нормально, кроме метода перенаправления.Пользовательский метод SignalR для перенаправления

ChatHub.cs:

namespace SignalRChat 
{ 
    public class ChatHub : Hub 
    { 
     static string test2 = ""; 
     public static Dictionary<string, int> rooms = new Dictionary<string, int>(); 
     public void Test(string groupName) 
     { 
      if (!rooms.ContainsKey(groupName)) 
      { 
       rooms.Add(groupName, 1); 

      } 
      else if(rooms[groupName] != 2) 
      { 
       rooms[groupName] = 2; 
      } 
      else 
      { 
       test2 = "testing"; 
       Redirect(); 
      } 

     } 

     public Task Redirect() 
     { 
      return Clients.Caller.redirectTo(); 
     } 

     public Task JoinGroup(string groupName) 
     { 
      return Groups.Add(Context.ConnectionId, groupName); 

     } 
    } 
} 

Сценарии:

var chat2 = $.connection.chatHub; 
$.connection.hub.start().done(function() { 
    chat2.server.test(roomId); 

    chat2.client.redirectTo = function() { 
     window.location.replace("http://stackoverflow.com"); 
    } 

    chat2.server.joinGroup(roomId); 
}); 

Когда уже есть 2 клиента в группе, test2 установлен на "тестирование", но клиент не попадет.

ответ

1

Измените ваши сценарии:

var chat2 = $.connection.chatHub; 
// var roomId = "R1" <-- I added this for testing 

chat2.client.redirectTo = function() { 
    window.location.replace("http://stackoverflow.com/questions/35848709/signalr-custom-method-to-redirect#35857376"); 
} 

$.connection.hub.start().done(function() { 
    chat2.server.joinGroup(roomId); 
    chat2.server.test(roomId); 
}); 

Примечание: в методе Test логика говорит о том, что редирект будет работать только если rooms словарь содержит данный roomname и значение INT, соответствующий этому имя комнаты - '2'. Наверное, не твоя настоящая плановая логика.

Для тестирования я добавил к поддержке кода:

public static Dictionary<string, int> rooms = new Dictionary<string, int>(); 
    public void Test(string groupName) // <-- I sent "groupName: R1" from js 
    { 
     rooms["R1"] = 2; 
     if ... 
    } 
Смежные вопросы