На данный момент я научился уведомлять концентратор со стороны сервера.Затем концентратор передает уведомление клиенту.
Мой контекст, над которым я работаю, основан на отправке запроса на добавление в друзья (аналог Facebook).Где, если г-н X отправит запрос г-же Y, тогда только у г-жи Y будет всплывающее уведомление.
Поэтому я решил работать с группами.Я думаю, что одна группа - один пользователь.
Проблема в том, что я пытался при запуске концентратора сделать:
$. Connection.hub.start (function () {hub.login(XXX);});
где XXX будет именем пользователя или идентификатором пользователя из сеанса.Я не знаю, как это сделать.
Затем я попытался создать скрытую метку с именем пользователя или идентификатором пользователя, заполнить ее на page_load и затем взять со стороны клиента.Но клиентская сторона работает раньше серверной.
Затем я попытался использовать идентификатор соединения контекста концентратора.Но проблема, кажется, в том, что почти все, такие как контекст и менеджер группы, являются нулевыми в хабе.Это потому, что я использую экземпляр концентратора?или потому что у меня есть статические методы?(у меня должен быть статический / или другой экземпляр, поскольку я вызываю эти методы из другого серверного кода)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SignalR.Hubs;
using SignalR;
using SignalR.Hosting.AspNet;
using System.Web;
using System.Web.SessionState;
namespace DataLayer
{
public class NotificationHub: Hub
{
private static NotificationHub instance;
private NotificationHub() { }
public static NotificationHub Instance
{
get
{
if (instance == null)
instance = new NotificationHub();
return instance;
}
}
public void NotifyClients(int gid, string value)
{
IConnectionManager connectionManager = (IConnectionManager)AspNetHost.DependencyResolver.GetService(typeof(IConnectionManager));
dynamic clients = connectionManager.GetClients<NotificationHub>();
clients[gid.ToString()].newNotification(value);
//let us then try to use connection id, but this.Context.ConnectionId is null
}
public void Login(string gid)
{
AddToGroup(gid);
}
}
}
Может быть, есть какой-то другой обходной путь к тому, что я хотел бы сделать?(т.е. разрешить каждому человеку иметь свои собственные уведомления?)