У меня есть следующий JS работы:SignalR - отправка параметра OnConnected?
var chat = $.connection.appHub;
Мое приложение имеет один концентратор, AppHub
, который обрабатывает два типа уведомлений - Chat
и Other
. Я использую один концентратор, потому что мне нужен доступ ко всем соединениям в любое время.
мне нужно, чтобы быть в состоянии сказать OnConnected
, какой тип это через что-то вроде следующего:
[Authorize]
public class AppHub : Hub {
private readonly static ConnectionMapping<string> _chatConnections =
new ConnectionMapping<string>();
private readonly static ConnectionMapping<string> _navbarConnections =
new ConnectionMapping<string>();
public override Task OnConnected(bool isChat) { // here
string user = Context.User.Identity.Name;
if (isChat){
_chatConnections.Add(user, Context.ConnectionId);
_navbarConnections.Add(user, Context.ConnectionId);
} else{
_navbarConnections.Add(user, Context.ConnectionId);
}
}
}
Использование в идеале быть что-то вроде этого:
var chat = $.connection.appHub(true);
Как я могу передать, что параметр к хабу из javascript?
Update:
SendMessage:
// will have another for OtherMessage
public void SendChatMessage(string who, ChatMessageViewModel message) {
message.HtmlContent = _compiler.Transform(message.HtmlContent);
foreach (var connectionId in _chatConnections.GetConnections(who)) {
Clients.Client(connectionId).addChatMessage(JsonConvert.SerializeObject(message).SanitizeData());
}
}
Я немного запутался - я использую Словари для хранения соединений, а не группы. Я отправлю свой метод SendMessage. – RobVious
Извините, я взял это из своего собственного кода. Он должен работать, если вы измените тело метода Subscribe с помощью метода OnConnected –
. Я все еще немного смущен - не мог бы я вообще переопределить OnConnected? Для этого также потребуется другой запрос на поездку туда и обратно, не так ли? И - меня не интересуют пересоединения - ChatHub предназначен для выделенной страницы, а OtherHub - для уведомлений navbar. Пользователь фактически подключается к обоим концентраторам при посещении чата - я просто не включил это выше. Исправлено сейчас. Мысли? – RobVious