Realtime UI 套件不是单独的产品。每个部分都位于与之匹配的 sgcUI 产品中,使用您已在使用的单元、包和 NuGet 包,并遵循该产品的版本。每个部分只需要 sgcUICore 和包含它的产品,都不需要 sgcHTML。
Delphi 7 至 Delphi 13 的 VCL、Delphi XE6 起的 FireMonkey、C++Builder,以及 .NET WinForms、WPF 和 Avalonia。阅读 Realtime UI 套件帮助主题。
在每个 sgcUI 产品中显示谁在线。
TsgcUIPresenceModel 保存用户及其状态(在线、离开、忙碌或离线)和状态文本。头像控件跟随该模型,因此状态变化会同时重绘该用户的所有头像和指示器。
AddOrUpdate 和 SetStatus,或来自每次变化一条的实时消息。帮助:在线状态和头像和在线状态指示器。
面向桌面应用程序的通知中心。
TsgcNotificationModel 保存通知及其标题、严重程度、类别和已读状态,并统计未读数。弹出通知管理器、收件箱、偏好设置和徽标链接都跟随它。
TsgcToolbarBadgeLink 在工具栏或功能区条目上显示未读数,超过 99 时显示 99+。跟随成千上万行日志而不会卡住画面。
TsgcGridLogModel 保存带时间、从 trace 到 fatal 的级别、来源和消息的日志行,TsgcGridLogLink 以虚拟模式在 sgcGrid 中显示它们。日志模型是线程安全的,因此工作线程可以直接追加日志行。
sgcUICoreWS 桥接的实时数据源接收服务器通过 sgcWebSockets 连接发送的 JSON 消息,并交给各个模型。控件随即更新,无需您编写任何代码。
| 数据源 | sgcWebSockets 客户端 | 读取的事件 | 筛选消息的依据 |
|---|---|---|---|
TsgcUILiveSource_WebSocket | TsgcWebSocketClient | OnMessage,每条文本消息 | 消息某个成员上的筛选条件 |
TsgcUILiveSource_MQTT | TsgcWSPClient_MQTT | OnMQTTPublish,每次发布 | MQTT 主题筛选器 |
TsgcUILiveSource_SSE | TsgcHTTP1Client | OnSSEMessage,事件流 | SSE 事件类型 |
这里没有新协议。每个模型读取其数据流的实时消息:每次变化一个 JSON 对象,带有指明数据流的 type 成员和一个 op 成员。
| 数据流 | type | op | 模型 |
|---|---|---|---|
| 在线状态 | presence,可选 | upsert、remove、snapshot、clear | TsgcUIPresenceModel |
| 通知 | notification,必需 | add、update、remove、read、unread、snapshot | TsgcNotificationModel |
| 活动 | activity,必需 | add、update、remove、snapshot | TsgcDashboardActivityModel |
| 日志 | log,可选 | append、batch、clear | TsgcGridLogModel |
{"type":"presence","op":"upsert","user":{"id":"u7","presence":"away","statusText":"Lunch"}}
{"type":"notification","op":"add","notification":{"id":"n2","title":"Build 812 passed","severity":"success"}}
{"type":"activity","op":"add","item":{"id":"a20","actorId":"u7","verb":"updated","objectName":"Invoice INV-17"}}
{"type":"log","op":"append","entry":{"level":"warning","source":"api","message":"Slow query"}}
oSource := TsgcUILiveSource_MQTT.Create(Self);
oSource.Client := MQTT;
// 每个模型一个绑定,按其主题选择
oBinding := oSource.Bindings.Add;
oBinding.Target := PresenceModel;
oBinding.Topic := 'ops/presence';
oBinding := oSource.Bindings.Add;
oBinding.Target := NotificationModel;
oBinding.Topic := 'ops/notifications';
oBinding := oSource.Bindings.Add;
oBinding.Target := ActivityModel;
oBinding.Topic := 'ops/activity';
oBinding := oSource.Bindings.Add;
oBinding.Target := LogModel;
oBinding.Topic := 'ops/log/+';
// 数据源从不订阅:请在客户端的 OnMQTTConnect 中订阅
MQTT.Subscribe('ops/#');
实时数据源仅限注册版,并且需要 sgcWebSockets,与 sgcUI 的每个 sgcWebSockets 桥接相同。没有服务器时,或在社区版构建中,应用程序改为调用各模型的 API:在线状态模型的 AddOrUpdate 和 SetStatus,通知模型的 Add 或 Post,活动模型的 Add 以及日志模型的 Append。
由模拟器驱动、面向十二人团队的运营控制台
Suite 演示 Realtime 用该套件构建了一个运营控制台。工具栏上有一个以未读数为徽标的铃铛、当前用户的头像和团队的头像组。名册列出每位成员及其在线状态指示器,一个选项卡放活动源,另一个放审核跟踪,通知收件箱位于偏好设置编辑器上方,日志网格跟随最新的日志行,弹出通知出现在右下角。
--test result.txt 运行即可执行其自检,每项检查输出一行带编号的 PASS 或 FAIL包含的 sgcUI 产品
另请参阅其他 sgcUI Suite 演示。
模型、控件和实时数据源在 .NET 中名称相同,读取相同的 JSON 消息,位于各产品的 NuGet 包中。
TsgcUIPresenceModel(命名空间 esegece.sgcUICore)、TsgcNotificationModel 和 TsgcNotificationPreferences(esegece.sgcNavigation)、TsgcToolbarBadgeLink(esegece.sgcToolbar)、TsgcDashboardActivityModel(esegece.sgcDashboard),以及 TsgcGridLogModel 和 TsgcGridLogLink(esegece.sgcGrid)。TsgcWinFormsAvatar、TsgcWinFormsToastManager、TsgcWinFormsNotificationInbox、TsgcWinFormsActivityFeed、TsgcWinFormsAuditTrail 以及其他控件,每个都有对应的 TsgcWpf 和 TsgcAvalonia 版本。esegece.sgcUICore.sgcWebSockets 中的 TsgcUILiveSource_WebSocket、TsgcUILiveSource_MQTT 和 TsgcUILiveSource_SSE,仅限注册版。esegece.sgcNavigation.Community 和 esegece.sgcGrid.Community,省略的部分与 Delphi 社区版构建相同。帮助:.NET 包和 Realtime UI 套件。
每个部分都遵循其产品的版本。.NET 社区版包省略的部分与 Delphi 社区版构建相同。
| 部分 | 产品 | 社区版 | 注册版 |
|---|---|---|---|
| 在线状态模型及其实时消息、头像、头像组和在线状态指示器 | sgcUICore | ||
| 通知模型、弹出通知、收件箱和偏好设置 | sgcNavigation | ||
| 实时通知消息 | sgcNavigation | — | |
| 与工具栏配合的徽标链接 | sgcToolbar | ||
| 与功能区配合的徽标链接 | sgcToolbar | — | |
| 活动模型、活动源、审核跟踪和两种磁贴 | sgcDashboard | ||
| 实时活动消息 | sgcDashboard | — | |
| 日志模型和日志链接 | sgcGrid | ||
| 实时日志消息 | sgcGrid | — | |
| 通过 WebSocket、MQTT 和 SSE 的实时数据源(sgcUICoreWS 桥接,需要 sgcWebSockets) | sgcUICore | — |
在 sgcUI 套件中,sgcNavigation、sgcToolbar 和 sgcGrid 包含在每个版本中,sgcDashboard 从 Professional 起提供。sgcUICore 随每个产品一同提供,每个产品也可单独购买,提供 Delphi 版和 .NET 版。请参阅功能矩阵、版本帮助主题和价格。
不是。每个部分都位于与之匹配的 sgcUI 产品中:在线状态和头像在 sgcUICore,通知在 sgcNavigation,未读徽标在 sgcToolbar,活动源和审核跟踪在 sgcDashboard,日志查看器在 sgcGrid。您随这些产品一并获得它们,使用相同的单元、包和 NuGet 包。
只有 sgcUICoreWS 桥接的实时数据源才需要。模型和控件只需要 sgcUICore 及其所属产品,没有服务器的应用程序可以通过代码驱动它们。这些部分都不需要 sgcHTML。
任何通过 WebSocket、MQTT 代理或服务器发送事件,每次变化发送一个 JSON 对象的服务器。四种消息形态都有文档,数据源不定义自己的协议。绑定还可以解开现有应用程序协议的信封。
桥接只负责入站。用户阅读或关闭通知时,应用程序通过同一个 sgcWebSockets 客户端发送自己的帧。实时数据源帮助主题中有一个示例。
不会。在套接字线程中到达的消息会排入队列,并在一次主线程访问中应用,因此 1,000 行日志的一批只需一次访问。日志模型也是线程安全的,因此工作线程可以直接向其追加。在 Delphi 7 至 2009 上,请保留客户端默认的通知方式,即在主线程中通知。
每个部分的模型和控件,以及实时在线状态消息。通知、活动和日志模型的实时消息、以功能区作为徽标目标,以及实时数据源仅限注册版。
产品页面:sgcNavigation、sgcToolbar、sgcDashboard、sgcGrid、sgcWebSockets以及 sgcUI 套件。