unit uWebServerKandinsky; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.NetEncoding,IdContext, IdCustomHTTPServer, IdHTTPServer, IdGlobal, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit, FMX.Controls.Presentation, FMX.StdCtrls, uKandinskyAPI, FMX.Memo.Types, System.json, FMX.ScrollBox, FMX.Memo, System.IOUtils, System.SyncObjs,System.DateUtils; type TKandinsky_Web = class(TObject) IdHTTPServer1: TIdHTTPServer; procedure IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); private FCriticalSection: TCriticalSection; FCurrentImage: string; FImageTime: TDateTime; FCurrentText: string; ka:TFusionBrainAPI; function GenerateHTML: string; function GenerateJSON: string; procedure CleanupOldMessages; procedure GenerationDone(Sender: TObject; const FileName: string); procedure GenerationError(Sender: TObject; const ErrorMessage: string); procedure GenerationUpdate(Sender: TObject; const Message: string); public constructor Create(aKey:string; aSecret:string; aPort:integer); destructor Destroy; procedure generate(prompt:string; aNick:string); procedure ActiveServer(aEn: boolean); end; implementation { TKandinsky_Web } procedure TKandinsky_Web.ActiveServer(aEn: boolean); begin IdHTTPServer1.Active :=aEn; end; procedure TKandinsky_Web.CleanupOldMessages; begin if FileExists(FCurrentImage) then begin DeleteFile(FCurrentImage); end; end; constructor TKandinsky_Web.Create(aKey:string; aSecret:string; aPort:integer); begin IdHTTPServer1 := TIdHTTPServer.Create; IdHTTPServer1.DefaultPort := aPort; IdHTTPServer1.OnCommandGet := IdHTTPServer1CommandGet; ka:=TFusionBrainAPI.Create(nil,aKey, aSecret); ka.OnGenerationDone := GenerationDone; ka.OnStatusUpdate:=GenerationUpdate; ka.OnError:=GenerationError; FCriticalSection:=TCriticalSection.Create; //flog.toLog(0,'uWebServerKandinsky','Create','Веб сервер запущен'); end; destructor TKandinsky_Web.Destroy; begin IdHTTPServer1.Active := False; FreeAndNil(FCriticalSection); CleanupOldMessages; end; procedure TKandinsky_Web.generate(prompt: string; aNick:string); begin //flog.toLog(0,'uWebServerKandinsky','generate','Новый запрос на генерацию'); FCriticalSection.Enter; try FCurrentText := aNick; finally FCriticalSection.Leave; end; ka.StartGeneration(prompt); //flog.toLog(0,'uWebServerKandinsky','generate','Запрос на генерацию отправлен'); end; function TKandinsky_Web.GenerateHTML: string; begin Result := '' + '
' + '' + '' + '' + '' + '' + '