sgcUI 실시간 UI 팩: Delphi, C++Builder, .NET을 위한 접속 상태, 알림, 활동, 실시간 로그

· 컴포넌트
sgcUI 실시간 UI 팩: Delphi와 .NET을 위한 접속 상태, 알림, 활동, 실시간 로그
신규 · sgcUI 실시간 UI 팩

내 애플리케이션을 실시간으로.
누가 접속 중이고, 무슨 일이 있었고, 무엇이 실패하는가.

접속 상태 아바타, 토스트 알림과 알림 수신함, 벨 배지, 감사 추적이 있는 활동 피드, 실시간 로그 뷰어를 모두 WebSocket, MQTT, Server Sent Events로 구동합니다. Delphi, C++Builder, .NET용 네이티브 컨트롤입니다.

  • VCL
  • FireMonkey
  • C++Builder
  • WinForms
  • WPF
  • Avalonia
실시간 운영 데모: 팀 접속 상태, 활동 피드, 알림 수신함, 실시간 로그
4실시간 모델
3실시간 소스
6UI 프레임워크
12언어

운영 콘솔, 헬프 데스크, 관리자 패널, 트레이딩 화면은 모두 데이터가 계속 움직이는 가운데 같은 질문에 답해야 합니다. 지금 누가 접속 중인지, 무엇에 주의를 기울여야 하는지, 누가 무엇을 바꿨는지, 그리고 지금 무엇이 실패하고 있는지입니다. sgcUI 실시간 UI 팩은 모델과 네이티브 컨트롤 세트로 각각에 답하고, 한 가지 종류의 JSON 메시지로 모두를 실시간 피드에 연결합니다.

1분 만에 보는 Realtime UI 팩: 하나의 JSON 메시지로 갱신되는 접속 상태, 알림, 활동, 실시간 로그. YouTube에서도 보기.

접속 상태아바타, 상태 점, 접속 중인 사용자
알림토스트 알림, 수신함, 환경설정, 벨 배지
활동누가 무엇을 했는지 보여주는 피드와 감사 추적
로그모든 sgcGrid에서 쓸 수 있는 실시간 로그 뷰어

실시간 UI 팩은 별도의 제품이 아닙니다. 각 구성 요소는 그것이 확장하는 sgcUI 제품인 sgcUICore, sgcNavigation, sgcToolbar, sgcDashboard, sgcGrid 안에 있으며, 이미 사용 중인 유닛, 패키지, NuGet 패키지에 포함되고 해당 제품의 에디션을 따릅니다. Delphi와 C++Builder에서는 VCL과 FireMonkey, .NET에서는 WinForms, WPF, Avalonia에서 동작하며, 라이트, 다크, 고대비 테마, 오른쪽에서 왼쪽으로 쓰는 레이아웃, 12개 언어를 지원합니다.

접속 상태: 누가 접속 중인가

TsgcUIPresenceModel은 애플리케이션의 사용자를 이름, 이니셜, 색상, 아바타 이미지, 상태(온라인, 자리 비움, 다른 용무 중, 오프라인), 상태 텍스트, 마지막 접속 시간과 함께 보관합니다. 컨트롤은 모델을 읽고 상태가 바뀌면 스스로 다시 그립니다.

접속 상태 표시점이 있는 팀 명단과 +7 칩이 있는 아바타 그룹
도구 모음의 팀 명단과 아바타 그룹. 둘 다 하나의 접속 상태 모델에서 그려집니다.
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;

알림: 토스트 알림, 수신함, 벨 배지

TsgcNotificationModel은 현재 사용자의 알림을 제목, 본문, 심각도, 시간, 읽음 상태, 동작, 그룹과 함께 보관하고 읽지 않은 개수를 관리합니다. 네 가지 구성 요소가 이를 보여줍니다.

환경설정 편집기 위에 있는 알림 수신함과, 읽지 않음 배지가 있는 알림 도구 모음 항목
날짜별로 묶은 수신함, 카테고리별 채널 환경설정, 도구 모음의 읽지 않음 배지.
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;

활동 피드와 감사 추적: 누가 무엇을 했는가

TsgcDashboardActivityModel은 누가 언제 무엇을 했는지 기록합니다. 행위자, 동사, 대상, 결과, 그리고 감사를 위해 변경된 모든 필드의 이전 값과 이후 값입니다. 행위자 이름, 색상, 아바타는 접속 상태 모델에서 가져오므로 피드와 명단은 항상 일치합니다.

행위자 아바타, 동사, 대상, 결과가 표시된 활동 피드
활동 피드: 모든 행에 행위자 아바타, 동사, 대상, 결과가 표시됩니다.
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;

실시간 로그 뷰어: 지금 무엇이 실패하는가

TsgcGridLogModel은 로그 줄의 스레드 안전 링 버퍼로, trace부터 fatal까지의 수준, 소스, 메시지, 속성을 가지며, 수준, 소스, 텍스트 필터와 텍스트, JSON, CSV 내보내기를 지원합니다. 어느 스레드에서나 추가할 수 있고, 변경 사항은 묶음으로 화면에 반영됩니다. TsgcGridLogLink는 모든 sgcGrid를 로그 뷰어로 바꿔 줍니다.

경고와 정보 줄이 각 수준 색상으로 표시된 sgcGrid의 실시간 로그
실시간 로그: 수준별 색상, Pause, Resume, 수준 필터, Copy lines가 있는 sgcGrid.
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');

실시간 데이터: 모든 피드를 위한 하나의 메시지

네 모델은 같은 종류의 JSON 메시지를 읽으므로 하나의 연결로 모두를 전달할 수 있습니다. 각 메시지는 자신의 type과 op를 밝히고, 각 모델은 자기 몫만 가져갑니다.

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

세 가지 실시간 소스가 sgcWebSockets를 통해 모델을 서버에 연결합니다. TsgcUILiveSource_WebSocket, TsgcUILiveSource_MQTT, TsgcUILiveSource_SSE입니다. 각 소스는 URL, 자격 증명, TLS, 재연결이 이미 설정된 클라이언트에 연결되어 모든 메시지를 바인딩에 전달합니다. 작업자 스레드에서 도착한 메시지는 메인 스레드에서 한 번의 배치로 적용되므로, 로그 1000줄이 한꺼번에 들어와도 사용자 인터페이스에는 한 번만 접근합니다. 바인딩에서는 MQTT 토픽, SSE 이벤트 이름, 필터, 애플리케이션 봉투 안의 경로를 지정할 수도 있습니다.

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;

실시간 소스는 Registered이며, sgcUI의 모든 sgcWebSockets 브리지와 마찬가지로 sgcWebSockets가 필요합니다. 서버가 없거나 Community 빌드에서는 애플리케이션이 대신 모델 API를 호출합니다. AddOrUpdate와 SetStatus, Add 또는 Post, AddActivity, Append입니다.

모든 플랫폼, 라이트와 다크

같은 모델과 같은 JSON이 모든 플랫폼에서 실행됩니다. .NET 컨트롤은 esegece.sgcUICore, esegece.sgcNavigation, esegece.sgcToolbar, esegece.sgcDashboard, esegece.sgcGrid 패키지에 같은 이름으로 들어 있는 네이티브 WinForms, WPF, Avalonia 컨트롤이며, 다크와 고대비를 포함한 스위트의 모든 테마가 새 컨트롤에도 적용됩니다.

WinForms에서 실행한 실시간 운영 데모
WinForms
WPF에서 실행한 실시간 운영 데모
WPF
오른쪽 아래에 토스트 알림이 표시된 Avalonia의 실시간 운영 데모
Avalonia
FireMonkey에서 실행한 실시간 운영 데모, 라이트 테마
FireMonkey, 라이트
FireMonkey에서 실행한 실시간 운영 데모, 다크 테마
FireMonkey, 다크

실시간 운영 데모

실시간 운영 데모는 모든 구성 요소를 한 화면에 모았습니다. 팀 명단, 수신함과 환경설정이 있는 토스트 알림, 벨 배지, 활동 피드와 감사 추적, 그리고 실시간 로그입니다. 모두 내장 시뮬레이터로 구동되므로 서버 없이 실행됩니다. Delphi 스위트 데모에는 VCL, FireMonkey, C++Builder용으로, .NET 스위트 데모에는 WinForms, WPF, Avalonia용으로 포함되어 있으며, 시뮬레이터는 모든 플랫폼에서 같은 순서를 만들어 냅니다. 두 번째 VCL 데모 RealtimeLive는 같은 메시지를 프로세스 내 WebSocket 서버와 TsgcUILiveSource_WebSocket을 통해 보내며, URL 상자로 자신의 서버에 연결할 수도 있습니다.

에디션

각 구성 요소는 그것을 담고 있는 제품의 에디션을 따릅니다. sgcUICore의 접속 상태 구성 요소와 sgcGrid의 로그 구성 요소는 Community를 포함한 모든 에디션에 있으며, 접속 상태 메시지도 마찬가지입니다. 알림과 배지 구성 요소에는 sgcUI Standard 이상의 sgcNavigation과 sgcToolbar가, 활동 구성 요소에는 sgcUI Professional 이상의 sgcDashboard가 필요합니다. 무료 .NET Community 패키지에도 포함되지만, Delphi Community 에디션에는 sgcGrid만 포함됩니다. 실시간 알림, 활동, 로그 메시지, 배지 대상으로서의 리본, 세 가지 실시간 소스는 Registered입니다. 제품별 자세한 내용은 실시간 UI 팩 페이지와 실시간 UI 팩 도움말을 읽어 보세요.

내 애플리케이션을 실시간으로 만드세요

Delphi용 체험판 하나와 C++Builder용 체험판 하나로 실시간 UI 팩을 포함한 모든 sgcUI 제품이 설치됩니다.

질문이나 의견이 있으신가요? 문의하세요. 코드를 작성한 사람들이 직접 답변해 드립니다.