Componentes.Terceros.RemObj.../internal/5.0.30.691/1/RemObjects SDK for Delphi/Samples/MegaDemo/MegaDemoServerMain.pas

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.