Example tested with Apollo 1.5

This commit is contained in:
mottadelli75@gmail.com 2012-12-27 22:32:04 +00:00
parent 0c06cb0b58
commit 5f0b12b98f
12 changed files with 901 additions and 0 deletions

View File

@ -0,0 +1,48 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{BB470B6D-C5BC-4098-A153-1070BFC7248D}</ProjectGuid>
</PropertyGroup>
<ItemGroup>
<Projects Include="Receiver\Receiver.dproj">
<Dependencies/>
</Projects>
<Projects Include="SendMessage\SendMessage.dproj">
<Dependencies/>
</Projects>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Default.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Default.Personality/>
</BorlandProject>
</ProjectExtensions>
<Target Name="Receiver">
<MSBuild Projects="Receiver\Receiver.dproj"/>
</Target>
<Target Name="Receiver:Clean">
<MSBuild Projects="Receiver\Receiver.dproj" Targets="Clean"/>
</Target>
<Target Name="Receiver:Make">
<MSBuild Projects="Receiver\Receiver.dproj" Targets="Make"/>
</Target>
<Target Name="SendMessage">
<MSBuild Projects="SendMessage\SendMessage.dproj"/>
</Target>
<Target Name="SendMessage:Clean">
<MSBuild Projects="SendMessage\SendMessage.dproj" Targets="Clean"/>
</Target>
<Target Name="SendMessage:Make">
<MSBuild Projects="SendMessage\SendMessage.dproj" Targets="Make"/>
</Target>
<Target Name="Build">
<CallTarget Targets="Receiver;SendMessage"/>
</Target>
<Target Name="Clean">
<CallTarget Targets="Receiver:Clean;SendMessage:Clean"/>
</Target>
<Target Name="Make">
<CallTarget Targets="Receiver:Make;SendMessage:Make"/>
</Target>
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')" Project="$(BDS)\Bin\CodeGear.Group.Targets"/>
</Project>

View File

@ -0,0 +1,15 @@
program Receiver;
uses
Vcl.Forms,
ReceiverForm in 'ReceiverForm.pas' {ReceiverMainForm},
ThreadReceiver in 'ThreadReceiver.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TReceiverMainForm, ReceiverMainForm);
Application.Run;
end.

View File

@ -0,0 +1,149 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{0DEF043B-A99C-4889-8351-5AB60AD893D1}</ProjectGuid>
<ProjectVersion>13.4</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<MainSource>Receiver.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<DCC_UsePackage>bindcompfmx;fmx;rtl;dbrtl;IndySystem;DbxClientDriver;bindcomp;inetdb;DBXInterBaseDriver;DataSnapCommon;DataSnapClient;DataSnapServer;DataSnapProviderClient;xmlrtl;DbxCommonDriver;IndyProtocols;DBXMySQLDriver;dbxcds;soaprtl;bindengine;DBXOracleDriver;CustomIPTransport;dsnap;DBXInformixDriver;IndyCore;fmxase;DBXFirebirdDriver;inet;fmxobj;inetdbxpress;DBXSybaseASADriver;fmxdae;dbexpress;DataSnapIndy10ServerTransport;IPIndyImpl;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>DBXOdbcDriver;DBXSybaseASEDriver;vclimg;vclactnband;vcldb;bindcompvcl;vcldsnap;vclie;vcltouch;DBXDb2Driver;websnap;VclSmp;vcl;DBXMSSQLDriver;dsnapcon;vclx;webdsnap;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>RlxDesignPackageXE2Professional;CustomDockForm;vcldbx;frx16;TeeDB;Rave100VCL;vclib;Tee;inetdbbde;DBXOdbcDriver;DBXSybaseASEDriver;ibxpress;svnui;vclimg;frxDB16;intrawebdb_120_160;fmi;fs16;vclactnband;FMXTee;TeeUI;vcldb;bindcompvcl;vcldsnap;vclie;vcltouch;Intraweb_120_160;DBXDb2Driver;websnap;vclribbon;frxe16;VclSmp;fsDB16;vcl;DataSnapConnectors;CloudService;DBXMSSQLDriver;CodeSiteExpressPkg;FmxTeeUI;dsnapcon;vclx;webdsnap;svn;OmniThreadLibraryRuntimeXE2;bdertl;adortl;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1033</VerInfo_Locale>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="ReceiverForm.pas">
<Form>ReceiverMainForm</Form>
<FormType>dfm</FormType>
</DCCReference>
<DCCReference Include="ThreadReceiver.pas"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">Receiver.dpr</Source>
</Source>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1040</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k160.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp160.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k160.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp160.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment/>
<Platforms>
<Platform value="Win64">False</Platform>
<Platform value="Win32">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
</Project>

Binary file not shown.

View File

@ -0,0 +1,125 @@
object ReceiverMainForm: TReceiverMainForm
Left = 0
Top = 0
Caption = 'Receiver Message'
ClientHeight = 455
ClientWidth = 478
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 66
Width = 122
Height = 13
Caption = 'Message sent from apollo'
end
object Label2: TLabel
Left = 8
Top = 337
Width = 62
Height = 13
Caption = 'Queue Name'
end
object Label3: TLabel
Left = 8
Top = 8
Width = 396
Height = 52
Caption =
'This example show how subscribe a queue and after you receive a ' +
'message from apollo you can send a ACK message to accept the mes' +
'sage or NACK message to refuse the message. If you refuse the me' +
'ssage apollo try to send the message to another subscriber conne' +
'cted'
WordWrap = True
end
object Label4: TLabel
Left = 176
Top = 337
Width = 95
Height = 13
Caption = 'Current Message Id'
end
object Label5: TLabel
Left = 8
Top = 202
Width = 150
Height = 13
Caption = 'Stomp Frame Sent and Receive'
end
object MessageMemo: TMemo
Left = 8
Top = 85
Width = 432
Height = 116
ScrollBars = ssVertical
TabOrder = 0
end
object SubscribeButton: TButton
Left = 8
Top = 380
Width = 129
Height = 67
Caption = '1 - Subscribe '
TabOrder = 1
OnClick = SubscribeButtonClick
end
object QueueEdit: TEdit
Left = 8
Top = 353
Width = 129
Height = 21
TabOrder = 2
Text = '/queue/alarm'
end
object SendAckButton: TButton
Left = 176
Top = 380
Width = 98
Height = 31
Caption = '2 - Send ACK'
TabOrder = 3
OnClick = SendAckButtonClick
end
object SendNackButton: TButton
Left = 176
Top = 416
Width = 98
Height = 31
Caption = '2 - Send NACK'
TabOrder = 4
OnClick = SendNackButtonClick
end
object UnsubscribeButton: TButton
Left = 311
Top = 380
Width = 129
Height = 67
Caption = '3 - Unsubscribe '
TabOrder = 5
OnClick = UnsubscribeButtonClick
end
object MessageIdEdit: TEdit
Left = 174
Top = 353
Width = 266
Height = 21
TabOrder = 6
end
object LogMemo: TMemo
Left = 8
Top = 218
Width = 410
Height = 117
TabOrder = 7
end
end

View File

@ -0,0 +1,117 @@
unit ReceiverForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, StompClient, StompTypes,
ThreadReceiver;
type
TReceiverMainForm = class(TForm)
MessageMemo: TMemo;
Label1: TLabel;
SubscribeButton: TButton;
QueueEdit: TEdit;
Label2: TLabel;
SendAckButton: TButton;
SendNackButton: TButton;
Label3: TLabel;
UnsubscribeButton: TButton;
MessageIdEdit: TEdit;
Label4: TLabel;
LogMemo: TMemo;
Label5: TLabel;
procedure SubscribeButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SendNackButtonClick(Sender: TObject);
procedure SendAckButtonClick(Sender: TObject);
procedure UnsubscribeButtonClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
StompClient: TStompClient;
StompFrame: IStompFrame;
ThReceiver: TThreadReceiver;
procedure BeforeSendFrame(AFrame: IStompFrame);
public
end;
var
ReceiverMainForm: TReceiverMainForm;
implementation
{$R *.dfm}
procedure TReceiverMainForm.BeforeSendFrame(AFrame: IStompFrame);
begin
LogMemo.Lines.Add(AFrame.Output);
end;
procedure TReceiverMainForm.FormCreate(Sender: TObject);
begin
StompClient := TStompClient.Create;
try
StompClient.Connect;
except
on e: exception do
begin
raise Exception.Create('Cannot connect to Apollo server. Run the server and restart the application');
end;
end;
StompClient.OnBeforeSendFrame := BeforeSendFrame;
StompFrame := StompUtils.NewFrame();
ThReceiver := TThreadReceiver.Create(True);
ThReceiver.StompClient := StompClient;
end;
procedure TReceiverMainForm.FormDestroy(Sender: TObject);
begin
ThReceiver.Free;
StompClient.Free;
end;
procedure TReceiverMainForm.SendAckButtonClick(Sender: TObject);
begin
if MessageIdEdit.Text='' then raise Exception.Create('Specify MessageId');
if StompClient.Connected then
begin
StompClient.Ack(MessageIdEdit.Text);
end;
end;
procedure TReceiverMainForm.SendNackButtonClick(Sender: TObject);
begin
if MessageIdEdit.Text='' then raise Exception.Create('Specify MessageId');
if StompClient.Connected then
begin
StompClient.Nack(MessageIdEdit.Text);
end;
end;
procedure TReceiverMainForm.SubscribeButtonClick(Sender: TObject);
begin
if QueueEdit.Text='' then raise Exception.Create('Specify queue name');
if StompClient.Connected then
begin
StompClient.Subscribe(QueueEdit.Text,amClientIndividual);
//StompClient.Subscribe(QueueEdit.Text,amAuto);
ThReceiver.Resume;
end;
end;
procedure TReceiverMainForm.UnsubscribeButtonClick(Sender: TObject);
begin
if QueueEdit.Text='' then raise Exception.Create('Specify queue name');
if StompClient.Connected then
begin
StompClient.Unsubscribe(QueueEdit.Text);
ThReceiver.Suspend;
end;
end;
end.

View File

@ -0,0 +1,108 @@
unit ThreadReceiver;
interface
uses
System.Classes,
StompClient,
StompTypes;
type
TThreadReceiver = class(TThread)
private
FStompClient: TStompClient;
FStompFrame: IStompFrame;
procedure SetStompClient(const Value: TStompClient);
protected
procedure Execute; override;
public
procedure ReceiveAlarmMemo;
procedure UpdateMessageMemo;
procedure UpdateMessageIdEdit;
constructor Create(CreateSuspended: Boolean); overload;
property StompClient: TStompClient read FStompClient write SetStompClient;
end;
implementation
{
Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TThreadReceiver.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end;
or
Synchronize(
procedure
begin
Form1.Caption := 'Updated in thread via an anonymous method'
end
)
);
where an anonymous method is passed.
Similarly, the developer can call the Queue method with similar parameters as
above, instead passing another TThread class as the first parameter, putting
the calling thread in a queue with the other thread.
}
uses ReceiverForm;
{ TThreadReceiver }
constructor TThreadReceiver.Create(CreateSuspended: Boolean);
begin
FStompFrame := TStompFrame.Create;
inherited Create(CreateSuspended);
end;
procedure TThreadReceiver.Execute;
begin
NameThreadForDebugging('ThreadReceiver');
while not Terminated do
begin
if FStompClient.Receive(FStompFrame,2000) then
begin
Sleep(100);
Synchronize(ReceiveAlarmMemo);
Synchronize(UpdateMessageIdEdit);
end
else
begin
Synchronize(UpdateMessageMemo);
end;
end;
end;
procedure TThreadReceiver.ReceiveAlarmMemo;
begin
ReceiverMainForm.MessageMemo.Lines.Add(FStompFrame.Output);
end;
procedure TThreadReceiver.SetStompClient(const Value: TStompClient);
begin
FStompClient := Value;
end;
procedure TThreadReceiver.UpdateMessageIdEdit;
begin
ReceiverMainForm.MessageIdEdit.Text := FStompFrame.GetHeaders.Value('message-id');
end;
procedure TThreadReceiver.UpdateMessageMemo;
begin
ReceiverMainForm.MessageMemo.Lines.Add('Wait Messages....');
end;
end.

View File

@ -0,0 +1,14 @@
program SendMessage;
uses
Vcl.Forms,
SendMessageForm in 'SendMessageForm.pas' {SendMessageMainForm};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TSendMessageMainForm, SendMessageMainForm);
Application.Run;
end.

View File

@ -0,0 +1,148 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{D1F6D8B1-3F48-4A39-81BC-1D32E822A74A}</ProjectGuid>
<ProjectVersion>13.4</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<MainSource>SendMessage.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<DCC_UsePackage>bindcompfmx;fmx;rtl;dbrtl;IndySystem;DbxClientDriver;bindcomp;inetdb;DBXInterBaseDriver;DataSnapCommon;DataSnapClient;DataSnapServer;DataSnapProviderClient;xmlrtl;DbxCommonDriver;IndyProtocols;DBXMySQLDriver;dbxcds;soaprtl;bindengine;DBXOracleDriver;CustomIPTransport;dsnap;DBXInformixDriver;IndyCore;fmxase;DBXFirebirdDriver;inet;fmxobj;inetdbxpress;DBXSybaseASADriver;fmxdae;dbexpress;DataSnapIndy10ServerTransport;IPIndyImpl;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>DBXOdbcDriver;DBXSybaseASEDriver;vclimg;vclactnband;vcldb;bindcompvcl;vcldsnap;vclie;vcltouch;DBXDb2Driver;websnap;VclSmp;vcl;DBXMSSQLDriver;dsnapcon;vclx;webdsnap;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>RlxDesignPackageXE2Professional;CustomDockForm;vcldbx;frx16;TeeDB;Rave100VCL;vclib;Tee;inetdbbde;DBXOdbcDriver;DBXSybaseASEDriver;ibxpress;svnui;vclimg;frxDB16;intrawebdb_120_160;fmi;fs16;vclactnband;FMXTee;TeeUI;vcldb;bindcompvcl;vcldsnap;vclie;vcltouch;Intraweb_120_160;DBXDb2Driver;websnap;vclribbon;frxe16;VclSmp;fsDB16;vcl;DataSnapConnectors;CloudService;DBXMSSQLDriver;CodeSiteExpressPkg;FmxTeeUI;dsnapcon;vclx;webdsnap;svn;OmniThreadLibraryRuntimeXE2;bdertl;adortl;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1033</VerInfo_Locale>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="SendMessageForm.pas">
<Form>SendMessageMainForm</Form>
<FormType>dfm</FormType>
</DCCReference>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">SendMessage.dpr</Source>
</Source>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1040</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k160.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp160.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k160.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp160.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment/>
<Platforms>
<Platform value="Win64">False</Platform>
<Platform value="Win32">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
</Project>

Binary file not shown.

View File

@ -0,0 +1,86 @@
object SendMessageMainForm: TSendMessageMainForm
Left = 0
Top = 0
Caption = 'Send Message'
ClientHeight = 333
ClientWidth = 426
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 152
Top = 285
Width = 62
Height = 13
Caption = 'Queue Name'
end
object Label2: TLabel
Left = 8
Top = 5
Width = 182
Height = 13
Caption = 'Type here text of message to be sent'
end
object Label3: TLabel
Left = 8
Top = 127
Width = 150
Height = 13
Caption = 'Stomp Frame Sent and Receive'
end
object QueueMemo: TMemo
Left = 8
Top = 24
Width = 410
Height = 97
TabOrder = 0
end
object SendMessageButton: TButton
Left = 8
Top = 269
Width = 138
Height = 56
Caption = 'Send Message'
TabOrder = 1
OnClick = SendMessageButtonClick
end
object QueueEdit: TEdit
Left = 152
Top = 304
Width = 266
Height = 21
TabOrder = 2
Text = '/queue/alarm'
end
object LogMemo: TMemo
Left = 8
Top = 146
Width = 410
Height = 117
TabOrder = 3
end
object AutomaticSendCheckBox: TCheckBox
Left = 220
Top = 269
Width = 181
Height = 17
Caption = 'Automatic send every 5 seconds '
TabOrder = 4
OnClick = AutomaticSendCheckBoxClick
end
object AutomaticSendTimer: TTimer
Enabled = False
Interval = 5000
OnTimer = AutomaticSendTimerTimer
Left = 320
Top = 24
end
end

View File

@ -0,0 +1,91 @@
unit SendMessageForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, StompClient, StompTypes,
Vcl.ExtCtrls;
type
TSendMessageMainForm = class(TForm)
QueueMemo: TMemo;
SendMessageButton: TButton;
QueueEdit: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
LogMemo: TMemo;
AutomaticSendTimer: TTimer;
AutomaticSendCheckBox: TCheckBox;
procedure SendMessageButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure AutomaticSendTimerTimer(Sender: TObject);
procedure AutomaticSendCheckBoxClick(Sender: TObject);
private
StompClient: TStompClient;
procedure BeforeSendFrame(AFrame: IStompFrame);
procedure Send;
public
end;
var
SendMessageMainForm: TSendMessageMainForm;
implementation
{$R *.dfm}
procedure TSendMessageMainForm.AutomaticSendCheckBoxClick(Sender: TObject);
begin
if QueueEdit.Text='' then raise Exception.Create('Specify queue name');
if QueueMemo.Lines.Text='' then raise Exception.Create('Specify text of message to be sent');
if AutomaticSendCheckBox.Checked then AutomaticSendTimer.Enabled := True
else AutomaticSendTimer.Enabled := False;
end;
procedure TSendMessageMainForm.BeforeSendFrame(AFrame: IStompFrame);
begin
LogMemo.Lines.Add(AFrame.Output);
end;
procedure TSendMessageMainForm.FormCreate(Sender: TObject);
begin
StompClient := TStompClient.Create;
StompClient.OnBeforeSendFrame := BeforeSendFrame;
end;
procedure TSendMessageMainForm.FormDestroy(Sender: TObject);
begin
StompClient.Free;
end;
procedure TSendMessageMainForm.AutomaticSendTimerTimer(Sender: TObject);
begin
if AutomaticSendCheckBox.Checked then
begin
AutomaticSendTimer.Enabled := False;
Send;
AutomaticSendTimer.Enabled := True;
end;
end;
procedure TSendMessageMainForm.Send;
begin
StompClient.Connect;
try
StompClient.Send(QueueEdit.Text,QueueMemo.Lines.Text);
finally
StompClient.Disconnect;
end;
end;
procedure TSendMessageMainForm.SendMessageButtonClick(Sender: TObject);
begin
if QueueEdit.Text='' then raise Exception.Create('Specify queue name');
if QueueMemo.Lines.Text='' then raise Exception.Create('Specify text of message to be sent');
Send;
end;
end.