650 lines
20 KiB
ObjectPascal
650 lines
20 KiB
ObjectPascal
unit MegaDemoServerMain;
|
|
|
|
{ Activate this define if you are using the demo without having Indy installed. }
|
|
{.$DEFINE NO_INDY}
|
|
|
|
{ Activate this define if you are using the demo without having Synapse installed. }
|
|
{.$DEFINE NO_Synapse}
|
|
{$INCLUDE RemObjects.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, Spin, Buttons, ExtCtrls, SyncObjs,
|
|
|
|
{$IFNDEF NO_INDY}
|
|
IdBaseComponent, IdComponent,
|
|
IdTCPServer, IdHTTPServer, uROIndyTCPServer, uROIndyHTTPServer, uROSuperTCPServer,
|
|
{$IFDEF RemObjects_INDY10}IdContext,{$ENDIF}
|
|
|
|
{$ENDIF NO_INDY}
|
|
{$IFNDEF NO_Synapse}
|
|
uROIpSuperHttpServer,uROSynapseSuperTCPServer,
|
|
{$ENDIF}
|
|
uROClient, uROBINMessage, uROClientIntf, uROServer,
|
|
uROBPDXHTTPServer, uROBPDXTCPServer, uROPoweredByRemObjectsButton,
|
|
uROSOAPMessage, uROWinMessageServer, uROEncryption,
|
|
uROPostMessage, uROServerMultiMessage, uROXmlRpcMessage;
|
|
|
|
const
|
|
WM_LOG_MESSAGE = WM_APP + 1;
|
|
|
|
type
|
|
TMegaDemoServerMainForm = class(TForm)
|
|
ROBINMessage: TROBinMessage;
|
|
Memo: TMemo;
|
|
cbUseCompression: TCheckBox;
|
|
WinMessageServer: TROWinMessageServer;
|
|
ROSOAPMessage: TROSOAPMessage;
|
|
gbHTTP: TGroupBox;
|
|
gbTCP: TGroupBox;
|
|
gbWinMsg: TGroupBox;
|
|
Label1: TLabel;
|
|
seHTTPPort: TSpinEdit;
|
|
seTCPPort: TSpinEdit;
|
|
Label4: TLabel;
|
|
eServerID: TEdit;
|
|
bActivateHTTP: TBitBtn;
|
|
bActivateTCP: TBitBtn;
|
|
bActivateWinMsg: TBitBtn;
|
|
cbWinMsgMsg: TComboBox;
|
|
Label3: TLabel;
|
|
Label6: TLabel;
|
|
cbTCPMsg: TComboBox;
|
|
Label7: TLabel;
|
|
BpdxTcpServer: TROBPDXTCPServer;
|
|
BpdxHttpServer: TROBPDXHTTPServer;
|
|
RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton;
|
|
Label5: TLabel;
|
|
bDeactivateWinMsg: TBitBtn;
|
|
bDeactivateTCP: TBitBtn;
|
|
bDeactivateHTTP: TBitBtn;
|
|
Label13: TLabel;
|
|
Panel2: TPanel;
|
|
rbBpdxHttp: TRadioButton;
|
|
RbIndyHttp: TRadioButton;
|
|
Panel1: TPanel;
|
|
rbBpdxTcp: TRadioButton;
|
|
RbIndyTcp: TRadioButton;
|
|
Label8: TLabel;
|
|
cb_Encrypt: TCheckBox;
|
|
cb_SupportKeepAlive: TCheckBox;
|
|
cbDisableNagle: TCheckBox;
|
|
cbVerbose: TCheckBox;
|
|
ROPostMessage: TROPostMessage;
|
|
ErrorMemo: TMemo;
|
|
ROServerMultiMessage: TROServerMultiMessage;
|
|
ROXmlRpcMessage: TROXmlRpcMessage;
|
|
gbSuperHTTP: TGroupBox;
|
|
Label2: TLabel;
|
|
Label9: TLabel;
|
|
Label10: TLabel;
|
|
seSuperHTTPPort: TSpinEdit;
|
|
bActivateSuperHTTP: TBitBtn;
|
|
bDeactivateSuperHTTP: TBitBtn;
|
|
Panel3: TPanel;
|
|
rbSynapseSuperHttp: TRadioButton;
|
|
gbSuperTcp: TGroupBox;
|
|
Label11: TLabel;
|
|
Label12: TLabel;
|
|
Label14: TLabel;
|
|
seSuperTCPPort: TSpinEdit;
|
|
bActivateSuperTcp: TBitBtn;
|
|
cbSuperTCPMsg: TComboBox;
|
|
bDeactivateSuperTCP: TBitBtn;
|
|
Panel4: TPanel;
|
|
rbSynapseSuperTcp: TRadioButton;
|
|
rbIndySuperTCP: TRadioButton;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure HttpServerAfterServerActivate(Sender: TObject);
|
|
procedure HttpServerAfterServerDeactivate(Sender: TObject);
|
|
procedure cbUseCompressionClick(Sender: TObject);
|
|
procedure bActivateHTTPClick(Sender: TObject);
|
|
procedure bActivateTCPClick(Sender: TObject);
|
|
procedure bActivateWinMsgClick(Sender: TObject);
|
|
procedure cbTCPMsgChange(Sender: TObject);
|
|
procedure cbWinMsgMsgChange(Sender: TObject);
|
|
procedure bDeactivateHTTPClick(Sender: TObject);
|
|
procedure bDeactivateTCPClick(Sender: TObject);
|
|
procedure bDeactivateWinMsgClick(Sender: TObject);
|
|
procedure TcpServerAfterServerActivate(Sender: TObject);
|
|
procedure TcpServerAfterServerDeactivate(Sender: TObject);
|
|
procedure WinMessageServerAfterServerDeactivate(Sender: TObject);
|
|
procedure WinMessageServerAfterServerActivate(Sender: TObject);
|
|
procedure cb_EncryptClick(Sender: TObject);
|
|
procedure cb_SupportKeepAliveClick(Sender: TObject);
|
|
procedure cbDisableNagleClick(Sender: TObject);
|
|
procedure MessageInitializeMessage(Sender: TROMessage;
|
|
const aTransport: IROTransport; const anInterfaceName,
|
|
aMessageName: String);
|
|
procedure cbSuperTCPMsgChange(Sender: TObject);
|
|
procedure bDeactivateSuperTCPClick(Sender: TObject);
|
|
procedure bActivateSuperTCPClick(Sender: TObject);
|
|
procedure SuperTcpServerAfterServerActivate(Sender: TObject);
|
|
procedure SuperTcpServerAfterServerDeactivate(Sender: TObject);
|
|
procedure SuperHttpServerAfterServerActivate(Sender: TObject);
|
|
procedure SuperHttpServerAfterServerDeactivate(Sender: TObject);
|
|
procedure bActivateSuperHTTPClick(Sender: TObject);
|
|
procedure bDeactivateSuperHTTPClick(Sender: TObject);
|
|
private
|
|
{$IFNDEF NO_INDY}
|
|
ROIndyHTTPServer : TROIndyHTTPServer;
|
|
ROIndyTCPServer : TROIndyTCPServer;
|
|
ROIndySuperTCPServer: TROSuperTcpServer;
|
|
{$ENDIF NO_INDY}
|
|
{$IFNDEF NO_Synapse}
|
|
ROSynapseSuperHTTPServer : TROIpSuperHttpServer;
|
|
ROSynapseSuperTCPServer : TROSynapseSuperTcpServer;
|
|
{$ENDIF NO_Synapse}
|
|
|
|
fCritical: TCriticalSection;
|
|
|
|
procedure ActivateGroupBox(iGroupBox: TGroupBox; iActivate: boolean);
|
|
procedure CheckStatus;
|
|
protected
|
|
procedure WMLog(var Message: TMessage); message WM_LOG_MESSAGE;
|
|
|
|
public
|
|
constructor Create(aOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
|
|
procedure Log(const someText: string);
|
|
|
|
end;
|
|
|
|
var
|
|
MegaDemoServerMainForm: TMegaDemoServerMainForm;
|
|
|
|
implementation
|
|
|
|
uses MegaDemoLibrary_Intf;
|
|
|
|
{$R *.DFM}
|
|
|
|
procedure TMegaDemoServerMainForm.FormCreate(Sender: TObject);
|
|
begin
|
|
{$IFDEF NO_INDY}
|
|
rbIndyHttp.Enabled := false;
|
|
rbIndyTcp.Enabled := false;
|
|
rbIndySuperTCP.Enabled := false;
|
|
rbBpdxTcp.Enabled:=True;
|
|
rbBpdxHttp.Enabled:=True;
|
|
{$ELSE}
|
|
ROIndyHTTPServer := TROIndyHTTPServer.Create(Self);
|
|
ROIndyHTTPServer.Dispatchers.Assign(BpdxHttpServer.Dispatchers);
|
|
ROIndyHTTPServer.OnAfterServerActivate := HttpServerAfterServerActivate;
|
|
ROIndyHTTPServer.OnAfterServerDeactivate := HttpServerAfterServerDeactivate;
|
|
|
|
ROIndyTCPServer := TROIndyTCPServer.Create(Self);
|
|
ROIndyTCPServer.Dispatchers.Assign(BpdxTcpServer.Dispatchers);
|
|
ROIndyTCPServer.OnAfterServerActivate := TcpServerAfterServerActivate;
|
|
ROIndyTCPServer.OnAfterServerDeactivate := TcpServerAfterServerDeactivate;
|
|
|
|
ROIndySuperTCPServer:= TROSuperTcpServer.Create(Self);
|
|
ROIndySuperTCPServer.Dispatchers.Assign(BpdxTcpServer.Dispatchers);
|
|
ROIndySuperTCPServer.OnAfterServerActivate := SuperTcpServerAfterServerActivate;
|
|
ROIndySuperTCPServer.OnAfterServerDeactivate := SuperTcpServerAfterServerDeactivate;
|
|
{$ENDIF NO_INDY}
|
|
|
|
{$IFDEF NO_Synapse}
|
|
rbSynapseSuperHttp.Enabled:=False;
|
|
rbSynapseSuperTcp.Enabled:=False;
|
|
{$ELSE}
|
|
ROSynapseSuperHTTPServer := TROIpSuperHttpServer.Create(Self);
|
|
ROSynapseSuperHTTPServer.Dispatchers.Assign(BpdxHttpServer.Dispatchers);
|
|
ROSynapseSuperHTTPServer.OnAfterServerActivate := SuperHttpServerAfterServerActivate;
|
|
ROSynapseSuperHTTPServer.OnAfterServerDeactivate := SuperHttpServerAfterServerDeactivate;
|
|
|
|
ROSynapseSuperTCPServer := TROSynapseSuperTcpServer.Create(Self);
|
|
ROSynapseSuperTCPServer.Dispatchers.Assign(BpdxTcpServer.Dispatchers);
|
|
ROSynapseSuperTCPServer.OnAfterServerActivate := SuperTcpServerAfterServerActivate;
|
|
ROSynapseSuperTCPServer.OnAfterServerDeactivate := SuperTcpServerAfterServerDeactivate;
|
|
{$ENDIF NO_Synapse}
|
|
cb_SupportKeepAliveClick(Sender);
|
|
|
|
// Misc
|
|
WinMessageServer.ServerID := LibraryUID;
|
|
|
|
eServerID.Text := WinMessageServer.ServerID;
|
|
|
|
cbTCPMsg.Items.Clear;
|
|
cbTCPMsg.Items.AddObject('Auto', ROServerMultiMessage);
|
|
cbTCPMsg.Items.AddObject('Bin', ROBINMessage);
|
|
cbTCPMsg.Items.AddObject('Soap', ROSOAPMessage);
|
|
cbTCPMsg.Items.AddObject('Post', ROPOSTMessage);
|
|
cbTCPMsg.Items.AddObject('XmlRpc', ROXmlRpcMessage);
|
|
cbTCPMsg.ItemIndex := 0;
|
|
cbTCPMsgChange(cbTCPMsg);
|
|
|
|
cbSuperTcpMsg.Items.AddStrings(cbTCPMsg.Items);
|
|
cbSuperTcpMsg.ItemIndex := 0;
|
|
cbSuperTCPMsgChange(cbSuperTcpMsg);
|
|
|
|
|
|
cbWinMsgMsg.Items.AddStrings(cbTCPMsg.Items);
|
|
cbWinMsgMsg.ItemIndex := 0;
|
|
cbWinMsgMsgChange(cbWinMsgMsg);
|
|
|
|
cbUseCompressionClick(cbUseCompression);
|
|
cb_EncryptClick(cb_Encrypt);
|
|
|
|
if (ParamCount > 0) and SameText(ParamStr(1), '/activate') then begin
|
|
Application.ProcessMessages();
|
|
bActivateHTTP.Click;
|
|
bActivateTcP.Click;
|
|
bActivateWinMsg.Click;
|
|
end;
|
|
CheckStatus;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.Log(const someText: string);
|
|
var
|
|
p: pChar;
|
|
begin
|
|
if Application.Terminated then Exit;
|
|
|
|
if not cbVerbose.Checked then Exit;
|
|
|
|
GetMem(p, Length(someText) + 1);
|
|
Move(someText[1], p^, Length(someText) + 1);
|
|
PostMessage(Handle, WM_LOG_MESSAGE, 0, integer(p));
|
|
|
|
{ Access to the VCL may only happen from within the main thread. To allow
|
|
Log to be called from within the Service implementattion, we must ensure
|
|
it's threadsafe.
|
|
|
|
So instread of just addint the log message to the Memo, we'l send a
|
|
PostMessage to the window, which wil then later be handled within the
|
|
main thread.
|
|
|
|
As a side benefit, the secution of the Log doe snot need to wait for this
|
|
logging to happen (as usage of, for example, Synchronize would require),
|
|
which will in turn make the server more respinsible for a simultaneous
|
|
calls. }
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.WMLog(var Message: TMessage);
|
|
var
|
|
p: pChar;
|
|
begin
|
|
try
|
|
p := pChar(Message.LParam);
|
|
Memo.Lines.Add(p);
|
|
Freemem(p);
|
|
except
|
|
on E: Exception do
|
|
Memo.Lines.Add(E.Classname + ': ' + E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.ActivateGroupBox(iGroupBox: TGroupBox; iActivate: boolean);
|
|
var
|
|
i, j: integer;
|
|
lPanel: TPanel;
|
|
begin
|
|
if iGroupBox <> nil then
|
|
for i := 0 to (iGroupBox.ControlCount - 1) do begin
|
|
if not (iGroupBox.Controls[i] is TBitBtn) and
|
|
not (iGroupBox.Controls[i] is TComboBox) and
|
|
not ((iGroupBox.Controls[i] is TLabel) and (TLabel(iGroupBox.Controls[i]).Caption = 'Message:')) then iGroupBox.Controls[i].Enabled := iActivate;
|
|
if (iGroupBox.Controls[i] is TPanel) then begin
|
|
lPanel := TPanel(iGroupBox.Controls[i]);
|
|
for j := 0 to (lPanel.ControlCount - 1) do begin
|
|
lPanel.Controls[j].Enabled := iActivate;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.HttpServerAfterServerActivate(Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbHttp, false);
|
|
Log((Sender as TComponent).ClassName + ' has been activated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.HttpServerAfterServerDeactivate(Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbHttp, true);
|
|
Log((Sender as TComponent).ClassName + ' has been deactivated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.TcpServerAfterServerActivate(Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbTcp, false);
|
|
Log((Sender as TComponent).ClassName + ' has been activated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.TcpServerAfterServerDeactivate(Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbTcp, true);
|
|
Log((Sender as TComponent).ClassName + ' has been deactivated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.WinMessageServerAfterServerActivate(Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbWinMsg, false);
|
|
Log((Sender as TComponent).ClassName + ' has been activated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.WinMessageServerAfterServerDeactivate(Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbWinMsg, true);
|
|
Log((Sender as TComponent).ClassName + ' has been deactivated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.cbUseCompressionClick(Sender: TObject);
|
|
begin
|
|
ROBINMessage.UseCompression := cbUseCompression.Checked;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.cbTCPMsgChange(Sender: TObject);
|
|
begin
|
|
with TComboBox(Sender) do begin
|
|
{$IFNDEF NO_INDY}
|
|
ROIndyTCPServer.Dispatchers[0].Message := TROMessage(Items.Objects[ItemIndex]);
|
|
{$ENDIF NO_INDY}
|
|
BpdxTCPServer.Dispatchers[0].Message := TROMessage(Items.Objects[ItemIndex]);
|
|
end;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.cbWinMsgMsgChange(Sender: TObject);
|
|
begin
|
|
with TComboBox(Sender) do
|
|
WinMessageServer.Dispatchers[0].Message :=TROMessage(Items.Objects[ItemIndex]);
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bActivateTCPClick(Sender: TObject);
|
|
begin
|
|
{$IFDEF NO_INDY}
|
|
rbBpdxTcp.Checked:= True;
|
|
{$ENDIF NO_INDY}
|
|
if rbBpdxTcp.Checked then begin
|
|
BpdxTCPServer.BpdxServer.ServerPort := seTCPPort.Value;
|
|
BpdxTCPServer.Active := true;
|
|
bDeactivateTcp.Enabled := false;
|
|
Log('Please note that BPDX Servers cannot be deactivated once they have been activated.' +
|
|
'This is a limitation of the BPDX Library, see the Help topic for this sample for more details.');
|
|
end
|
|
{$IFNDEF NO_INDY}
|
|
else begin
|
|
ROIndyTCPServer.Port := seTCPPort.Value;
|
|
ROIndyTCPServer.Active := true;
|
|
end
|
|
{$ENDIF NO_INDY}
|
|
;
|
|
|
|
bDeactivateTcp.Visible := true;
|
|
bActivateTcp.Visible := false;
|
|
CheckStatus;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bDeactivateTCPClick(Sender: TObject);
|
|
begin
|
|
bActivateTcp.Visible := true;
|
|
bDeactivateTcp.Visible := false;
|
|
|
|
BpdxTCPServer.Active := false;
|
|
{$IFNDEF NO_INDY}
|
|
ROIndyTCPServer.Active := false;
|
|
{$ENDIF NO_INDY}
|
|
CheckStatus;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bActivateHTTPClick(Sender: TObject);
|
|
begin
|
|
{$IFDEF NO_INDY}
|
|
rbBpdxHttp.Checked:= True;
|
|
{$ENDIF NO_INDY}
|
|
if rbBpdxHttp.Checked then begin
|
|
BpdxHTTPServer.BpdxServer.ServerPort := seHTTPPort.Value;
|
|
BpdxHTTPServer.Active := true;
|
|
bDeactivateHttp.Enabled := false;
|
|
Log('Please note that BPDX Servers cannot be deactivated once they have been activated.' +
|
|
'This is a limitation of the BPDX Library, see the Help topic for this sample for more details.');
|
|
end
|
|
{$IFNDEF NO_INDY}
|
|
else begin
|
|
ROIndyHTTPServer.Port := seHTTPPort.Value;
|
|
ROIndyHTTPServer.Active := true;
|
|
end
|
|
{$ENDIF NO_INDY}
|
|
;
|
|
bDeactivateHttp.Visible := true;
|
|
bActivateHttp.Visible := false;
|
|
CheckStatus;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bDeactivateHTTPClick(Sender: TObject);
|
|
begin
|
|
bActivateHttp.Visible := true;
|
|
bDeactivateHttp.Visible := false;
|
|
|
|
BpdxHTTPServer.Active := false;
|
|
{$IFNDEF NO_INDY}
|
|
ROIndyHTTPServer.Active := false;
|
|
{$ENDIF NO_INDY}
|
|
CheckStatus;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bActivateWinMsgClick(Sender: TObject);
|
|
begin
|
|
WinMessageServer.ServerID := eServerID.Text;
|
|
WinMessageServer.Active := true;
|
|
|
|
bDeactivateWinMsg.Visible := true;
|
|
bActivateWinMsg.Visible := false;
|
|
CheckStatus;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bDeactivateWinMsgClick(Sender: TObject);
|
|
begin
|
|
bActivateWinMsg.Visible := true;
|
|
bDeactivateWinMsg.Visible := false;
|
|
WinMessageServer.Active := false;
|
|
CheckStatus;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.cb_EncryptClick(Sender: TObject);
|
|
var
|
|
lEncryption: TROEncryptionMethod;
|
|
begin
|
|
if cb_Encrypt.Checked then
|
|
lEncryption := tetDES
|
|
else
|
|
lEncryption := tetNone;
|
|
|
|
BpdxHttpServer.Encryption.EncryptionMethod := lEncryption;
|
|
BpdxTcpServer.Encryption.Assign(BpdxHttpServer.Encryption);
|
|
{$IFNDEF NO_INDY}
|
|
ROIndyHttpServer.Encryption.Assign(BpdxHttpServer.Encryption);
|
|
ROIndyTcpServer.Encryption.Assign(BpdxHttpServer.Encryption);
|
|
ROIndySuperTCPServer.Encryption.Assign(BpdxHttpServer.Encryption);
|
|
{$ENDIF NO_INDY}
|
|
{$IFNDEF NO_Synapse}
|
|
ROSynapseSuperHTTPServer.Encryption.Assign(BpdxHttpServer.Encryption);
|
|
ROSynapseSuperTCPServer.Encryption.Assign(BpdxHttpServer.Encryption);
|
|
{$ENDIF}
|
|
WinMessageServer.Encryption.Assign(BpdxHttpServer.Encryption);
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.cb_SupportKeepAliveClick(Sender: TObject);
|
|
begin
|
|
BpdxHttpServer.SupportKeepAlive := cb_SupportKeepAlive.Checked;
|
|
{$IFNDEF NO_INDY}
|
|
ROIndyHttpServer.KeepAlive := cb_SupportKeepAlive.Checked;
|
|
{$ENDIF NO_INDY}
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.cbDisableNagleClick(Sender: TObject);
|
|
begin
|
|
{$IFNDEF NO_INDY}
|
|
ROIndyTCPServer.DisableNagle := cbDisableNagle.Checked
|
|
{$ENDIF NO_INDY}
|
|
end;
|
|
|
|
constructor TMegaDemoServerMainForm.Create(aOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
fCritical := TCriticalSection.Create;
|
|
end;
|
|
|
|
destructor TMegaDemoServerMainForm.Destroy;
|
|
begin
|
|
fCritical.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.CheckStatus;
|
|
var
|
|
fStatus: Boolean;
|
|
begin
|
|
FStatus :=
|
|
{$IFNDEF NO_INDY}
|
|
ROIndyHTTPServer.Active or
|
|
ROIndyTCPServer.Active or
|
|
ROIndySuperTCPServer.Active or
|
|
{$ENDIF NO_INDY}
|
|
{$IFNDEF NO_Synapse}
|
|
ROSynapseSuperHTTPServer.Active or
|
|
ROSynapseSuperTCPServer.Active or
|
|
{$ENDIF}
|
|
WinMessageServer.Active or
|
|
BpdxHttpServer.Active or
|
|
BpdxTcpServer.Active;
|
|
if FStatus then begin
|
|
ErrorMemo.Visible := False;
|
|
Memo.Visible := True;
|
|
end
|
|
else begin
|
|
ErrorMemo.Visible := True;
|
|
Memo.Visible := False;
|
|
end;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.MessageInitializeMessage(
|
|
Sender: TROMessage; const aTransport: IROTransport;
|
|
const anInterfaceName, aMessageName: String);
|
|
begin
|
|
Log('Request via '+Sender.ClassName);
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.cbSuperTCPMsgChange(Sender: TObject);
|
|
begin
|
|
with TComboBox(Sender) do begin
|
|
{$IFNDEF NO_INDY}
|
|
ROIndySuperTCPServer.Dispatchers[0].Message := TROMessage(Items.Objects[ItemIndex]);
|
|
{$ENDIF NO_INDY}
|
|
{$IFNDEF NO_Synapse}
|
|
ROSynapseSuperTCPServer.Dispatchers[0].Message := TROMessage(Items.Objects[ItemIndex]);
|
|
{$ENDIF NO_Synapse}
|
|
end;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bDeactivateSuperTCPClick(
|
|
Sender: TObject);
|
|
begin
|
|
bActivateSuperTcp.Visible := true;
|
|
bDeactivateSuperTcp.Visible := false;
|
|
{$IFNDEF NO_INDY}
|
|
ROIndySuperTCPServer.Active := false;
|
|
{$ENDIF NO_INDY}
|
|
{$IFNDEF NO_Synapse}
|
|
ROSynapseSuperTCPServer.Active := false;
|
|
{$ENDIF NO_Synapse}
|
|
CheckStatus;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bActivateSuperTCPClick(
|
|
Sender: TObject);
|
|
var
|
|
fServer: TROServer;
|
|
begin
|
|
fServer:=nil;
|
|
{$IFDEF NO_Synapse}
|
|
rbIndySuperTCP.Checked:= True;
|
|
{$ENDIF}
|
|
{$IFNDEF NO_INDY}
|
|
if rbIndySuperTCP.Checked then begin
|
|
ROIndySuperTCPServer.Port := seSuperTCPPort.Value;
|
|
fServer := ROIndySuperTCPServer;
|
|
end;
|
|
{$ELSE}
|
|
rbSynapseSuperTcp.Checked := True;
|
|
{$ENDIF NO_INDY}
|
|
|
|
{$IFNDEF NO_Synapse}
|
|
if rbSynapseSuperTcp.Checked then begin
|
|
ROSynapseSuperTCPServer.Port := seSuperTCPPort.Value;
|
|
fServer := ROSynapseSuperTCPServer;
|
|
end;
|
|
{$ENDIF}
|
|
if Assigned(fServer) then begin
|
|
fServer.Active:= True;
|
|
bDeactivateSuperTcp.Visible := true;
|
|
bActivateSuperTcp.Visible := false;
|
|
CheckStatus;
|
|
end
|
|
else begin
|
|
ShowMessage('No Super TCP servers was found.'+sLineBreak+
|
|
'Please use Indy or Synapse library.');
|
|
end;
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.SuperTcpServerAfterServerActivate(
|
|
Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbSuperTcp, false);
|
|
Log((Sender as TComponent).ClassName + ' has been activated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.SuperTcpServerAfterServerDeactivate(
|
|
Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbSuperTcp, true);
|
|
Log((Sender as TComponent).ClassName + ' has been deactivated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.SuperHttpServerAfterServerActivate(
|
|
Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbSuperHTTP, false);
|
|
Log((Sender as TComponent).ClassName + ' has been activated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.SuperHttpServerAfterServerDeactivate(
|
|
Sender: TObject);
|
|
begin
|
|
ActivateGroupBox(gbSuperHTTP, true);
|
|
Log((Sender as TComponent).ClassName + ' has been deactivated...');
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bActivateSuperHTTPClick(Sender: TObject);
|
|
begin
|
|
{$IFNDEF NO_Synapse}
|
|
ROSynapseSuperHTTPServer.Port := seSuperHTTPPort.Value;
|
|
ROSynapseSuperHTTPServer.Active := true;
|
|
bDeactivateSuperHttp.Visible := true;
|
|
bActivateSuperHttp.Visible := false;
|
|
CheckStatus;
|
|
{$ELSE}
|
|
ShowMessage('No Super HTTP servers was found.'+sLineBreak+
|
|
'Please use Synapse library.');
|
|
{$ENDIF}
|
|
end;
|
|
|
|
procedure TMegaDemoServerMainForm.bDeactivateSuperHTTPClick(
|
|
Sender: TObject);
|
|
begin
|
|
bActivateSuperHttp.Visible := true;
|
|
bDeactivateSuperHttp.Visible := false;
|
|
|
|
{$IFNDEF NO_Synapse}
|
|
ROSynapseSuperHTTPServer.Active := false;
|
|
{$ENDIF}
|
|
CheckStatus;
|
|
end;
|
|
|
|
end.
|
|
|