Paquete sgcUI Realtime UI: presencia, notificaciones, actividad y registros en vivo para Delphi, C++Builder y .NET

· Componentes
Paquete sgcUI Realtime UI: presencia, notificaciones, actividad y registros en vivo para Delphi y .NET
Novedad · paquete sgcUI Realtime UI

Tu aplicación, en vivo.
Quién está conectado, qué ha pasado, qué está fallando.

Avatares de presencia, toasts y una bandeja de notificaciones, una insignia de campana, un feed de actividad con registro de auditoría y un visor de logs en vivo, todo alimentado por WebSocket, MQTT o Server Sent Events. Controles nativos para Delphi, C++Builder y .NET.

  • VCL
  • FireMonkey
  • C++Builder
  • WinForms
  • WPF
  • Avalonia
La demo de operaciones Realtime: presencia del equipo, feed de actividad, bandeja de notificaciones y un log en vivo
4modelos en vivo
3fuentes en vivo
6frameworks de UI
12idiomas

Las consolas de operaciones, los helpdesks, los paneles de administración y las pantallas de trading tienen que responder a las mismas preguntas mientras los datos no dejan de moverse: quién está conectado ahora mismo, qué requiere mi atención, quién ha cambiado qué y qué está fallando en este momento. El paquete sgcUI Realtime UI responde a cada una con un modelo y un conjunto de controles nativos, y los conecta todos a un feed en vivo con un único tipo de mensaje JSON.

El paquete Realtime UI en un minuto: presencia, notificaciones, actividad y registros en vivo, alimentados por un solo mensaje JSON. También en YouTube.

PresenciaAvatares, indicadores de estado y quién está conectado
NotificacionesToasts, una bandeja, preferencias y una insignia de campana
ActividadUn feed de quién hizo qué, y un registro de auditoría
LogsUn visor de logs en vivo sobre cualquier sgcGrid

El paquete Realtime UI no es un producto aparte. Cada pieza vive en el producto sgcUI que amplía, sgcUICore, sgcNavigation, sgcToolbar, sgcDashboard y sgcGrid, en las unidades, paquetes y paquetes NuGet que ya utilizas, y sigue la edición de ese producto. Funciona en VCL y FireMonkey para Delphi y C++Builder, y en WinForms, WPF y Avalonia para .NET, con temas claro, oscuro y de alto contraste, diseños de derecha a izquierda y 12 idiomas.

Presencia: quién está conectado

TsgcUIPresenceModel mantiene los usuarios de tu aplicación con su nombre, iniciales, color, imagen de avatar, estado (conectado, ausente, ocupado o desconectado), texto de estado y hora de la última conexión. Los controles leen el modelo y se repintan solos cuando cambia un estado.

Una lista de equipo con indicadores de presencia y un grupo de avatares con un chip +7
La lista del equipo y el grupo de avatares de la barra de herramientas, ambos dibujados a partir de un único modelo de presencia.
uses
  sgcUICore_Presence, sgcUICore_Presence_VCL;

procedure TfrmMain.LoadTeam;
begin
  // usually set in the Object Inspector
  sgcVCLAvatarGroup1.Model := FPresence;
  sgcVCLAvatarGroup1.MaxVisible := 5;

  FPresence.AddOrUpdate('u1', 'Alex Morgan');
  FPresence.AddOrUpdate('u2', 'Bianca Ruiz', uprAway, 'Back at 3');
  // later, when the status changes
  FPresence.SetStatus('u1', uprBusy, 'In a meeting');
end;

Notificaciones: toasts, una bandeja y una insignia de campana

TsgcNotificationModel guarda las notificaciones del usuario actual, con título, cuerpo, gravedad, hora, estado de lectura, acciones y grupo, y lleva la cuenta de las no leídas. Cuatro piezas lo muestran:

La bandeja de notificaciones sobre el editor de preferencias, y el elemento Notificaciones de la barra de herramientas con su insignia de no leídas
La bandeja agrupada por día, las preferencias de canal por categoría y la insignia de no leídas en la barra de herramientas.
uses
  sgcNavigation_Notification, sgcNavigation_Toast_VCL,
  sgcNavigation_Inbox_VCL, sgcToolbar_BadgeLink;

procedure TfrmMain.SetupNotifications;
begin
  sgcVCLToastManager1.Model := FNotifications;
  sgcVCLToastManager1.Preferences := FPreferences;
  sgcVCLNotificationInbox1.Model := FNotifications;
  // the unread count as the badge of the first toolbar item
  sgcToolbarBadgeLink1.Source := FNotifications;
  sgcToolbarBadgeLink1.Target := sgcVCLToolbar1;
  sgcToolbarBadgeLink1.ItemIndex := 0;

  FNotifications.Add('Deployed billing', 'Version 1.8 is live in 3 regions',
    nsvSuccess, 'deploy');
end;

Feed de actividad y registro de auditoría: quién hizo qué

TsgcDashboardActivityModel registra quién hizo qué y cuándo: el actor, un verbo, el objeto, un resultado y, a efectos de auditoría, el valor anterior y posterior de cada campo modificado. Los nombres, colores y avatares de los actores provienen del modelo de presencia, así que el feed y la lista del equipo siempre coinciden.

El feed de actividad con avatares de actores, verbos, objetos y resultados
El feed de actividad: cada fila muestra el avatar del actor, el verbo, el objeto y el resultado.
uses
  sgcDashboard_Activity, sgcDashboard_Activity_VCL;

procedure TfrmMain.RecordApproval;
var
  oItem: TsgcDashboardActivity;
begin
  FActivity.Presence := FPresence; // actor names, colours and avatars
  sgcVCLActivityFeed1.Model := FActivity;
  sgcVCLAuditTrail1.Model := FActivity;

  oItem := TsgcDashboardActivity.Create;
  oItem.Id := 'a18';
  oItem.Time := FActivity.NowUTC;
  oItem.ActorId := 'u2';
  oItem.Verb := 'approved';
  oItem.ObjectName := 'Change request 102';
  oItem.Outcome := 'success';
  oItem.Changes.Add('status', 'pending', 'approved');
  // the model owns the item and inserts it by Time
  FActivity.AddActivity(oItem);
end;

Visor de logs en vivo: qué está fallando ahora mismo

TsgcGridLogModel es un búfer circular thread safe de líneas de log con niveles desde trace hasta fatal, un origen, un mensaje y propiedades, filtros por nivel, origen y texto, y exportación a texto, JSON y CSV. Cualquier hilo puede añadir líneas; los cambios llegan a la pantalla por lotes. TsgcGridLogLink convierte cualquier sgcGrid en un visor de logs.

Un log en vivo en un sgcGrid con líneas de advertencia e información en los colores de su nivel
El log en vivo: un sgcGrid con colores de nivel, Pause, Resume, un filtro de nivel y Copy lines.
uses
  sgcGrid_Log, sgcGrid_LogLink;

procedure TfrmMain.SetupLog;
begin
  FLog.Capacity := 100000;
  sgcGridLogLink1.Model := FLog;
  sgcGridLogLink1.Grid := sgcVCLGrid1;
  sgcGridLogLink1.FollowTail := True;
  sgcGridLogLink1.Active := True;
end;

// from any thread
FLog.Append(gllWarning, 'gateway', 'slow query 668 ms');

Datos en vivo: un mensaje para cada feed

Los cuatro modelos leen el mismo tipo de mensaje JSON, de modo que una sola conexión puede transportarlos todos. Cada mensaje indica su type y una op, y cada modelo toma únicamente los suyos:

{"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"}}

Tres fuentes en vivo conectan los modelos con un servidor mediante sgcWebSockets: TsgcUILiveSource_WebSocket, TsgcUILiveSource_MQTT y TsgcUILiveSource_SSE. Cada fuente se engancha a un cliente que ya has configurado, con su URL, credenciales, TLS y reconexión, y entrega cada mensaje a sus enlaces. Los mensajes que llegan en un hilo de trabajo se aplican en el hilo principal en un solo lote, de modo que una ráfaga de mil líneas de log cuesta una sola visita a la interfaz de usuario. Un enlace también puede elegir un topic MQTT, el nombre de un evento SSE, un filtro o una ruta dentro de un sobre de aplicación.

uses
  sgcWebSocket, sgcUICoreWS_Live, sgcUICoreWS_Live_WebSocket;

procedure TfrmMain.ConnectLive;
var
  oSource: TsgcUILiveSource_WebSocket;
begin
  oSource := TsgcUILiveSource_WebSocket.Create(Self);
  oSource.Client := sgcWebSocketClient1;
  // every message carries its type, so each model takes only its own
  oSource.Bindings.Add.Target := FPresence;
  oSource.Bindings.Add.Target := FNotifications;
  oSource.Bindings.Add.Target := FActivity;
  oSource.Bindings.Add.Target := FLog;
end;

Las fuentes en vivo son de la edición Registrada y necesitan sgcWebSockets, como cualquier puente de sgcUI con sgcWebSockets. Sin servidor, o en una compilación Community, la aplicación llama en su lugar a la API del modelo: AddOrUpdate y SetStatus, Add o Post, AddActivity y Append.

Todas las plataformas, en claro y oscuro

Los mismos modelos y el mismo JSON funcionan en todas las plataformas. Los controles .NET son controles nativos de WinForms, WPF y Avalonia con los mismos nombres en los paquetes esegece.sgcUICore, esegece.sgcNavigation, esegece.sgcToolbar, esegece.sgcDashboard y esegece.sgcGrid, y todos los temas de la suite, incluidos el oscuro y el de alto contraste, llegan a los nuevos controles.

La demo de operaciones Realtime en WinForms
WinForms
La demo de operaciones Realtime en WPF
WPF
La demo de operaciones Realtime en Avalonia con toasts abajo a la derecha
Avalonia
La demo de operaciones Realtime en FireMonkey, tema claro
FireMonkey, claro
La demo de operaciones Realtime en FireMonkey, tema oscuro
FireMonkey, oscuro

La demo de operaciones Realtime

La demo de operaciones Realtime reúne todas las piezas en una sola pantalla: una lista de equipo, toasts con la bandeja y las preferencias, una insignia de campana, el feed de actividad y el registro de auditoría, y un log en vivo, todo impulsado por un simulador integrado, de modo que funciona sin servidor. Se incluye para VCL, FireMonkey y C++Builder en las demos de la Suite de Delphi, y para WinForms, WPF y Avalonia en las demos de la Suite .NET, y el simulador produce la misma secuencia en todas las plataformas. Una segunda demo VCL, RealtimeLive, envía los mismos mensajes a través de un servidor WebSocket en proceso y un TsgcUILiveSource_WebSocket, y un cuadro de URL permite conectarla a tu propio servidor.

Ediciones

Cada pieza sigue la edición del producto que la contiene. Las piezas de presencia de sgcUICore y las de logs de sgcGrid están en todas las ediciones, Community incluida, y los mensajes de presencia también. Las piezas de notificaciones e insignia necesitan sgcNavigation y sgcToolbar, en sgcUI Standard y superiores, y las de actividad necesitan sgcDashboard, en sgcUI Professional y superiores. Los paquetes .NET Community gratuitos también las incluyen, mientras que la edición Community de Delphi solo trae sgcGrid. Los mensajes en vivo de notificaciones, actividad y logs, la cinta como destino de la insignia y las tres fuentes en vivo son de la edición Registrada. Consulta la página del paquete Realtime UI y la ayuda del paquete Realtime UI para conocer los detalles de cada producto.

Pon tu aplicación en vivo

Una versión de prueba para Delphi y otra para C++Builder instalan todos los productos sgcUI, incluido el paquete Realtime UI.

¿Preguntas o comentarios? Ponte en contacto, recibirás respuesta de las personas que escribieron el código.