procedure TForm2.btnRegisterWareClick(Sender: TObject); begin TThread.CreateAnonymousThread( procedure() begin clmClient.ServerMethods1Client.RegisterWare(seWareID.Value, clmClient.DSClientCallbackChannelManager1.ManagerId) end).Start; end;
TmyCallback = class(TDBXCallback) protected FSelectedString: Integer; procedure SelectString(const Arg: TJSONValue); public function Execute(const Arg: TJSONValue): TJSONValue; override; end; { TmyCallback } function TmyCallback.Execute(const Arg: TJSONValue): TJSONValue; begin TThread.Synchronize(nil, procedure() // - begin SelectString(Arg); end); Result := TJSONNumber.Create(FSelectedString); end; procedure TmyCallback.SelectString(const Arg: TJSONValue); var strs: TStringList; enum: TJSONPairEnumerator; val, str: string; begin enum := TJSONObject(Arg).GetEnumerator; if Assigned(enum) then begin strs := TStringList.Create; try while enum.MoveNext do begin Val:= enum.Current.JsonString.Value; str := enum.Current.JsonValue.Value; strs.AddObject(str, TObject(val.ToInteger())); end; FSelectedString := TfrmSelectString.SelectString(strs); finally strs.Free; end; end; enum.Free; end;
procedure TServerMethods1.RegisterWare(ID: Integer; ClientID: string); var Params, ParamsServ: TJSONObject; ResObj: TJSONValue; temp: TJSONValue; begin ResObj := nil; Params := TJSONObject.Create; Params.AddPair(TJSONPair.Create('1', ' 42')); Params.AddPair(TJSONPair.Create('2', ' 43')); Params.AddPair(TJSONPair.Create('3', ' 44')); ParamsServ := TJSONObject(Params.Clone); ServerContainer1.DSServer1.NotifyCallback(ClientID, 'SelectString', Params, ResObj); if Assigned(ResObj) then begin temp := ParamsServ.GetValue(ResObj.Value); if Assigned(temp) then Form1.QueueLogMsg(Format('RegisterWare %d %s', [ID, temp.ToString])) else Form1.QueueLogMsg(Format('RegisterWare %d ', [ID])); ResObj.Free; ParamsServ.Free; end else Form1.QueueLogMsg(Format('RegisterWare %d ', [ID])); end;
Source: https://habr.com/ru/post/202688/
All Articles