You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5438 8e941d3f-bd1b-0410-a28a-d453659cc2b4
1433 lines
41 KiB
ObjectPascal
1433 lines
41 KiB
ObjectPascal
{*********************************************************}
|
|
{* Main window for server *}
|
|
{*********************************************************}
|
|
|
|
(* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is TurboPower FlashFiler
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* TurboPower Software
|
|
*
|
|
* Portions created by the Initial Developer are Copyright (C) 1996-2002
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* ***** END LICENSE BLOCK ***** *)
|
|
|
|
unit uFFSMain;
|
|
|
|
{$I FFDEFINE.INC}
|
|
|
|
{$IFDEF SingleEXE}
|
|
!! Error: This application should not be compiled with SingleEXE mode enabled
|
|
{$ENDIF}
|
|
|
|
{$DEFINE UseTrayIcon}
|
|
|
|
interface
|
|
|
|
uses
|
|
Messages, SysUtils, Classes, Graphics, Controls,
|
|
Forms, Dialogs, ExtCtrls, StdCtrls, Menus, Buttons,
|
|
Windows,
|
|
{$IFDEF UseTrayIcon}
|
|
ShellAPI,
|
|
{$ENDIF}
|
|
ffconst,
|
|
ffnetmsg,
|
|
ffdtmsgq,
|
|
ffllbase,
|
|
fflllgcy,
|
|
fflleng,
|
|
ffhash,
|
|
ffllprot,
|
|
ffsrbase,
|
|
ffsrcfg,
|
|
ffsreng,
|
|
ffsrcmd,
|
|
ffllthrd,
|
|
uffegmgr,
|
|
ffsrintm,
|
|
ComCtrls,
|
|
{$IFDEF DCC4ORLATER}
|
|
ImgList,
|
|
{$ENDIF}
|
|
ToolWin;
|
|
|
|
type
|
|
TffServerState = (
|
|
ssInitializing,
|
|
ssDown,
|
|
ssComingUp,
|
|
ssUp,
|
|
ssUpMinimized);
|
|
|
|
const
|
|
{$IFDEF UseTrayIcon}
|
|
ffc_tiCallBack = WM_USER + $300;
|
|
{$ENDIF}
|
|
ffc_Activate = WM_USER + $301;
|
|
ffc_Minimize = WM_USER + $302;
|
|
|
|
type
|
|
TfrmFFServer = class(TForm)
|
|
pnlBottom: TPanel;
|
|
Timer1: TTimer;
|
|
PopupMenu: TPopupMenu;
|
|
pumDownServer: TMenuItem;
|
|
N3: TMenuItem;
|
|
pumExit: TMenuItem;
|
|
MainMenu: TMainMenu;
|
|
mnuServer: TMenuItem;
|
|
mnuServerUp: TMenuItem;
|
|
mnuServerDown: TMenuItem;
|
|
N1: TMenuItem;
|
|
mnuServerExit: TMenuItem;
|
|
mnuConfig: TMenuItem;
|
|
mnuConfigGeneral: TMenuItem;
|
|
mnuConfigNetwork: TMenuItem;
|
|
mnuConfigUsers: TMenuItem;
|
|
mnuConfigAliases: TMenuItem;
|
|
mnuConfigIndexes: TMenuItem;
|
|
mnuDebug: TMenuItem;
|
|
mnuDebugLog: TMenuItem;
|
|
mnuResetCounters: TMenuItem;
|
|
mnuHelp: TMenuItem;
|
|
mnuHelpAbout: TMenuItem;
|
|
mnuHelpWWW: TMenuItem;
|
|
mnuHelpEmail: TMenuItem;
|
|
pnlBig: TPanel;
|
|
pnlServers: TPanel;
|
|
gbServers: TGroupBox;
|
|
lvServers: TListView;
|
|
Splitter1: TSplitter;
|
|
pnlTransports: TPanel;
|
|
gbTransports: TGroupBox;
|
|
lvTransports: TListView;
|
|
pmuTrans: TPopupMenu;
|
|
pmuTransLog: TMenuItem;
|
|
pmuTransLogAll: TMenuItem;
|
|
pmuTransLogSep: TMenuItem;
|
|
pmuTransLogErr: TMenuItem;
|
|
pmuTransLogReq: TMenuItem;
|
|
pmuTransLogRep: TMenuItem;
|
|
ToolBar: TToolBar;
|
|
btnProps: TToolButton;
|
|
ToolButton2: TToolButton;
|
|
btnStart: TToolButton;
|
|
btnStop: TToolButton;
|
|
ImageList: TImageList;
|
|
pnlTray: TPanel;
|
|
imgUnlocked: TImage;
|
|
imgStarted: TImage;
|
|
lblTime: TLabel;
|
|
imgStopped: TImage;
|
|
imgLocked: TImage;
|
|
imgLogging: TImage;
|
|
HelpTopics1: TMenuItem;
|
|
N2: TMenuItem;
|
|
procedure mnuConfigAliasesClick(Sender: TObject);
|
|
procedure mnuDebugLogClick(Sender: TObject);
|
|
procedure mnuServerExitClick(Sender: TObject);
|
|
procedure pumDownServerClick(Sender: TObject);
|
|
procedure pumExitClick(Sender: TObject);
|
|
procedure FormActivate(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormHide(Sender: TObject);
|
|
procedure Timer1Timer(Sender: TObject);
|
|
procedure mnuResetCountersClick(Sender: TObject);
|
|
procedure mnuHelpAboutClick(Sender: TObject);
|
|
procedure mnuConfigUsersClick(Sender: TObject);
|
|
procedure mnuHelpWWWClick(Sender: TObject);
|
|
procedure mnuHelpEmailClick(Sender: TObject);
|
|
procedure mnuConfigGeneralClick(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormPaint(Sender: TObject);
|
|
procedure mnuConfigIndexesClick(Sender: TObject);
|
|
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure mnuConfigNetworkClick(Sender: TObject);
|
|
procedure lvServersClick(Sender: TObject);
|
|
procedure pmuTransLogAllClick(Sender: TObject);
|
|
procedure pmuTransLogErrClick(Sender: TObject);
|
|
procedure pmuTransLogReqClick(Sender: TObject);
|
|
procedure pmuTransLogRepClick(Sender: TObject);
|
|
procedure lvTransportsMouseDown(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
procedure btnStartClick(Sender: TObject);
|
|
procedure btnStopClick(Sender: TObject);
|
|
procedure btnPropsClick(Sender: TObject);
|
|
procedure FormResize(Sender: TObject);
|
|
procedure HelpTopics1Click(Sender: TObject);
|
|
private
|
|
{ Private d
|
|
procedure FormResize(Sender: TObject);eclarations }
|
|
FIgnoreNextLogin : Boolean;
|
|
FState : TffServerState;
|
|
FStartTime : TDateTime;
|
|
FMsgStartTime : TDateTime;
|
|
cuIsGreen : Boolean;
|
|
FCloseClick : Boolean;
|
|
FElapsedTime : TDateTime;
|
|
FMustClose : Boolean;
|
|
FClosingFromTray : Boolean;
|
|
{$IFDEF UseTrayIcon}
|
|
tiActive : Boolean;
|
|
tiNotifyData : TNotifyIconData;
|
|
tiPresent : Boolean;
|
|
{$ENDIF}
|
|
|
|
|
|
procedure AppException(Sender : TObject; E : Exception);
|
|
procedure DisplayHint(Sender : TObject);
|
|
function Login : Boolean;
|
|
procedure MainFormMinimize(Sender : TObject);
|
|
procedure MainFormRestore(Sender : TObject);
|
|
procedure PaintPadlockBitmap;
|
|
|
|
{$IFDEF UseTrayIcon}
|
|
procedure tiAdd;
|
|
procedure tiCallBack(var Msg : TMessage); message ffc_tiCallBack;
|
|
procedure tiDelete;
|
|
function tiGetIconHandle : hIcon;
|
|
procedure tiInitNotifyData;
|
|
{$ENDIF}
|
|
public
|
|
{ Public declarations }
|
|
ServerName : TffNetAddress;
|
|
|
|
procedure BringServerUp;
|
|
procedure BringServerDown;
|
|
procedure CreateEngineMgr;
|
|
procedure FreeEngineMgr; {!!.06}
|
|
procedure DownServer;
|
|
function ElapsedTimeToStr(T : TDateTime) : string;
|
|
procedure FFCActivate(var Msg : TMessage); message ffc_Activate;
|
|
procedure FFCMinimize(var Msg : TMessage); message ffc_Minimize;
|
|
function GetMsgsPerSecAsString(aMsgCount : Longint) : string;
|
|
procedure LoadServers;
|
|
procedure LoadTransports;
|
|
procedure ResetStatistics;
|
|
procedure SetControls;
|
|
procedure SetServerName;
|
|
procedure SetServerPriority(aPriority : longint);
|
|
procedure SetState(S : TffServerState);
|
|
procedure UpdateServers;
|
|
procedure UpdateTransports;
|
|
procedure UpServer;
|
|
procedure WMSysCommand(var Msg : TMessage); message WM_SYSCOMMAND;
|
|
procedure WMQueryEndSession(var msg : TMessage); message WM_QUERYENDSESSION;
|
|
|
|
property State : TffServerState read FState write SetState;
|
|
end;
|
|
|
|
var
|
|
frmFFServer: TfrmFFServer;
|
|
|
|
implementation
|
|
|
|
uses
|
|
FFAbout,
|
|
FFLLComm,
|
|
FFLLComp,
|
|
uFFSAlas,
|
|
uFFSUser,
|
|
uFFSGenl,
|
|
uFFSIndx,
|
|
uFFSNet,
|
|
FFSrJour,
|
|
FFLogDlg, uFFsCfg;
|
|
|
|
{$R *.DFM}
|
|
|
|
{===Main Menu options================================================}
|
|
procedure TfrmFFServer.mnuConfigAliasesClick(Sender: TObject);
|
|
begin
|
|
CreateEngineMgr;
|
|
with TFFAliasForm.Create(Application) do
|
|
try
|
|
ServerEngine := TffServerEngine(lvServers.Selected.Data);
|
|
ShowModal;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuConfigGeneralClick(Sender: TObject);
|
|
begin
|
|
CreateEngineMgr;
|
|
with TFFGenConfigForm.Create(Application) do
|
|
try
|
|
ServerEngine := TffServerEngine(lvServers.Selected.Data);
|
|
ShowModal;
|
|
{ Get the bits in which we're interested. }
|
|
with ServerEngine.Configuration.GeneralInfo^ do begin
|
|
ServerName := giServerName;
|
|
ServerEngine.MaxRAM := giMaxRAM; {!!.01}
|
|
// ServerEngine.CollectGarbage := giCollectEnabled; {Deleted !!.01}
|
|
// ServerEngine.CollectFrequency := giCollectFreq; {Deleted !!.01}
|
|
SetServerName;
|
|
mnuDebugLog.Checked := giDebugLog;
|
|
FFEngineManager.EventLogEnabled := giDebugLog;
|
|
imgLogging.Visible := (giDebugLog and (not giReadOnly));
|
|
|
|
SetServerPriority(giPriority);
|
|
PaintPadlockBitmap;
|
|
end;
|
|
SetControls;
|
|
finally
|
|
Free;
|
|
end;
|
|
lvServers.Selected.Caption := ServerName;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuConfigNetworkClick(Sender: TObject);
|
|
begin
|
|
CreateEngineMgr;
|
|
with TffNetConfigForm.Create(Application) do
|
|
try
|
|
ServerEngine := TffServerEngine(lvServers.Selected.Data);
|
|
ShowModal;
|
|
if (State = ssUp) then
|
|
with ServerEngine.Configuration.GeneralInfo^ do begin
|
|
if Assigned(FFEngineManager.IPXSPXTransport) then
|
|
FFEngineManager.IPXSPXTransport.RespondToBroadcasts := giIPXSPXLFB;
|
|
if Assigned(FFEngineManager.TCPIPTransport) then
|
|
FFEngineManager.TCPIPTransport.RespondToBroadcasts := giTCPIPLFB;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuConfigIndexesClick(Sender: TObject);
|
|
begin
|
|
CreateEngineMgr;
|
|
with TffIndexForm.Create(Application) do
|
|
try
|
|
ServerEngine := TffServerEngine(lvServers.Selected.Data);
|
|
ShowModal;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuConfigUsersClick(Sender: TObject);
|
|
begin
|
|
CreateEngineMgr;
|
|
with TFFUserForm.Create(Application) do
|
|
try
|
|
ServerEngine := TffServerEngine(lvServers.Selected.Data);
|
|
ShowModal;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuDebugLogClick(Sender: TObject);
|
|
begin
|
|
CreateEngineMgr;
|
|
mnuDebugLog.Checked := not mnuDebugLog.Checked;
|
|
with TffServerEngine(lvServers.Selected.Data) do begin
|
|
Configuration.GeneralInfo^.giDebugLog := mnuDebugLog.Checked;
|
|
WriteGeneralInfo(False);
|
|
FFEngineManager.EventLogEnabled := mnuDebugLog.Checked;
|
|
imgLogging.Visible := (mnuDebugLog.Checked and (not Configuration.GeneralInfo^.giReadOnly));
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuHelpAboutClick(Sender: TObject);
|
|
var
|
|
AboutBox : TFFAboutBox;
|
|
begin
|
|
AboutBox := TFFAboutBox.Create(Application);
|
|
try
|
|
AboutBox.IsServer := true;
|
|
AboutBox.Caption := 'About FlashFiler Server';
|
|
AboutBox.ProgramName.Caption := 'FlashFiler Server';
|
|
AboutBox.ShowModal;
|
|
finally
|
|
AboutBox.Free;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuHelpWWWClick(Sender: TObject);
|
|
begin
|
|
ShellToWWW;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuHelpEmailClick(Sender: TObject);
|
|
begin
|
|
ShellToEmail;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuResetCountersClick(Sender : TObject);
|
|
begin
|
|
FMsgStartTime := Now;
|
|
ResetStatistics;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.mnuServerExitClick(Sender : TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
{====================================================================}
|
|
|
|
|
|
{===Popup menu options===============================================}
|
|
procedure TfrmFFServer.pumDownServerClick(Sender : TObject);
|
|
begin
|
|
if not Login then
|
|
Exit;
|
|
FIgnoreNextLogin := True;
|
|
Application.Restore;
|
|
Application.ProcessMessages;
|
|
BringServerDown;
|
|
// FreeEngineMgr; {!!.06}{Deleted !!.13}
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.pumExitClick(Sender : TObject);
|
|
begin
|
|
FClosingFromTray := True;
|
|
Application.Restore;
|
|
Close;
|
|
end;
|
|
{====================================================================}
|
|
|
|
|
|
{===Message handlers=================================================}
|
|
procedure TfrmFFServer.FFCActivate(var Msg : TMessage);
|
|
begin
|
|
Update;
|
|
BringServerUp;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FFCMinimize(var Msg : TMessage);
|
|
begin
|
|
Application.Minimize;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.WMQueryEndSession(var msg : TMessage);
|
|
begin
|
|
FMustClose := true;
|
|
inherited;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.WMSysCommand(var Msg : TMessage);
|
|
begin
|
|
if (((Msg.wParam) and $FFF0) = SC_CLOSE) then
|
|
FCloseClick := true;
|
|
inherited;
|
|
end;
|
|
{====================================================================}
|
|
|
|
|
|
{===Timer handler====================================================}
|
|
procedure TfrmFFServer.Timer1Timer(Sender: TObject);
|
|
begin
|
|
if State = ssUpMinimized then {!!.11}
|
|
Exit; {!!.11}
|
|
UpdateServers;
|
|
UpdateTransports;
|
|
case State of
|
|
ssComingUp :
|
|
begin
|
|
cuIsGreen := not cuIsGreen;
|
|
if cuIsGreen then begin
|
|
imgStarted.Visible := True;
|
|
imgStopped.Visible := False;
|
|
end else begin
|
|
imgStarted.Visible := False;
|
|
imgStopped.Visible := True;
|
|
end;
|
|
end;
|
|
ssUp :
|
|
begin
|
|
FElapsedTime := Now - FStartTime;
|
|
lblTime.Caption := ElapsedTimeToStr(FElapsedTime);
|
|
end;
|
|
end;{case}
|
|
end;
|
|
{====================================================================}
|
|
|
|
|
|
{===Form events======================================================}
|
|
procedure TfrmFFServer.FormActivate(Sender: TObject);
|
|
{$IFDEF UseTrayIcon}
|
|
var
|
|
OSVerInfo : TOSVersionInfo;
|
|
{$ENDIF}
|
|
begin
|
|
{$IFDEF UseTrayIcon}
|
|
tiPresent := false;
|
|
OSVerInfo.dwOSVersionInfoSize := sizeof(OSVerInfo);
|
|
if GetVersionEx(OSVerInfo) then begin
|
|
{Note: Windows95 returns version major:minor = 4:0}
|
|
if (OSVerInfo.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) or {Windows95}
|
|
(OSVerInfo.dwPlatformID = VER_PLATFORM_WIN32_NT) then {WindowsNT}
|
|
tiPresent := OSVerInfo.dwMajorVersion > 3
|
|
end;
|
|
{$ENDIF}
|
|
|
|
if Assigned(FFEngineManager) and Assigned(lvServers.Selected) then {!!.13}
|
|
if TffServerEngine(lvServers.Selected.Data).Configuration.GeneralInfo^.giAutoMini {!!.13}
|
|
and (State = ssInitializing) then FIgnoreNextLogin := true; {!!.13}
|
|
|
|
if not Login then begin
|
|
PostMessage(Handle, WM_QUIT, 0, 0);
|
|
Exit;
|
|
end;
|
|
try
|
|
if assigned(FFEngineManager) and assigned(lvServers.Selected) then {!!.02}
|
|
with TffServerEngine(lvServers.Selected.Data).Configuration.GeneralInfo^ do begin
|
|
{..server name, etc}
|
|
ServerName := giServerName;
|
|
TffServerEngine(lvServers.Selected.Data).BufferManager.MaxRAM := giMaxRAM;
|
|
{..ports}
|
|
FFSetTCPPort(giTCPPort);
|
|
FFSetUDPPortServer(giUDPPortSr);
|
|
FFSetUDPPortClient(giUDPPortCl);
|
|
FFSetIPXSocketServer(giIPXSocketSr);
|
|
FFSetIPXSocketClient(giIPXSocketCl);
|
|
FFSetSPXSocket(giSPXSocket);
|
|
{..keepalive stuff}
|
|
ffc_LastMsgInterval := giLastMsgInterval;
|
|
ffc_KeepAliveInterval := giKAInterval;
|
|
ffc_KeepAliveRetries := giKARetries;
|
|
{..priority}
|
|
SetServerPriority(giPriority);
|
|
{..auto up}
|
|
if giAutoUp and (ServerName <> '') then
|
|
PostMessage(Handle, ffc_Activate, 0, 0);
|
|
{..auto minimize}
|
|
if giAutoMini then
|
|
PostMessage(Handle, ffc_Minimize, 0, 0);
|
|
end;
|
|
Application.ShowHint := true;
|
|
State := ssDown;
|
|
SetServerName;
|
|
{$IFDEF UseTrayIcon}
|
|
if tiPresent then
|
|
tiAdd;
|
|
{$ENDIF}
|
|
except
|
|
{????}
|
|
raise;
|
|
end;
|
|
(******
|
|
{parse out the command line}
|
|
ActivateIt := false;
|
|
MinimizeIt := false;
|
|
ParmCount := ParamCount;
|
|
if (ParmCount > 0) then begin
|
|
{the server name is parameter 1}
|
|
ServerName := ParamStr(1);
|
|
{whether to make the server active is parameter 2: the value
|
|
should be either 'Up' or 'Down', but actually all other values are ignored
|
|
and assumed to be 'Down'}
|
|
if (ParmCount > 1) then begin
|
|
ParmValue := ParamStr(2);
|
|
if (FFCmpShStrUC(ParmValue, 'UP', length(ParmValue)) = 0) then
|
|
ActivateIt := true;
|
|
end;
|
|
if (ParmCount > 2 ) then begin
|
|
ParmValue := ParamStr(3);
|
|
if ( FFCmpShStrUC( ParmValue, 'WINSOCK', length( ParmValue) ) = 0 ) then
|
|
mnuConfigWinsockClick( Self )
|
|
else
|
|
if ( FFCmpShStrUC( ParmValue, 'NETBIOS',
|
|
length( ParmValue) ) = 0 ) then
|
|
mnuConfigNetBIOSClick( Self );
|
|
Application.ProcessMessages;
|
|
end;
|
|
if ( ParmCount > 3 ) then begin
|
|
ParmValue := ParamStr(4);
|
|
if (FFCmpShStrUC(ParmValue, 'MINIMIZE', length(ParmValue)) = 0) then
|
|
MinimizeIt := true;
|
|
end;
|
|
end;
|
|
*****)
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
begin
|
|
if FMustClose then begin
|
|
if (State <> ssDown) then begin
|
|
if (State = ssUpMinimized) then
|
|
Application.Restore;
|
|
BringServerDown;
|
|
end;
|
|
CanClose := true;
|
|
end else begin
|
|
if (State = ssUp) and FCloseClick then begin
|
|
FCloseClick := false;
|
|
Application.Minimize;
|
|
end
|
|
else if (State <> ssDown) then begin
|
|
if Login then begin
|
|
if (State = ssUpMinimized) then
|
|
Application.Restore;
|
|
BringServerDown;
|
|
end;
|
|
end;
|
|
CanClose := (State = ssDown);
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
begin
|
|
{$IFDEF UseTrayIcon}
|
|
tiDelete;
|
|
{$ENDIF}
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FormCreate(Sender : TObject);
|
|
begin
|
|
FClosingFromTray := False;
|
|
FIgnoreNextLogin := False;
|
|
State := ssInitializing;
|
|
Application.OnMinimize := MainFormMinimize;
|
|
Application.OnRestore := MainFormRestore;
|
|
Application.OnException := AppException;
|
|
Application.OnHint := DisplayHint;
|
|
FFEngineManager := nil;
|
|
IsMultiThread := True;
|
|
pumDownServer.Enabled := False; {!!.01 Added}
|
|
FFSConfigGetFormPos('Main', Self); {!!.06}
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.AppException(Sender : TObject; E : Exception);
|
|
begin
|
|
Application.ShowException(E)
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.DisplayHint(Sender : TObject);
|
|
begin
|
|
if Application.MainForm.Active then
|
|
pnlBottom.Caption := ' ' + Application.Hint; {!!.06}
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FormDestroy(Sender: TObject);
|
|
begin
|
|
FFSConfigSaveFormPrefs('Main', Self);
|
|
FreeEngineMgr; {!!.06}
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FormHide(Sender : TObject);
|
|
begin
|
|
ShowWindow(Application.Handle, SW_HIDE);
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FormPaint(Sender : TObject);
|
|
begin
|
|
PaintPadlockBitmap;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FormShow(Sender : TObject);
|
|
begin
|
|
FFSConfigGetFormPrefs('Main', Self);
|
|
{ Create the engine manager. }
|
|
CreateEngineMgr;
|
|
{Begin !!.02}
|
|
try
|
|
LoadServers;
|
|
LoadTransports;
|
|
finally
|
|
SetControls;
|
|
end;
|
|
{End !!.02}
|
|
end;
|
|
{--------}
|
|
function TfrmFFServer.Login : Boolean;
|
|
var
|
|
LoginDlg : TFFLoginDialog;
|
|
Hash : TffWord32;
|
|
Pwd : TffName;
|
|
Server : TffServerEngine;
|
|
User : TffUserItem;
|
|
UserInx : integer;
|
|
UserID : TffName;
|
|
begin
|
|
if FMustClose then begin {!!.11}
|
|
Result := True; {!!.11}
|
|
Exit; {!!.11}
|
|
end; {!!.11}
|
|
if FIgnoreNextLogin then begin
|
|
FIgnoreNextLogin := False;
|
|
Result := True;
|
|
Exit;
|
|
end;
|
|
Server := nil;
|
|
if lvServers.SelCount > 0 then
|
|
Server := TffServerEngine(lvServers.Selected.Data);
|
|
if (not assigned(Server)) or
|
|
(not Server.Configuration.GeneralInfo^.giIsSecure) then begin
|
|
Result := true;
|
|
Exit;
|
|
end;
|
|
Result := false;
|
|
LoginDlg := TFFLoginDialog.Create(Application);
|
|
try
|
|
if (LoginDlg.ShowModal = mrOK) then begin
|
|
UserID := LoginDlg.edtUserName.Text;
|
|
Pwd := LoginDlg.edtPassword.Text;
|
|
UserInx := Server.Configuration.UserList.UserIndex(UserID);
|
|
if (UserInx <> -1) then begin
|
|
User := Server.Configuration.UserList[UserInx];
|
|
Hash := FFCalcShStrElfHash(Pwd);
|
|
if (Hash = User.PasswordHash) and
|
|
(arAdmin in User.Rights) then
|
|
Result := true;
|
|
end
|
|
end;
|
|
finally
|
|
LoginDlg.Free;
|
|
end;{try..finally}
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.MainFormMinimize(Sender : TObject);
|
|
begin
|
|
if (State = ssUp) then
|
|
State := ssUpMinimized;
|
|
{$IFDEF UseTrayIcon}
|
|
if tiPresent and (State = ssUpMinimized) then begin
|
|
Hide;
|
|
end;
|
|
{$ENDIF}
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.MainFormRestore(Sender : TObject);
|
|
begin
|
|
{$IFDEF UseTrayIcon}
|
|
if tiPresent and (State = ssUpMinimized) then begin
|
|
Show;
|
|
SetForegroundWindow(Handle);
|
|
end;
|
|
{$ENDIF}
|
|
if (State = ssUpMinimized) then
|
|
State := ssUp;
|
|
if (not FClosingFromTray) and (not Login) then
|
|
Application.Minimize;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.PaintPadlockBitmap;
|
|
begin
|
|
if lvServers.SelCount > 0 then begin
|
|
imgLocked.Visible := TffServerEngine(lvServers.Selected.Data).Configuration.GeneralInfo^.giIsSecure;
|
|
imgUnlocked.Visible := not imgLocked.Visible;
|
|
end else begin
|
|
imgLocked.Visible := False;
|
|
imgUnlocked.Visible := False;
|
|
end;
|
|
end;
|
|
{====================================================================}
|
|
|
|
|
|
{===property handlers================================================}
|
|
procedure TfrmFFServer.SetState(S : TffServerState);
|
|
begin
|
|
if (S = FState) and (S <> ssInitializing) then
|
|
Exit;
|
|
FState := S;
|
|
case S of
|
|
ssInitializing :
|
|
begin
|
|
{..edit controls}
|
|
lblTime.Caption := ElapsedTimeToStr(0.0);
|
|
end;
|
|
ssDown :
|
|
begin
|
|
{..menu items}
|
|
if (ServerName = '') then
|
|
mnuServerUp.Enabled := false
|
|
else
|
|
mnuServerUp.Enabled := true;
|
|
mnuServerDown.Enabled := false;
|
|
if ((assigned(FFEngineManager)) and (lvServers.SelCount > 0)) then
|
|
with TffServerEngine(lvServers.Selected.Data).Configuration do begin
|
|
FFEngineManager.EventLogEnabled := mnuDebugLog.Checked;
|
|
end;
|
|
|
|
{..speedbutton actions}
|
|
if (ServerName = '') then
|
|
btnStart.Enabled := false
|
|
else
|
|
btnStart.Enabled := true;
|
|
btnStop.Enabled := false;
|
|
|
|
{..online indicator}
|
|
imgStarted.Visible := False;
|
|
imgStopped.Visible := True;
|
|
|
|
{..timer}
|
|
Timer1.Enabled := false;
|
|
end;
|
|
ssComingUp :
|
|
begin
|
|
{..menu items}
|
|
mnuServerUp.Enabled := false;
|
|
{..speedbutton actions}
|
|
btnStart.Enabled := false;
|
|
{..edit controls}
|
|
lblTime.Caption := ElapsedTimeToStr(0.0);
|
|
{..form fields}
|
|
FStartTime := Now;
|
|
FMsgStartTime := Now;
|
|
{..timer}
|
|
Timer1.Enabled := true;
|
|
end;
|
|
ssUp :
|
|
begin
|
|
{..menu items}
|
|
mnuServerUp.Enabled := false;
|
|
mnuServerDown.Enabled := true;
|
|
{..speedbutton actions}
|
|
btnStart.Enabled := false;
|
|
btnStop.Enabled := true;
|
|
{..online indicator}
|
|
imgStarted.Visible := True;
|
|
imgStopped.Visible := False;
|
|
{..timer}
|
|
Timer1.Enabled := true;
|
|
end;
|
|
ssUpMinimized :
|
|
begin
|
|
{..timer}
|
|
Timer1.Enabled := false;
|
|
end;
|
|
end;{case}
|
|
end;
|
|
{====================================================================}
|
|
|
|
|
|
{===Utility methods==================================================}
|
|
procedure TfrmFFServer.BringServerDown;
|
|
begin
|
|
if (State = ssUp) then begin
|
|
DownServer;
|
|
State := ssDown;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.BringServerUp;
|
|
begin
|
|
if (State = ssDown) then begin
|
|
Timer1.Interval := 250;
|
|
cuIsGreen := false;
|
|
State := ssComingUp;
|
|
try
|
|
UpServer;
|
|
Timer1.Interval := 1000;
|
|
State := ssUp;
|
|
except
|
|
State := ssDown;
|
|
raise;
|
|
end;{try..except}
|
|
end;
|
|
LoadServers;
|
|
LoadTransports;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.CreateEngineMgr;
|
|
begin
|
|
if not assigned(FFEngineManager) then begin
|
|
FFEngineManager := TffEngineManager.Create(nil);
|
|
if ParamCount > 0 then
|
|
FFEngineManager.ScriptFile := ParamStr(1);
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.FreeEngineMgr; {!!.06}
|
|
begin
|
|
if assigned(FFEngineManager) then
|
|
try
|
|
FFEngineManager.ShutDown;
|
|
finally
|
|
FFEngineManager.Free;
|
|
FFEngineManager := nil;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.DownServer;
|
|
{Deleted !!.01}
|
|
{var
|
|
Idx : Integer;}
|
|
begin
|
|
Screen.Cursor := crHourGlass;
|
|
try
|
|
{free all server engines}
|
|
{Begin !!.01}
|
|
if assigned(FFEngineManager) then begin
|
|
pumDownServer.Enabled := False;
|
|
FFEngineManager.ShutDown;
|
|
{ for Idx := 0 to Pred(lvServers.Items.Count) do
|
|
with TffServerEngine(lvServers.Items[Idx].Data) do
|
|
State := ffesInactive; }
|
|
end;
|
|
{End !!.01}
|
|
finally
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
{redisplay the counters}
|
|
ResetStatistics;
|
|
Timer1Timer(Self);
|
|
end;
|
|
{--------}
|
|
function TfrmFFServer.ElapsedTimeToStr(T : TDateTime) : string;
|
|
var
|
|
Dy : integer;
|
|
Hr : integer;
|
|
Mi : integer;
|
|
Se : integer;
|
|
WorkSt : string[9];
|
|
begin
|
|
Dy := trunc(T);
|
|
T := frac(T) * 24.0;
|
|
Hr := trunc(T);
|
|
T := frac(T) * 60.0;
|
|
Mi := trunc(T);
|
|
Se := trunc(frac(T) * 60.0);
|
|
{123456789012345678}
|
|
Result := 'Up: 0:00:00:00';
|
|
Result[10] := TimeSeparator;
|
|
Result[12] := TimeSeparator;
|
|
Result[16] := TimeSeparator;
|
|
Str(Dy:5, WorkSt);
|
|
Move(WorkSt[1], Result[5], 5);
|
|
Str(Hr:2, WorkSt);
|
|
Result[12] := WorkSt[2];
|
|
if (Hr > 9) then
|
|
Result[11] := WorkSt[1];
|
|
Str(Mi:2, WorkSt);
|
|
Result[15] := WorkSt[2];
|
|
if (Mi > 9) then
|
|
Result[14] := WorkSt[1];
|
|
Str(Se:2, WorkSt);
|
|
Result[18] := WorkSt[2];
|
|
if (Se > 9) then
|
|
Result[17] := WorkSt[1];
|
|
end;
|
|
{--------}
|
|
function TfrmFFServer.GetMsgsPerSecAsString(aMsgCount: Integer): string;
|
|
var
|
|
MsgsPerSec : double;
|
|
begin
|
|
if (FElapsedTime > 0.0) then
|
|
MsgsPerSec := aMsgCount / (FElapsedTime * 86400.0)
|
|
else
|
|
MsgsPerSec := 0.0;
|
|
Str(MsgsPerSec:0:4, Result);
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.LoadServers;
|
|
var
|
|
ListItem : TListItem;
|
|
SelServIdx : Integer;
|
|
Servers : TffList;
|
|
i : Integer;
|
|
begin
|
|
if assigned(FFEngineManager) then begin
|
|
if lvServers.SelCount > 0 then
|
|
SelServIdx := lvServers.Selected.Index
|
|
else
|
|
SelServIdx := 0;
|
|
lvServers.Items.BeginUpdate;
|
|
Servers := TffList.Create;
|
|
try
|
|
lvServers.Items.Clear;
|
|
FFEngineManager.GetServerEngines(Servers);
|
|
for i := 0 to Pred(Servers.Count) do begin
|
|
ListItem := lvServers.Items.Add;
|
|
with TffServerEngine(TffIntListItem(Servers[i]).KeyAsInt) do begin
|
|
ListItem.Caption := Configuration.ServerName;
|
|
ListItem.Data := Pointer(TffIntListItem(Servers[i]).KeyAsInt);
|
|
ListItem.SubItems.Add(FFMapStateToString(State));
|
|
ListItem.SubItems.Add(FFCommaizeChL(ClientList.ClientCount, ThousandSeparator));
|
|
ListItem.SubItems.Add(FFCommaizeChL(SessionList.SessionCount, ThousandSeparator));
|
|
ListItem.SubItems.Add(FFCommaizeChL(DatabaseList.DatabaseCount, ThousandSeparator));
|
|
ListItem.SubItems.Add(FFCommaizeChL(TableList.TableCount, ThousandSeparator));
|
|
ListItem.SubItems.Add(FFCommaizeChL(CursorList.CursorCount, ThousandSeparator));
|
|
ListItem.SubItems.Add(FFCommaizeChL(BufferManager.RAMUsed, ThousandSeparator));
|
|
end;
|
|
if i = SelServIdx then
|
|
lvServers.Selected := ListItem;
|
|
end;
|
|
finally
|
|
Servers.Free;
|
|
lvServers.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.LoadTransports;
|
|
var
|
|
i : Integer;
|
|
NewTransItem : TListItem;
|
|
Transports : TffList;
|
|
begin
|
|
Transports := TffList.Create;
|
|
try
|
|
lvTransports.Items.Clear;
|
|
if lvServers.SelCount > 0 then begin
|
|
if assigned(FFEngineManager) then begin
|
|
FFEngineManager.GetTransports(TffServerEngine(lvServers.Selected.Data),
|
|
Transports);
|
|
lvTransports.Items.BeginUpdate;
|
|
try
|
|
lvTransports.Items.Clear;
|
|
for i := 0 to Pred(Transports.Count) do begin
|
|
with TffBaseTransport(TffIntListItem(Transports[i]).KeyAsInt) do begin
|
|
NewTransItem := lvTransports.Items.Add;
|
|
NewTransItem.Caption := GetName;
|
|
NewTransItem.Data := Pointer(TffIntListItem(Transports[i]).KeyAsInt);
|
|
NewTransItem.SubItems.Add(ServerName);
|
|
NewTransItem.SubItems.Add(FFMapStateToString(State));
|
|
NewTransItem.SubItems.Add(FFCommaizeChL(ConnectionCount, ThousandSeparator));
|
|
NewTransItem.SubItems.Add(FFCommaizeChL(MsgCount, ThousandSeparator));
|
|
NewTransItem.SubItems.Add(GetMsgsPerSecAsString(MsgCount));
|
|
end;
|
|
end;
|
|
finally
|
|
lvTransports.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
end;
|
|
finally
|
|
Transports.Free;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.lvServersClick(Sender: TObject);
|
|
begin
|
|
LoadTransports;
|
|
SetControls;
|
|
PaintPadlockBitmap;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.ResetStatistics;
|
|
var
|
|
i : Integer;
|
|
begin
|
|
for i := 0 to pred(lvTransports.Items.Count) do begin
|
|
with TffBaseTransport(lvTransports.Items[i].Data) do begin
|
|
ResetMsgCount;
|
|
end;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.SetControls;
|
|
var
|
|
SelectedServer : TffServerEngine;
|
|
IsServerSelected : Boolean;
|
|
begin
|
|
SelectedServer := nil;
|
|
IsServerSelected := lvServers.SelCount > 0;
|
|
if IsServerSelected then begin
|
|
SelectedServer := TffServerEngine(lvServers.Selected.Data);
|
|
gbTransports.Caption := format(' Transports for %s ', [lvServers.Selected.Caption]);
|
|
imgLogging.Visible := SelectedServer.Configuration.GeneralInfo^.giDebugLog;
|
|
mnuDebugLog.Checked := imgLogging.Visible;
|
|
end else begin
|
|
gbTransports.Caption := ' Transports for selected server ';
|
|
imgLogging.Visible := False;
|
|
mnuDebugLog.Checked := False;
|
|
end;
|
|
mnuConfigGeneral.Enabled := IsServerSelected;
|
|
mnuConfigNetwork.Enabled := IsServerSelected;
|
|
mnuConfigAliases.Enabled := IsServerSelected;
|
|
mnuConfigIndexes.Enabled := IsServerSelected;
|
|
mnuConfigUsers.Enabled := IsServerSelected;
|
|
btnProps.Enabled := IsServerSelected;
|
|
if IsServerSelected and Assigned(SelectedServer) then
|
|
mnuDebugLog.Enabled := not SelectedServer.Configuration.GeneralInfo^.giReadOnly
|
|
else
|
|
mnuDebugLog.Enabled := False;
|
|
mnuResetCounters.Enabled := IsServerSelected;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.SetServerName;
|
|
begin
|
|
if assigned(FFEngineManager) and assigned(lvServers.Selected)then {!!.02}
|
|
with TffServerEngine(lvServers.Selected.Data) do
|
|
Configuration.GeneralInfo^.giServerName := ServerName;
|
|
if (ServerName <> '') then begin
|
|
Caption := 'TurboPower FlashFiler [' + ServerName + ']';
|
|
Application.Title := Caption;
|
|
if (State = ssDown) then begin
|
|
mnuServerUp.Enabled := true;
|
|
btnStart.Enabled := true;
|
|
end;
|
|
{$IFDEF UseTrayIcon}
|
|
tiInitNotifyData;
|
|
{$ENDIF}
|
|
end else begin
|
|
Caption := 'FlashFiler Server';
|
|
mnuServerUp.Enabled := false;
|
|
btnStart.Enabled := false;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.SetServerPriority(aPriority : longint);
|
|
const
|
|
ThreadPriority : array [0..4] of integer =
|
|
(THREAD_PRIORITY_LOWEST,
|
|
THREAD_PRIORITY_BELOW_NORMAL,
|
|
THREAD_PRIORITY_NORMAL,
|
|
THREAD_PRIORITY_ABOVE_NORMAL,
|
|
THREAD_PRIORITY_HIGHEST);
|
|
begin
|
|
if (aPriority < -2) or (aPriority > 2) then
|
|
aPriority := 2
|
|
else
|
|
inc(aPriority, 2);
|
|
SetThreadPriority(GetCurrentThread, ThreadPriority[aPriority]);
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.UpdateServers;
|
|
var
|
|
i : Integer;
|
|
begin
|
|
for i := 0 to Pred(lvServers.Items.Count) do begin
|
|
with lvServers.Items[i], TffServerEngine(lvServers.Items[i].Data) do begin
|
|
SubItems[0] := FFMapStateToString(State);
|
|
SubItems[1] := FFCommaizeChL(ClientList.ClientCount, ThousandSeparator);
|
|
SubItems[2] := FFCommaizeChL(SessionList.SessionCount, ThousandSeparator);
|
|
SubItems[3] := FFCommaizeChL(DatabaseList.DatabaseCount, ThousandSeparator);
|
|
SubItems[4] := FFCommaizeChL(TableList.TableCount, ThousandSeparator);
|
|
SubItems[5] := FFCommaizeChL(CursorList.CursorCount, ThousandSeparator);
|
|
SubItems[6] := FFCommaizeChL(BufferManager.RAMUsed, ThousandSeparator);
|
|
end;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.UpdateTransports;
|
|
var
|
|
i : Integer;
|
|
begin
|
|
for i := 0 to pred(lvTransports.Items.Count) do begin
|
|
with lvTransports.Items[i],
|
|
TffBaseTransport(lvTransports.Items[i].Data) do begin
|
|
SubItems[0] := ServerName;
|
|
SubItems[1] := FFMapStateToString(State);
|
|
SubItems[2] := FFCommaizeChL(ConnectionCount, ThousandSeparator);
|
|
SubItems[3] := FFCommaizeChL(MsgCount, ThousandSeparator);
|
|
SubItems[4] := GetMsgsPerSecAsString(MsgCount);
|
|
end;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.UpServer;
|
|
var
|
|
SaveCursor : TCursor;
|
|
begin
|
|
SaveCursor := Cursor;
|
|
Cursor := crHourglass;
|
|
try
|
|
{ Create & set up the transports. }
|
|
with FFEngineManager.ServerEngine.Configuration.GeneralInfo^ do begin
|
|
|
|
FFEngineManager.SUPTransport.Enabled := giSingleUser;
|
|
if giSingleUser then begin
|
|
FFEngineManager.SUPTransport.BeginUpdate;
|
|
try
|
|
FFEngineManager.SUPTransport.ServerName := giServerName;
|
|
FFEngineManager.SUPTransport.Mode := fftmListen;
|
|
FFEngineManager.SUPTransport.EndUpdate;
|
|
except
|
|
FFEngineManager.SUPTransport.CancelUpdate;
|
|
end;
|
|
end;
|
|
|
|
FFEngineManager.IPXSPXTransport.Enabled := giIPXSPX;
|
|
if giIPXSPX then begin
|
|
FFEngineManager.IPXSPXTransport.BeginUpdate;
|
|
try
|
|
FFEngineManager.IPXSPXTransport.ServerName := giServerName;
|
|
FFEngineManager.IPXSPXTransport.RespondToBroadcasts := giIPXSPXLFB;
|
|
FFEngineManager.IPXSPXTransport.Mode := fftmListen;
|
|
FFEngineManager.IPXSPXTransport.EndUpdate;
|
|
except
|
|
FFEngineManager.IPXSPXTransport.CancelUpdate;
|
|
end;
|
|
end;
|
|
|
|
FFEngineManager.TCPIPTransport.Enabled := giTCPIP;
|
|
if giTCPIP then begin
|
|
FFEngineManager.TCPIPTransport.BeginUpdate;
|
|
try
|
|
FFEngineManager.TCPIPTransport.ServerName := giServerName;
|
|
FFEngineManager.TCPIPTransport.RespondToBroadcasts := giTCPIPLFB;
|
|
FFEngineManager.TCPIPTransport.Mode := fftmListen;
|
|
FFEngineManager.TCPIPTransport.EndUpdate;
|
|
ffc_TCPInterface := giTCPInterface; {!!.01 Added}
|
|
except
|
|
FFEngineManager.TCPIPTransport.CancelUpdate;
|
|
end;
|
|
end;
|
|
pumDownServer.Enabled := True; {!!.01 Added}
|
|
end;
|
|
{ Start the engine manager. }
|
|
FFEngineManager.StartUp;
|
|
finally
|
|
Cursor := SaveCursor;
|
|
end;
|
|
end;
|
|
{====================================================================}
|
|
|
|
{===Transport logging================================================}
|
|
procedure TfrmFFServer.lvTransportsMouseDown(Sender: TObject;
|
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
var
|
|
anItem : TListItem;
|
|
aTransport : TffBaseTransport;
|
|
MousePos : TPoint;
|
|
begin
|
|
if Button <> mbRight then exit;
|
|
|
|
{ Find the transport under the mouse. }
|
|
anItem := lvTransports.GetItemAt(X, Y);
|
|
if assigned(anItem) then begin
|
|
aTransport := TffBaseTransport(anItem.Data);
|
|
|
|
{ Attach the transport to the popup menu so that the popup menu handlers
|
|
may quickly access the transport. }
|
|
lvTransports.Selected := anItem;
|
|
pmuTrans.Tag := longInt(aTransport);
|
|
|
|
{ Update the menu options to reflect the transport. }
|
|
pmuTransLogErr.Checked := fftpLogErrors in aTransport.EventLogOptions;
|
|
pmuTransLogReq.Checked := fftpLogRequests in aTransport.EventLogOptions;
|
|
pmuTransLogRep.Checked := fftpLogReplies in aTransport.EventLogOptions;
|
|
pmuTransLogAll.Checked := (pmuTranslogErr.Checked and
|
|
pmuTransLogReq.Checked and
|
|
pmuTransLogRep.Checked);
|
|
|
|
MousePos := lvTransports.ClientToScreen(Point(X, Y));
|
|
pmuTrans.Popup(MousePos.X, MousePos.Y);
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.pmuTransLogAllClick(Sender: TObject);
|
|
var
|
|
aTransport : TffBaseTransport;
|
|
begin
|
|
{ Enable/Disable logging of all options on the selected transport. }
|
|
pmuTransLogAll.Checked := not pmuTransLogAll.Checked;
|
|
pmuTransLogErr.Checked := pmuTransLogAll.Checked;
|
|
pmuTransLogReq.Checked := pmuTransLogAll.Checked;
|
|
pmuTransLogRep.Checked := pmuTransLogAll.Checked;
|
|
|
|
{ Get the transport of interest. }
|
|
aTransport := TffBaseTransport(pmuTrans.Tag);
|
|
|
|
{ Update the transport as required. }
|
|
if pmuTransLogAll.Checked then begin
|
|
aTransport.EventLogOptions := [fftpLogErrors, fftpLogRequests, fftpLogReplies];
|
|
aTransport.EventLogEnabled := True;
|
|
end
|
|
else begin
|
|
aTransport.EventLogOptions := [];
|
|
aTransport.EventLogEnabled := False;
|
|
end;
|
|
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.pmuTransLogErrClick(Sender: TObject);
|
|
var
|
|
aTransport : TffBaseTransport;
|
|
aSet : TffTransportLogOptions;
|
|
begin
|
|
pmuTransLogErr.Checked := not pmuTransLogErr.Checked;
|
|
if not pmuTransLogErr.Checked then
|
|
pmuTransLogAll.Checked := False;
|
|
|
|
{ Get the transport of interest. }
|
|
aTransport := TffBaseTransport(pmuTrans.Tag);
|
|
|
|
aSet := aTransport.EventLogOptions;
|
|
if pmuTransLogErr.Checked then begin
|
|
Include(aSet, fftpLogErrors);
|
|
aTransport.EventLogEnabled := True;
|
|
end else
|
|
Exclude(aSet, fftpLogErrors);
|
|
aTransport.EventLogOptions := aSet;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.pmuTransLogReqClick(Sender: TObject);
|
|
var
|
|
aTransport : TffBaseTransport;
|
|
aSet : TffTransportLogOptions;
|
|
begin
|
|
|
|
pmuTransLogReq.Checked := not pmuTransLogReq.Checked;
|
|
if not pmuTransLogReq.Checked then
|
|
pmuTransLogAll.Checked := False;
|
|
|
|
{ Get the transport of interest. }
|
|
aTransport := TffBaseTransport(pmuTrans.Tag);
|
|
|
|
aSet := aTransport.EventLogOptions;
|
|
if pmuTransLogReq.Checked then begin
|
|
Include(aSet, fftpLogRequests);
|
|
aTransport.EventLogEnabled := True;
|
|
end else
|
|
Exclude(aSet, fftpLogRequests);
|
|
aTransport.EventLogOptions := aSet;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.pmuTransLogRepClick(Sender: TObject);
|
|
var
|
|
aTransport : TffBaseTransport;
|
|
aSet : TffTransportLogOptions;
|
|
begin
|
|
|
|
pmuTransLogRep.Checked := not pmuTransLogRep.Checked;
|
|
if not pmuTransLogRep.Checked then
|
|
pmuTransLogAll.Checked := False;
|
|
|
|
{ Get the transport of interest. }
|
|
aTransport := TffBaseTransport(pmuTrans.Tag);
|
|
|
|
aSet := aTransport.EventLogOptions;
|
|
if pmuTransLogRep.Checked then begin
|
|
Include(aSet, fftpLogReplies);
|
|
aTransport.EventLogEnabled := True;
|
|
end else
|
|
Exclude(aSet, fftpLogReplies);
|
|
aTransport.EventLogOptions := aSet; {!!.03}
|
|
|
|
end;
|
|
{====================================================================}
|
|
|
|
{===Tray Icon stuff==================================================}
|
|
{$IFDEF UseTrayIcon}
|
|
procedure TfrmFFServer.tiAdd;
|
|
begin
|
|
if tiPresent and (not tiActive) then begin
|
|
tiInitNotifyData;
|
|
tiActive := Shell_NotifyIcon(NIM_ADD, @tiNotifyData);
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.tiCallBack(var Msg : TMessage);
|
|
var
|
|
P : TPoint;
|
|
begin
|
|
if (State = ssUpMinimized) then begin
|
|
with Msg do begin
|
|
case lParam of
|
|
WM_RBUTTONDOWN :
|
|
begin
|
|
GetCursorPos(P);
|
|
SetForegroundWindow(Application.Handle);
|
|
Application.ProcessMessages;
|
|
PopupMenu.Popup(P.X, P.Y);
|
|
end;
|
|
WM_LBUTTONDBLCLK :
|
|
Application.Restore;
|
|
end;{case}
|
|
end;
|
|
end else begin
|
|
case Msg.lParam of
|
|
WM_LBUTTONDOWN :
|
|
SetForegroundWindow(Handle);
|
|
WM_RBUTTONDOWN :
|
|
begin
|
|
SetForegroundWindow(Handle);
|
|
GetCursorPos(P);
|
|
Application.ProcessMessages;
|
|
PopupMenu.Popup(P.X, P.Y);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.tiDelete;
|
|
begin
|
|
if tiPresent and tiActive then begin
|
|
tiActive := not Shell_NotifyIcon(NIM_DELETE, @tiNotifyData);
|
|
end;
|
|
end;
|
|
{--------}
|
|
function TfrmFFServer.tiGetIconHandle : hIcon;
|
|
begin
|
|
Result := Application.Icon.Handle;
|
|
if Result = 0 then
|
|
Result := LoadIcon(0, IDI_Application);
|
|
end;
|
|
{--------}
|
|
procedure TfrmFFServer.tiInitNotifyData;
|
|
var
|
|
Tip : string;
|
|
begin
|
|
if tiPresent then begin
|
|
FillChar(tiNotifyData, sizeof(tiNotifyData), 0);
|
|
with tiNotifyData do begin
|
|
cbSize := sizeof(tiNotifyData);
|
|
Wnd := Handle;
|
|
uID := 1;
|
|
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
|
|
Tip := 'TurboPower FlashFiler [' + ServerName + ']';
|
|
StrCopy(szTip, @Tip[1]);
|
|
uCallBackMessage := ffc_tiCallBack;
|
|
hIcon := tiGetIconHandle;
|
|
Shell_NotifyIcon(NIM_MODIFY, @tiNotifyData)
|
|
end;
|
|
end;
|
|
end;
|
|
{$ENDIF}
|
|
{====================================================================}
|
|
|
|
procedure TfrmFFServer.btnStartClick(Sender: TObject);
|
|
begin
|
|
CreateEngineMgr;
|
|
if not Login then
|
|
Exit;
|
|
BringServerUp;
|
|
SetControls;
|
|
end;
|
|
|
|
procedure TfrmFFServer.btnStopClick(Sender: TObject);
|
|
begin
|
|
if not Login then
|
|
Exit;
|
|
BringServerDown;
|
|
// FreeEngineMgr; {!!.06}{Deleted !!.13}
|
|
SetControls;
|
|
end;
|
|
|
|
procedure TfrmFFServer.btnPropsClick(Sender : TObject);
|
|
begin
|
|
mnuConfigGeneralClick(Sender);
|
|
end;
|
|
|
|
procedure TfrmFFServer.FormResize(Sender: TObject); {begin !!.06}
|
|
begin
|
|
if Width < 605 then
|
|
Width := 605;
|
|
if Height < 300 then
|
|
Height := 300;
|
|
end; {end !!.06}
|
|
|
|
procedure TfrmFFServer.HelpTopics1Click(Sender: TObject);
|
|
begin
|
|
Application.HelpCommand(HELP_FINDER, 0);
|
|
end;
|
|
|
|
end.
|
|
|