Componentes.Terceros.SDAC/internal/4.10.0.10/1/Demos/dotNet/SdacDemo/ServiceBroker/ServiceBroker.pas
2007-10-05 14:48:18 +00:00

280 lines
8.4 KiB
ObjectPascal

unit ServiceBroker;
interface
uses
{$IFDEF VER6P}
Variants,
{$ENDIF}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, DemoFrame, ExtCtrls, StdCtrls, DB, DBAccess, MSAccess,
MSServiceBroker, Buttons;
type
TServiceBrokerFrame = class(TDemoFrame)
Panel1: TPanel;
Splitter1: TSplitter;
Panel2: TPanel;
InitiatorServiceBroker: TMSServiceBroker;
MSConnection2: TMSConnection;
TargetServiceBroker: TMSServiceBroker;
Panel3: TPanel;
Panel4: TPanel;
meInitiatorLog: TMemo;
meTargetLog: TMemo;
Label1: TLabel;
Label2: TLabel;
Panel5: TPanel;
Panel6: TPanel;
btInitiatorBeginDialog: TSpeedButton;
btInitiatorEndDialog: TSpeedButton;
btInitiatorSend: TSpeedButton;
btInitiatorReceive: TSpeedButton;
Panel7: TPanel;
cbInitiatorAsynchNotification: TCheckBox;
lbInitiatorMessage: TLabel;
edInitiatorMessage: TEdit;
edInitiatorWaitTimeout: TEdit;
lbInitiatorWaitTimeout: TLabel;
btTargetReceive: TSpeedButton;
btTargetSend: TSpeedButton;
Panel8: TPanel;
cbTargetAsynchNotification: TCheckBox;
lbTargetMessage: TLabel;
edTargetMessage: TEdit;
lbTargetWaitTimeout: TLabel;
edTargetWaitTimeout: TEdit;
Panel9: TPanel;
Panel10: TPanel;
procedure btInitiatorBeginDialogClick(Sender: TObject);
procedure btInitiatorEndDialogClick(Sender: TObject);
procedure btInitiatorSendClick(Sender: TObject);
procedure btInitiatorReceiveClick(Sender: TObject);
procedure cbInitiatorAsynchNotificationClick(Sender: TObject);
procedure edInitiatorWaitTimeoutChange(Sender: TObject);
procedure btTargetSendClick(Sender: TObject);
procedure btTargetReceiveClick(Sender: TObject);
procedure cbTargetAsynchNotificationClick(Sender: TObject);
procedure edTargetWaitTimeoutChange(Sender: TObject);
procedure InitiatorServiceBrokerBeginConversation(Sender: TObject;
Conversation: TMSConversation);
procedure InitiatorServiceBrokerEndConversation(Sender: TObject;
Conversation: TMSConversation; ErrorMessage: String;
ErrorCode: Integer);
procedure InitiatorServiceBrokerMessage(Sender: TObject);
procedure TargetServiceBrokerBeginConversation(Sender: TObject;
Conversation: TMSConversation);
procedure TargetServiceBrokerEndConversation(Sender: TObject;
Conversation: TMSConversation; ErrorMessage: String;
ErrorCode: Integer);
procedure TargetServiceBrokerMessage(Sender: TObject);
private
FMSConversation: TMSConversation;
public
// Demo management
procedure AssignTargetConnection;
procedure Initialize; override;
end;
var
ServiceBrokerFrame: TServiceBrokerFrame;
implementation
{$IFDEF CLR}
{$R *.nfm}
{$ENDIF}
{$IFDEF WIN32}
{$R *.dfm}
{$ENDIF}
const
InitiatorServiceName = 'InitiatorService';
TargetServiceName = 'TargetService';
{ TServiceBrokerFrame }
procedure TServiceBrokerFrame.AssignTargetConnection;
begin
if Connection.Connected and MSConnection2.Connected then
Exit;
if not Connection.Connected then
Connection.Connect;
MSConnection2.Disconnect;
MSConnection2.Assign(Connection);
MSConnection2.LoginPrompt := False;
MSConnection2.Connect;
InitiatorServiceBroker.CreateServerObjects;
TargetServiceBroker.CreateServerObjects;
end;
procedure TServiceBrokerFrame.Initialize;
begin
inherited;
InitiatorServiceBroker.Connection := Connection as TMSConnection;
InitiatorServiceBroker.Service := InitiatorServiceName;
TargetServiceBroker.Service := TargetServiceName;
cbInitiatorAsynchNotification.Checked := InitiatorServiceBroker.AsyncNotification;
cbTargetAsynchNotification.Checked := TargetServiceBroker.AsyncNotification;
edInitiatorWaitTimeout.Text := IntToStr(InitiatorServiceBroker.WaitTimeout);
edTargetWaitTimeout.Text := IntToStr(TargetServiceBroker.WaitTimeout);
btInitiatorEndDialog.Enabled := False;
end;
procedure TServiceBrokerFrame.btInitiatorBeginDialogClick(Sender: TObject);
begin
AssignTargetConnection;
FMSConversation := InitiatorServiceBroker.BeginDialog(TargetServiceName, '', False);
// Demo managment
btInitiatorEndDialog.Enabled := True;
btInitiatorBeginDialog.Enabled := False;
end;
procedure TServiceBrokerFrame.btInitiatorEndDialogClick(Sender: TObject);
begin
FMSConversation.EndConversation;
FMSConversation := nil;
// Demo managment
btInitiatorEndDialog.Enabled := False;
btInitiatorBeginDialog.Enabled := True;
end;
procedure TServiceBrokerFrame.btInitiatorSendClick(Sender: TObject);
var
TransmitionStatus: string;
begin
AssignTargetConnection;
if FMSConversation <> nil then begin
FMSConversation.Send(edInitiatorMessage.Text);
TransmitionStatus := FMSConversation.GetTransmissionStatus;
if TransmitionStatus <> '' then
meInitiatorLog.Lines.Add(TransmitionStatus)
else
meInitiatorLog.Lines.Add('Message was send successfully');
end
else
raise Exception.Create('No active dialog');
end;
procedure TServiceBrokerFrame.btInitiatorReceiveClick(Sender: TObject);
begin
AssignTargetConnection;
if InitiatorServiceBroker.Receive then
meInitiatorLog.Lines.Add(InitiatorServiceBroker.CurrentMessage.AsString);
end;
procedure TServiceBrokerFrame.cbInitiatorAsynchNotificationClick(Sender: TObject);
begin
AssignTargetConnection;
InitiatorServiceBroker.AsyncNotification := cbInitiatorAsynchNotification.Checked;
end;
procedure TServiceBrokerFrame.edInitiatorWaitTimeoutChange(Sender: TObject);
var
WaitTimeout: integer;
begin
try
WaitTimeout := StrToInt(edInitiatorWaitTimeout.Text);
except
Exit;
end;
InitiatorServiceBroker.WaitTimeout := WaitTimeout;
end;
procedure TServiceBrokerFrame.InitiatorServiceBrokerBeginConversation(
Sender: TObject; Conversation: TMSConversation);
begin
meInitiatorLog.Lines.Add('Conversation started');
end;
procedure TServiceBrokerFrame.InitiatorServiceBrokerEndConversation(
Sender: TObject; Conversation: TMSConversation; ErrorMessage: String;
ErrorCode: Integer);
begin
meInitiatorLog.Lines.Add('Conversation finished');
end;
procedure TServiceBrokerFrame.InitiatorServiceBrokerMessage(Sender: TObject);
begin
if InitiatorServiceBroker.Receive then
meInitiatorLog.Lines.Add(InitiatorServiceBroker.CurrentMessage.AsString);
end;
procedure TServiceBrokerFrame.btTargetSendClick(Sender: TObject);
var
TransmitionStatus: string;
Conversation: TMSConversation;
begin
AssignTargetConnection;
if TargetServiceBroker.ConversationCount > 0 then begin
Conversation := TargetServiceBroker.Conversations[0];
Conversation.Send(edTargetMessage.Text);
TransmitionStatus := Conversation.GetTransmissionStatus;
if TransmitionStatus <> '' then
meTargetLog.Lines.Add(TransmitionStatus)
else
meTargetLog.Lines.Add('Message was send successfully');
end
else
raise Exception.Create('No active dialog');
end;
procedure TServiceBrokerFrame.btTargetReceiveClick(Sender: TObject);
begin
AssignTargetConnection;
if TargetServiceBroker.Receive then
meTargetLog.Lines.Add(TargetServiceBroker.CurrentMessage.AsString);
end;
procedure TServiceBrokerFrame.cbTargetAsynchNotificationClick(Sender: TObject);
begin
AssignTargetConnection;
TargetServiceBroker.AsyncNotification := cbTargetAsynchNotification.Checked;
end;
procedure TServiceBrokerFrame.edTargetWaitTimeoutChange(Sender: TObject);
var
WaitTimeout: integer;
begin
try
WaitTimeout := StrToInt(edTargetWaitTimeout.Text);
except
Exit;
end;
TargetServiceBroker.WaitTimeout := WaitTimeout;
end;
procedure TServiceBrokerFrame.TargetServiceBrokerBeginConversation(
Sender: TObject; Conversation: TMSConversation);
begin
meTargetLog.Lines.Add('Conversation started');
end;
procedure TServiceBrokerFrame.TargetServiceBrokerEndConversation(
Sender: TObject; Conversation: TMSConversation; ErrorMessage: String;
ErrorCode: Integer);
begin
meTargetLog.Lines.Add('Conversation finished');
end;
procedure TServiceBrokerFrame.TargetServiceBrokerMessage(Sender: TObject);
begin
if TargetServiceBroker.Receive then
if TargetServiceBroker.CurrentMessage.MessageType <> SEndDialogType then
meTargetLog.Lines.Add(TargetServiceBroker.CurrentMessage.AsString);
end;
end.