sgcUI リアルタイム UI パック
稼働中のシステムに追従する画面に必要なものすべてを、すでにお使いの sgcUI 製品に組み込みました。誰がオンラインか、トーストと未読バッジ付きの通知受信トレイ、監査証跡付きのアクティビティフィード、ライブログビューアーです。サーバーが WebSocket、MQTT、Server-Sent Events で値を届けることも、自分のコードから直接操作することもできます。
稼働中のシステムに追従する画面に必要なものすべてを、すでにお使いの sgcUI 製品に組み込みました。誰がオンラインか、トーストと未読バッジ付きの通知受信トレイ、監査証跡付きのアクティビティフィード、ライブログビューアーです。サーバーが WebSocket、MQTT、Server-Sent Events で値を届けることも、自分のコードから直接操作することもできます。
リアルタイム UI パックは独立した製品ではありません。各要素は、それが属する sgcUI 製品の中にあり、すでにお使いのユニット、パッケージ、NuGet パッケージに含まれ、その製品のエディションに従います。どの要素も必要なのは sgcUICore とそれを含む製品だけで、sgcHTML は不要です。
すべてのモデルに値を届ける、sgcWebSockets の WebSocket、MQTT、Server-Sent Events 接続です。
製品:sgcUICore、sgcUICoreWS ブリッジ
ライブデータ →Delphi 7 から Delphi 13 の VCL、Delphi XE6 以降の FireMonkey、C++Builder、そして .NET の WinForms、WPF、Avalonia に対応します。リアルタイム UI パックのヘルプトピックを読む。
誰がオンラインかを、すべての sgcUI 製品で表示します。
TsgcUIPresenceModel は、ユーザーとそのステータス (オンライン、退席中、取り込み中、オフライン) を、ステータステキストとともに保持します。アバターのコントロールはモデルに追従するので、ステータスが変わると、そのユーザーのすべてのアバターとインジケーターが一度に再描画されます。
AddOrUpdate と SetStatus で、または変更ごとに 1 つのライブメッセージで更新されます。ヘルプ:プレゼンス と アバターとプレゼンスインジケーター。
デスクトップアプリケーション向けの通知センターです。
TsgcNotificationModel は、通知をタイトル、重大度、カテゴリ、既読状態とともに保持し、未読件数を管理します。トーストマネージャー、受信トレイ、設定、バッジリンクは、すべてこのモデルに追従します。
TsgcToolbarBadgeLink が、未読件数をツールバー項目または Ribbon 項目に表示します。99 を超えると 99+ になります。誰が何をしたか、そして何が変わったか。
TsgcDashboardActivityModel は、各アクティビティを、アクター、動詞、オブジェクトと、変更されたフィールドとして記録します。アクティビティフィードと監査証跡は、同じモデルの 2 つのビューです。
画面を固まらせることなく、何千ものログ行に追従します。
TsgcGridLogModel は、時刻、trace から fatal までのレベル、ソース、メッセージを持つログ行を保持し、TsgcGridLogLink はそれらを仮想モードの sgcGrid に表示します。ログモデルはスレッドセーフなので、ワーカースレッドから直接行を追加できます。
sgcUICoreWS ブリッジのライブソースは、サーバーが sgcWebSockets の接続で送る JSON メッセージを受け取り、モデルに渡します。コントロールは、コードを書かなくてもすぐに追従します。
| ソース | sgcWebSockets クライアント | 読み取るイベント | メッセージの選択方法 |
|---|---|---|---|
TsgcUILiveSource_WebSocket | TsgcWebSocketClient | OnMessage、すべてのテキストメッセージ | メッセージのメンバーに対するフィルター |
TsgcUILiveSource_MQTT | TsgcWSPClient_MQTT | OnMQTTPublish、すべてのパブリッシュ | MQTT のトピックフィルター |
TsgcUILiveSource_SSE | TsgcHTTP1Client | OnSSEMessage、イベントストリーム | SSE のイベントタイプ |
新しいプロトコルはありません。各モデルは、自分のフィードのライブメッセージを読みます。変更ごとに 1 つの 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;
// モデルごとに 1 つのバインディング。トピックで選択します
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/#');
ライブソースは登録版のみで、sgcUI のすべての sgcWebSockets ブリッジと同様に sgcWebSockets が必要です。サーバーがない場合や Community のビルドでは、アプリケーションが各モデルの API を呼び出します。プレゼンスモデルの AddOrUpdate と SetStatus、通知モデルの Add または Post、アクティビティモデルの Add、ログモデルの Append です。
シミュレーターで動く、12 人のチームのオペレーションコンソール
Suite デモの Realtime は、このパックでオペレーションコンソールを組み立てます。ツールバーには、バッジが未読件数を示すベル、現在のユーザーのアバター、チームのアバターグループが並びます。名簿はすべてのメンバーをプレゼンスインジケーター付きで一覧表示し、1 つのタブにアクティビティフィード、もう 1 つに監査証跡があり、通知受信トレイは設定エディターの上にあり、ログのグリッドは最新の行に追従し、トーストは右下に現れます。
--test result.txt を付けて実行すると自己チェックが走り、番号付きの PASS または FAIL が 1 行ずつ出力されます含まれる sgcUI 製品
他の sgcUI スイートデモもご覧ください。
モデル、コントロール、ライブソースは、.NET でも各製品の NuGet パッケージの中で同じ名前を持ち、同じ JSON メッセージを読みます。
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 など、NuGet の無償の Community パッケージは、Delphi の Community ビルドと同じ部分を省いています。ヘルプ:.NET パッケージ と リアルタイム UI パック。
各要素は、その製品のエディションに従います。.NET の Community パッケージは、Delphi の Community ビルドと同じ部分を省いています。
| 要素 | 製品 | Community | 登録版 |
|---|---|---|---|
| プレゼンスモデルとそのライブメッセージ、アバター、アバターグループ、プレゼンスインジケーター | sgcUICore | ||
| 通知モデル、トースト、受信トレイ、設定 | sgcNavigation | ||
| ライブ通知メッセージ | sgcNavigation | — | |
| ツールバーでのバッジリンク | sgcToolbar | ||
| Ribbon でのバッジリンク | 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 は不要です。
変更ごとに 1 つの JSON オブジェクトを、WebSocket、MQTT ブローカー、または Server-Sent Events で送るサーバーなら、どれでも使えます。4 つのメッセージ形式は文書化されており、ソースは独自のプロトコルを定義しません。バインディングで、既存のアプリケーションプロトコルのエンベロープを取り出すこともできます。
ブリッジは受信専用です。ユーザーが通知を読んだり非表示にしたりしたときは、アプリケーションが同じ sgcWebSockets クライアントを通じて独自のフレームを送ります。ライブソースのヘルプトピックに例があります。
固まりません。ソケットスレッドに届いたメッセージはキューに入り、メインスレッドへの 1 回の切り替えで適用されるので、1,000 行のログのバーストでも切り替えは 1 回です。ログモデルはスレッドセーフなので、ワーカースレッドから直接行を追加することもできます。Delphi 7 から 2009 では、メインスレッドで通知するクライアントの既定の通知方法を維持してください。
すべての要素のモデルとコントロール、そしてライブのプレゼンスメッセージです。通知、アクティビティ、ログの各モデルのライブメッセージ、バッジの対象としての Ribbon、ライブソースは、登録版のみです。
製品ページ:sgcNavigation、sgcToolbar、sgcDashboard、sgcGrid、sgcWebSockets、sgcUI スイート。