Учебный пример: Простой сервис DataSnap XE - калькулятор

Vsevolod Leonov

Учебный пример: Простой сервис DataSnap XE - калькулятор

Abstract: В этой статье рассматривается создание простого сервиса Delphi XE на примере "калькулятора", которые реализует базовые функции арифметических вычислений. Этот пошаговый учебный пример очень прост, поэтому даже начинающие программисты Delphi смогут его воспроизвести. Целью этого учебного примера является знакомство с процессом создания клиентов и серверов DataSnap. Наш простой "калькулятор в виде сервиса" подразумевает клиентское и серверное приложение. Обе программы - Delphi VCL Forms Win32, а для связи используется протокол TCP/IP. Надеемся, вам понравится!

    Создаем простое серверное приложение

Первым шагом является создание нового серверного приложения DataSnap с использованием мастера "DataSnap Server".

Запустите Delphi XE.

Выберите в главном меню "File -> New -> Other", а затем в диалоге "New Items" щелкните два раза на иконке "DataSnap Server" в категории "Delphi Projects -> DataSnap Server".

На первой странице оставьте по-умолчанию опцию "Project type" как "VCL Forms Application".

Click to see full-sized image

На второй странице мастера также оставьте уже выбранные опции. Далее мы заменим демонстрационные методы (Sample Methods) сервера нашими вариантами.

Click to see full-sized image

На третьем изображении мы оставим значение по-умолчанию "211" для номера порта TCP/IP. Старайтесь всегда проводить проверку доступности порта путем нажатия на кнопку "Test Port".

Click to see full-sized imageНа последней странице мы собираемся также воспользоваться опцией по-умолчанию для выбора базового класса как "TComponent", от которого будет производиться наш класс, реализующий методы сервера.

Нажмите на кнопку "Finish", а мастер создаст новый проект с тремя модулями.

Сохраните весь проект выбором "File -> Save All".

Создайте новую папку для всех файлов для данного учебного примера "C:\DataSnapLabs\SimpleCalc\".

Сохраните главную форму приложения как "FormServerUnit", а для остальных имен воспользуйтесь стандартными названиями - "ServerContainerUnit1" и "ServerMethodsUnit1" - и сохраните проект как "SimpleCalcServer".

На этой стадии в окне Delphi Project Manager вы видите следующую картину:

Откройте модуль "ServerMethodsUnit1.pas" и реализуйте функциональность простого сервиса, выполняющего арифметические действия. Замените демонстрационные методы, добавленные мастером ("EchoString" и "ReverseString"), на нужные нам варианты "Add" ("сложить"), "Subtract" ("вычесть"), "Multiply" ("умножить") и "Divide" ("разделить").

Исходный код для модуля "ServerMethodsUnit1" должен выглядеть следующим образом:

unit ServerMethodsUnit1;
 
interface
 
uses
  Classes;
 
type
{$METHODINFO ON}
  TServerMethods1 = class(TComponent)
  private
    { Private declarations }
  public
    function Add(a, b: double): double;
    function Subtract(a, b: double): double;
    function Multiply(a, b: double): double;
    function Divide(a, b: double): double;
  end;
{$METHODINFO OFF}
 
implementation
 
{ TServerMethods1 }
 
function TServerMethods1.Add(a, b: double): double;
begin
  Result := a + b;
end;
 
function TServerMethods1.Subtract(a, b: double): double;
begin
  Result := a - b;
end;
 
function TServerMethods1.Multiply(a, b: double): double;
begin
  Result := a * b;
end;
 
function TServerMethods1.Divide(a, b: double): double;
begin
  Result := a / b;
end;
 
end.

Листинг 1: ServerMethodsUnit1.pas.

Вы полностью реализовали наш сервер. Для того чтобы реализовать клиентское приложение, сервер должен быть запущен.

Выберите "Run -> Run Without Debugging" для запуска сервера (вне отладчика) и минимизируйте его окно.

Не завершайте работу серверного приложения до окончания учебного примера.

    Создаем простое клиентское приложение

Кликните правой кнопкой мыши на project group внутри Project Manager и выберите "Add New Project".

В диалоге "New Items" выберите "VCL Forms Application" из категории "Delphi Projects".

Нажмите "OK". К существующей project group должен добавиться новый проект.

Выполните сохранение нового проекта "File -> Save All".

Выберите папку, которую вы создали для сохранения файлов проекта сервера, и сохраните туда главную форму клиентского приложения как "FormClientUnit", сам проект как "SimpleCalcClient", а всю project group как "SimpleCalcGrp".

Теперь окно Project Manager должно выглядеть как:

Проверьте, что проект клиентского приложения активен, затем выберите "File -> New -> Other", а в появившемся диалоге "New Items" выберите "DataSnap Client Module".

Как и в прошлый раз, пожалуйста, сохраните все опции по умолчанию во время работы с мастером.

Click to see full-sized image

На первой странице оставьте "DataSnap server location" как "Local server".

Click to see full-sized image

Наш сервер DataSnap является "stand alone" (независимое отдельное приложение), поэтому просто нажмите "Next".

Click to see full-sized image

Мы согласились использовать "TCP/IP" в качестве протокола, поэтому сохраним выбранную опцию.

Click to see full-sized image

Нажмите на "Test Connection", чтобы проверить, действительно ли сервер "слушает" порт 211, а затем нажмем "Finish".

Мастер добавить два модуля к нашему клиентскому приложению "ClientClassesUnit1" и "ClientModuleUnit1".

Последней задачей в этом учебном примере является реализация интерфейса клиентского приложения.

Начнем с того, что добавим ссылку на модуль "ClientModuleUnit1" в раздел uses главного модуля формы клиента. Активируем данный модуль в редакторе и выбираем в меню "File -> Use Unit".

Теперь в коде формы клиента нужно правильно использовать методы, экспонируемые (предлагаемые) через свойство "ClientModule1.ServerMethods1Client". Эти методы имеют те же имена и сигнатуры, как и методы, реализованные на сервере.

Ниже показана реализация главной формы клиентского приложения.

unit FormClientUnit;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm3 = class(TForm)
    EditA: TEdit;
    ButtonAdd: TButton;
    EditB: TEdit;
    ButtonSub: TButton;
    ButtonMult: TButton;
    ButtonDiv: TButton;
    LabelResult: TLabel;
    procedure ButtonAddClick(Sender: TObject);
    procedure ButtonSubClick(Sender: TObject);
    procedure ButtonMultClick(Sender: TObject);
    procedure ButtonDivClick(Sender: TObject);
  private
    { Private declarations }
  public
    function GetA: double;
    function GetB: double;
    procedure ShowResult(aValue: double);
  end;
 
var
  Form3: TForm3;
 
implementation
 
uses ClientModuleUnit1;
 
{$R *.dfm}
 
function TForm3.GetA: double;
begin
  Result := StrToFloat(EditA.Text);
end;
 
function TForm3.GetB: double;
begin
  Result := StrToFloat(EditB.Text)
end;
 
procedure TForm3.ShowResult(aValue: double);
begin
  LabelResult.Caption := FloatToStr(aValue);
end;
 
procedure TForm3.ButtonDivClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Divide(GetA, GetB));
end;
 
procedure TForm3.ButtonMultClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Multiply(GetA, GetB));
end;
 
procedure TForm3.ButtonSubClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Subtract(GetA, GetB));
end;
 
procedure TForm3.ButtonAddClick(Sender: TObject);
begin
  ShowResult(ClientModule1.ServerMethods1Client.Add(GetA, GetB));
end;
 
end.

Листинг 2: Реализация главной формы клиента.

Окончательно моя форма выглядит следующим образом:

Наверное, вам не нужно рассказывать, как воспроизвести ее!

Теперь вы видите, как просто создавать сервера и клиенты DataSnap и использованием Delphi XEJ

    Итог

В этом учебном примере мы использовали Delphi XE для построения простого сервиса DataSnap XE в виде калькулятора, который на уровне реализации представляет собой приложения Win32, при обмене данными между которыми используется протокол TCP/IP.

Весь исходный код данного учебного примера доступен по адресу http://cc.embarcadero.com/Item/28184

Видеоролик, демонстрирующий реализацию этого примера, можно найти здесь (http://www.youtube.com/watch?v=Qm__RdmIWSg).

Подробное описание возможностей технологии Delphi находится по адресу http://www.embarcadero.com/products/delphi


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=25687