来看看我们创建的MyHub类的父类Hub类,它是一个抽象类
namespace Microsoft.AspNet.SignalR
{
//
// 摘要:
// 提供与连接到 Microsoft.AspNet.SignalR.Hub 的 SignalR 连接进行通信的方法。
public abstract class Hub : HubBase
{
//
// 摘要:
// 初始化 Microsoft.AspNet.SignalR.Hub 类的新实例。
protected Hub();
//
// 摘要:
// 获取或设置与 SignalR 连接通信的客户端。
//
// 返回结果:
// 与 SignalR 连接通信的客户端。(表示所有连接我的Hub上的客户端)
[Dynamic(new[] { false, true })]
public IHubCallerConnectionContext<dynamic> Clients { get; set; }
}
}
再看看Hub类的父类HubBase类 :它是一个抽象方法
namespace Microsoft.AspNet.SignalR.Hubs
{
public abstract class HubBase : IHub, IDisposable
{
protected HubBase();
//本次连接的上下文(
public HubCallerContext Context { get; set; }
//用户分组
public IGroupManager Groups { get; set; }
public void Dispose();
//客户端连接上的时候会调用此方法
public virtual Task OnConnected();
//客户端失去连接的时候会调用此方法
public virtual Task OnDisconnected(bool stopCalled);
//客户端可能网络不稳定,造成重新连接,就会调用此方法
public virtual Task OnReconnected();
protected virtual void Dispose(bool disposing);
}
}
再来看看我们创建的Hub类中的属性类型,它是一个泛型接口
namespace Microsoft.AspNet.SignalR.Hubs
{
public interface IHubCallerConnectionContext<T> : IHubConnectionContext<T>
{
//调用者,一般指的是我们的客户端(即:此时和我连接上的浏览器[这里的我值Hub])
T Caller { get; }
//调用者的状态,一般指的是我们浏览器的状态
[Dynamic]
dynamic CallerState { get; }
//表示除了我之外的别人(因为有很多浏览器都是可以连接我们的Hub的,即:此时和我连接上的浏览器外的其他浏览器)
T Others { get; }
//在别的组里面的其他的客户端
T OthersInGroup(string groupName);
T OthersInGroups(IList<string> groupNames);
}
}
在来看看IHubCallerConnectionContext<T>接口的父接口IHubConnectionContext<T>
namespace Microsoft.AspNet.SignalR.Hubs
{
public interface IHubConnectionContext<T>
{
//表示和我连接的所有的客户端(我指Hub)
T All { get; }
//除了这个连接外的其他客户端
T AllExcept(params string[] excludeConnectionIds);
//表示某个连接ID对应的客户端
T Client(string connectionId);
//表示指定的多个连接ID的客户端
T Clients(IList<string> connectionIds);
//表示某个组中的除了excludeConnectionIds这连接之外的客户端
T Group(string groupName, params string[] excludeConnectionIds);
T Groups(IList<string> groupNames, params string[] excludeConnectionIds);
T User(string userId);
T Users(IList<string> userIds);
}
}
再来看看HubBase中的Context这个属性的类型,它是一个HubCallerContext类型
namespace Microsoft.AspNet.SignalR.Hubs
{
//
// 摘要:
// 表示客户端的调用上下文。
public class HubCallerContext
{
//
// 摘要:
// 初始化 Microsoft.AspNet.SignalR.Hubs.HubCallerContext 类的新实例。
//
// 参数:
// request:
// 当前的 HTTP 请求。
//
// connectionId:
// 连接 ID。
public HubCallerContext(IRequest request, string connectionId);
protected HubCallerContext();
//
// 摘要:
// 获取调用客户端的连接 ID。
//
// 返回结果:
// 调用客户端的连接 ID。(每个页面连接Hub,他们的连接ID都是不同的,同一个页面,如果刷新后,重新连接后,他们的连接ID也是不同的)
public virtual string ConnectionId { get; }
//
// 摘要:
// 获取请求的 Cookie。
//
// 返回结果:
// 请求的 Cookie。
public virtual IDictionary<string, Cookie> RequestCookies { get; }
//
// 摘要:
// 获取请求的标头。
//
// 返回结果:
// 请求的标头。
public virtual INameValueCollection Headers { get; }
//
// 摘要:
// 获取请求的查询字符串。
//
// 返回结果:
// 请求的查询字符串。
public virtual INameValueCollection QueryString { get; }
//
// 摘要:
// 获取请求的 System.Security.Principal.IPrincipal。
//
// 返回结果:
// 请求的 System.Security.Principal.IPrincipal。
public virtual IPrincipal User { get; }
//
// 摘要:
// 为当前 HTTP 请求获取 Microsoft.AspNet.SignalR.IRequest。
//
// 返回结果:
// 当前 HTTP 请求的 Microsoft.AspNet.SignalR.IRequest。
public virtual IRequest Request { get; }
}
}