четверг, 21 мая 2015 г.

Демонстрация мобильного приложения

Искал чем можно показать экран мобильного приложения, чтобы можно было вывести на большой экран проектора, и нашел сервис http://www.mobizen.com

Для моего Samsung Galaxy Core 2 Dual прекрасно подошёл.

среда, 20 мая 2015 г.

Таймауты

 Черт побери, почему именно 5 секунд на вызов обратной функции, Карл?!

procedure TDSClientCallbackChannelManager.Invoke(const Id: string;
  Data: TJSONValue; out Response: TJSONValue);
var
  Item: TDSCallbackItem;
  Callback: TDBXCallback;
  ExecThread: TDSExecuteThread;
begin
  TMonitor.Enter(FLocalCallbackRepo);
  try
    if FLocalCallbackRepo.TryGetValue(Id, Item) then
    begin
      Callback := Item.Callback;
      try
        TMonitor.Enter(Callback);
        ExecThread := TDSExecuteThread.Create(Callback, Data);

        if not TMonitor.Wait(Callback, 5000) then
          ExecThread.Terminate;

        Response := ExecThread.Response;

среда, 13 мая 2015 г.

Потихоньку ваяю клиент-серверное приложение, применяя Datasnap Callback.
На время ожидания обработки запроса сервером буду показывать popup-форму ожидания, закрывающуюся по обработчику OnTerminate потока.
Естественно, это уже не анонимный поток, а специфический.

Ещё появилась необходимость передавать вызов процедуры с большим количеством параметров с сервера на клиент.
Пока что сделал регистрацию клиентской функции и ручками разворачиваю JSON в набор параметров.
Не хватает автоматической генерации обвязки как у серверных методов.

Есть мысль попробовать сделать Datasnap-сервер на клиенте и подключаться к нему...