ABP源码分析三十二:ABP.SignalR

时间:2022-05-05 06:19:34

Realtime

Realtime是ABP底层模块提供的功能,用于管理在线用户。它是使用SignalR实现给在线用户发送通知的功能的前提

IOnlineClient/OnlineClient: 封装在线用户的信息

OnlineClientManager/IOnlineClientManager: 用于提供基本维护在线用户的方法。其内部维护了一个字典来保存在线的客户信息。

ABP源码分析三十二:ABP.SignalR

ABP源码分析三十二:ABP.SignalR

SingalR

SignalRRealTimeNotifier: 实现了给在线用户发送通知的功能。其从IOnlineClientManager中获取在线客户列表,然后比对通知UserNotification中的uerid,从而实现定向发送通知的功能。

ABP源码分析三十二:ABP.SignalR

AbpCommonHub:重写了Hub中的OnConnected和OnDisconnected方法,在这两个方法中将当前用户添加/移除出IOnlineClientManager对象的集合。

ABP源码分析三十二:ABP.SignalR

ABP源码分析三十二:ABP.SignalR

WindsorDependencyResolver:继承自系统默认的DefaultDependencyResolver,用于替换默认的serviceContainer为Castle的IWindsorContainer。

ABP源码分析三十二:ABP.SignalR

AbpSignalRContractResolver:实现了NewtonSoft的IContractResolver接口。其封装了一个IgnoredAssemblies集合。实现ResolveContract方法:如果type的assembly在IgnoredAssemblies中就使用DefaultContractResolver,否则就使用CamelCasePropertyNamesContractResolver。

ABP源码分析三十二:ABP.SignalR

AbpWebSignalRModule:完成SignalR模块的初始化,主要完成以下三方面的工作:

使用WindsorDependencyResolver替换DefaultDependencyResolver

根据ABP的regiser 规则,对SignalR模块的接口或类进行register

设置JsonSerializer的ContractResolver为AbpSignalRContractResolver。

ABP源码分析三十二:ABP.SignalR

返回ABP源码分析系列文章目录