sgcWebSockets 2026.10

· Sürümler
sgcWebSockets 2026.10

sgcWebSockets 2026.10 yayınlandı. Bu sürümde üç ana hat var: sgcHTML, bir iş web uygulamasının ihtiyaç duyduğu ve artık elle yazmanıza gerek kalmayan parçaları kazandı; kriptografi tek bir harici kütüphane bile eklemeden kuantum sonrasına geçti; yeni Enterprise kimlik doğrulama bileşenleri de oturum açma ekranını devraldı.

Web Uygulamaları: Sıkıcı Kısımlar, Halloldu

Oturumlar, giriş ve CSRF. Yeni TsgcHTMLAuth bileşeni ve oturum depoları çerezi korur, giriş ve çıkış isteklerine yanıt verir, boşta kalan oturumları kapatır ve başarısız girişleri sınırlar. CSRF token'ı bir meta etiketinde taşınır, htmx bunu her isteğe kendiliğinden ekler, ve sunucu bunu taşımayan bir post'u reddeder.

FAuth := TsgcHTMLAuth.Create(Self);
FAuth.SessionStore := TsgcHTMLSessionStore_Memory.Create(Self);
FAuth.CookieName := 'app_session';
FEngine.Auth := FAuth;

Rota gibi okunan rotalar. Yol parametreleri, bir metot filtresi ve başlıklara, çerezlere ve gövdeye erişim:

with FRouter.Routes.Add do
begin
  Path := '/customers/{id}/edit';
  Methods := [hrmGet, hrmPost];
  RequireLogin := True;
  RequireRoles := 'admin,sales';
end;

Test edebileceğiniz sayfalar. DispatchDirect, arkasında hiçbir soket olmadan bir isteği yanıtlar ve yeni bir unit, üretilen HTML'i okuyup id, sınıf, etiket veya niteliğe göre öğeleri bulur ve bir sayfayı kaydedilmiş bir kopyayla karşılaştırır; böylece işaretlemedeki istenmeyen bir değişiklik bir müşteri yerine bir test tarafından fark edilir.

Bir uygulama gibi hissettiren navigasyon. Sayfalar tam bir yeniden yükleme olmadan değişir ve kaydırma konumunu ve kullanıcının o an yazmakta olduğunu korur; bir yükleme çubuğu, bağlantı koptuğunda bir iletişim kutusu ve bir istek başarısız olduğunda bir mesaj vardır. Tüm bunlar varsayılan olarak kapalıdır.

Dört Öne Çıkan Özellik

Bunların her birinin sonda bağlantısı verilen kendi yazısı var, o yüzden burada sadece ne olduğunu bulacaksınız:

İki Yoldan Push

Server sent events artık bir WebSocket yerine güncellemeleri taşıyabiliyor, bağlantı kesikken kaçırılanları yeniden oynatabiliyor ve sıradan HTTP sunucusuyla da çalışıyor. Web Push, kapalı olan bir tarayıcıya bile ulaşıyor. Bunlarla birlikte bir bildirim gelen kutusu ve bir tercihler tablosu geliyor, ve bildirim bileşeni belirli bir kullanıcının hangi kanalı alacağına karar veriyor.

Delphi İçin Bir EventSource İstemcisi

Yeni TsgcSSEClient, herhangi bir Server-Sent Events akışını tüketir ve her sürümde bulunur. Kendi kendine yeniden bağlanır ve Last-Event-ID gönderir, böylece sunucu akışın kaldığı yerden devam eder. Sunucu tarafından gönderilen retry: alanına uyulur, OnEvent size olay türünü, verileri ve kimliği verir, ReconnectOptions ise geri çekilme (backoff) ve jitter ekler. TLS, proxy ve kimlik doğrulama, bileşenin kullandığı HTTP istemcisini size veren OnBeforeConnect içinde ayarlanır.

FSSE := TsgcSSEClient.Create(Self);
FSSE.URL := 'https://example.com/events';
FSSE.ReconnectOptions.Backoff := True;
FSSE.ReconnectOptions.MaxInterval := 30000;
FSSE.ReconnectOptions.Jitter := 0.2;
FSSE.OnEvent := DoSSEEvent;
FSSE.Open;

procedure TForm1.DoSSEEvent(Sender: TObject; const aEvent: TsgcSSEEvent);
begin
  Memo1.Lines.Add(aEvent.EventType + ': ' + aEvent.Data);
end;

Arkasındaki ayrıştırıcı, TsgcSSEParser, herkese açıktır. Herhangi bir text/event-stream'in baytlarını istediğiniz boyutta parçalar halinde ona besleyin; bu tam olarak bir LLM akış yanıtının veya bir MCP Streamable HTTP yanıtının ne olduğudur.

FParser := TsgcSSEParser.Create;
FParser.OnEvent := DoSSEEvent;
FParser.Feed('event: delta' + #10 + 'data: {"text":"Hel"}' + #10#10);

Yeni bir demo, Demos\20.HTTP_Protocol\17.SSE_Client_Component, bunu uçtan uca gösterir.

AI: Üzerine Hareket Edebileceğiniz Yanıtlar

TsgcAIChat, yeni ChatJSON metodu aracılığıyla OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok ve Mistral üzerinde sizin sağladığınız bir şemayı izleyen JSON isteyebiliyor; bu metot yanıtı ayrıştırıyor ve okunamadığında ayrıştırma hatasını ekleyerek bir kez daha soruyor. Sohbet bileşeni artık görüntü de gönderip alıyor, ve BaseUrl artık yalnızca Ollama tarafından değil her sağlayıcı tarafından dikkate alınıyor, böylece bunlardan herhangi biri bir proxy'ye veya yerel bir ağ geçidine yönlendirilebiliyor.

Belge Çıkarımı: PDF'den Doğrulanmış JSON'a

Yeni TsgcAIDocumentExtractor, bir PDF veya görüntü ile bir JSON şeması alıyor ve o şemaya göre denetlenmiş JSON'u geri veriyor. OpenAI, Anthropic ve Gemini PDF'yi doğrudan okuyor, diğer görme modelleri ise görüntüleri okuyor. Yerleşik ön ayarlar faturaları, makbuzları ve kimlik belgelerini kapsıyor (dpInvoice, dpReceipt, dpIDCard), ve her alan bir güven puanıyla geliyor, böylece OnLowConfidence size MinConfidence'ın altındaki hangi değerlerin bir kez daha gözden geçirilmeyi hak ettiğini bildiriyor. Yanıt doğrulanmadığında, bileşen hataları ekleyerek bir kez daha soruyor (ValidationRetries).

FExtractor := TsgcAIDocumentExtractor.Create(Self);
FExtractor.AIChat := AIChat1;
FExtractor.Preset := dpInvoice;
FExtractor.MinConfidence := 0.8;
FExtractor.OnLowConfidence := DoLowConfidence;

Memo1.Lines.Text := FExtractor.ExtractFile('invoice.pdf');
if FExtractor.LastResult.FieldConfidence('total') < 0.8 then
  ShowMessage('Check the total by hand');

Bir TsgcAIOCRTesseract veya kurulacak hiçbir şey olmadan Windows 10 ve sonrasına yerleşik OCR'ı kullanan bir TsgcAIOCRWindows bağlayın ve OCRMode'u domFallback veya domAlways olarak ayarlayın; metin önce yerel olarak tanınır, böylece Ollama üzerinde çalışan yalnızca metin tabanlı bir model bile çıkarımı yapabilir. Kendi istemleriniz için, TsgcAIChat artık ChatWithDocument, ChatWithDocumentBase64, ChatWithAttachments ve ChatJSONWithAttachments'a sahip; bunlar TsgcAIChatAttachments listesinde tutulan bir veya birden fazla dosyayı mesajla birlikte gönderir.

Dinleyen, Karşılık Veren ve Araçları Çağıran Bir Sesli Ajan

Yeni TsgcAIVoiceAgent, dinleyen, kullanıcının sırasını bitirdiğini algılayan, kendi sesiyle yanıt veren ve araçlarınızı çağıran tek bir bileşendir; bunu OpenAI Realtime veya Gemini Live üzerinden yapar. WebSocket konuşur, veya OpenAI ile WebRTC, ve Windows, Android ve iOS üzerinde çalışır. Sıralar sunucu VAD'ı, semantik VAD, istemci tarafı bir VAD veya elle algılanır (vtdServerVAD, vtdSemanticVAD, vtdClientVAD, vtdManual). BargeIn ile kullanıcı araya girebilir, ve ajan konuşmayı durdurup yanıtını kesildiği noktada budar. OnTranscript, hem kullanıcının hem de ajanın canlı transkriptlerini sağlar.

FAgent := TsgcAIVoiceAgent.Create(Self);
FAgent.Provider := vapOpenAI;
FAgent.OpenAIOptions.ApiKey := 'sk-...';
FAgent.Instructions := 'You are the shop assistant. Keep answers short.';
FAgent.TurnDetection.Mode := vtdSemanticVAD;
FAgent.BargeIn := True;

oTool := FAgent.Tools.Add;
oTool.Name := 'find_product';
oTool.Description := 'Looks up a product by name';
oTool.Parameters :=
  '{"type":"object","properties":{"name":{"type":"string"}}}';

FAgent.OnTranscript := DoTranscript;
FAgent.OnToolCall := DoToolCall;
FAgent.Start;

procedure TForm1.DoToolCall(Sender: TObject; const aCallId, aName,
  aArguments: string; var aResult: string; var aHandled: Boolean);
begin
  if aName = 'find_product' then
  begin
    aResult := FindProduct(aArguments);
    aHandled := True;
  end;
end;

Araçlar OnToolCall'dan gelir, ve bir TsgcWSAPI_Client_MCP, MCPClient'a atandığında o MCP sunucusunun araçları modele otomatik olarak sunulur. Telefoni için Audio.Format, 8 kHz'de G.711 mu-law veya A-law'a geçer (vafG711ULaw, vafG711ALaw). Sesli ajan, Delphi 7'den Delphi 13'e kadar ve .NET için kullanılabilir, ve yeni bir demo onu bir TDataSet üzerinden çalışan sesli bir mağaza asistanına dönüştürür.

Kriptografi: Object Pascal ile Kuantum Sonrası

ML-KEM (FIPS 203), ML-DSA (FIPS 204) ve SLH-DSA (FIPS 205), X-Wing hibrit anahtar kapsülleme, kuantum sonrası X.509 sertifikaları ve sertifika otoriteleri, ve ML-DSA ile imzalanan JWT'ler. Tüm bunlar sgcCrypto paketinde Object Pascal ile, hiçbir harici kütüphane olmadan yazıldı ve NIST'in bilinen yanıt vektörlerine karşı doğrulandı.

Bunun üzerinde, yine saf Pascal ile yazılmış bir yerel TLS 1.3 ve TLS 1.2 motoru bulunuyor: bir istemci ya da sunucu, OpenSSL veya SChannel olmadan TLS konuşuyor, RFC 10024'ün hibrit kuantum sonrası gruplarını müzakere ediyor, ve ALPN, S N I, istemci sertifikaları ve işletim sisteminin güven deposunun isteğe bağlı kullanımını destekliyor. TLS 1.2, henüz TLS 1.3 yapamayan eşler için oradadır; varsayılan olarak ileri gizlilikli AES-GCM ve ChaCha20-Poly1305 paketleriyle, genişletilmiş ana sır ve düşürme korumasıyla gelir, ve TLSOptions.Version izin verilen en düşük sürümü belirler. Hibrit gruplar yalnızca TLS 1.3'te kalır.

Klasik taraf da aynı geçişte güçlendirildi: kör edilmiş sabit zamanlı RSA, sabit zamanlı eliptik eğri skaler çarpımı ve Ed25519, tablo kullanmayan AES ve GHASH, içe aktarılan özel anahtarların kendi ortak yarılarına karşı doğrulanması, ve minimal olmayan DER imzalarının reddedilmesi.

Kimlik Doğrulama: Herkesin Sorduğu Oturum Açma

Yeni bir kimlik doğrulama bileşenleri grubu, oturum açma ekranı hakkında her müşterinin sorduğu soruları yanıtlıyor. Enterprise ve All-Access sürümlerinde ve sgcAuth paketinde yer alıyor, aynı bileşenler sgcWebSockets .NET içinde de var.

Belirtilmeye Değer Düzeltmeler

.NET

.NET kütüphanesi de aynı hızda ilerliyor: ASP.NET Core için bir ClaimsPrincipal köprüsüyle kimlik doğrulama ve oturumlar, yönlendirici, test yardımcıları, SPA navigasyonu, yerel bir uç noktaya sahip SSE taşıması, yapılandırılmış çıktı, her iki OCR motoruna sahip belge çıkarımı, gerçek zamanlı sesli ajan, AI Data Pack, Web Push, MCP Apps, adaptörleriyle CRUD bileşeni ve yeni TsgcSSEClient; hepsi Delphi ile aynı API adlarıyla.

ASP.NET Core için Razor Tag Helper'lar. sgcHTML artık bir MVC veya Razor Pages uygulamasına Telerik UI ve DevExpress'in yaptığı gibi uyuyor. <sgc-grid>, <sgc-form>, <sgc-autocomplete>, <sgc-dialog> ve <sgc-chart> gibi Tag Helper'lar ile Html.Sgc() altındaki fluent karşılıkları, sunucuda Bootstrap 5 işler ve controller'larınızla htmx üzerinden konuşur, JavaScript framework'ü gerekmez. Grid, bir IQueryable üzerinde sayfalama, sıralama, filtreleme, arama ve XLSX ile PDF'e dışa aktarma yapar, böylece EF Core hepsini SQL olarak çalıştırır:

<sgc-grid name="orders" key="Id" items="Model"
          asp-action="Read" asp-export-action="Export" export="xlsx,pdf"
          page-size="15" sortable="true" filterable="true"
          searchable="true" push-url="true">
    <sgc-column field="Reference" searchable="true" />
    <sgc-column field="Customer" searchable="true" />
    <sgc-column field="OrderDate" title="Date" format="{0:yyyy-MM-dd}" filter="range" />
    <sgc-column field="Total" format="{0:N2}" align="right" filter="range" />
</sgc-grid>

// OrdersController
public IActionResult Read(SgcDataRequest request) => this.SgcGrid(request, Rows());

Girişler asp-for ile bağlanır ve ModelState hatalarını gösterir, this.SgcCloseDialog("edit-order", refresh: "orders") ise bir düzenleme diyalogunu kapatıp gridi yeniler. Diğerlerinde olmayan kısım sunucudan itmedir: live="true" olan bir grafik, bir arka plan servisi hub.BroadcastChartAsync(...) çağırdığında açık her tarayıcıda yeniden çizilir, sgcHTML WebSocket üzerinden ve SignalR kodu olmadan. esegece.sgcHTML.AspNetCore NuGet paketiyle gelir, Community sürümü dahil, 22.RazorMvc demosu ise tanıdık sipariş örneğinin onunla yeniden kurulmuş halidir.

Yükseltme

Yeni olan her şey eklemelidir ve varsayılan olarak kapalıdır. Yeni unit'leri ekleyin, paketlerinizi yeniden derleyin, ve mevcut bir uygulama tam olarak eskisi gibi davranmaya devam edecek.

Uzun Sürümler

İzleyin

Bununla ilgili kısa bir video, eSeGeCe kanalında yer alıyor.

Sorularınız, geri bildiriminiz veya taşıma konusunda yardıma mı ihtiyacınız var? İletişime geçin — kodu yazan kişilerden yanıt alacaksınız.