{ ************************************************************** Package: XWB - Kernel RPCBroker Date Created: Sept 18, 1997 (Version 1.1) Site Name: Oakland, OI Field Office, Dept of Veteran Affairs Developers: Danila Manapsal, Raul Mendoza, Joel Ivey Description: Server selection dialog. Current Release: Version 1.1 Patch 40 (January 7, 2005)) *************************************************************** } {************************************************** p13 - added an OnDestroy event to release the help file. - REM (4/25/00) **************************************************} unit Rpcconf1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Xwbut1, WinSock, rpcnet, MFunStr; type TrpcConfig = class(TForm) cboServer: TComboBox; Panel2: TPanel; Panel3: TPanel; pnlPort: TPanel; btnOk: TBitBtn; btnCancel: TBitBtn; Panel1: TPanel; Panel4: TPanel; btnHelp: TBitBtn; New: TButton; procedure cboServerClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure butOkClick(Sender: TObject); procedure butCancelClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure cboServerExit(Sender: TObject); procedure NewClick(Sender: TObject); private { Private declarations } OrigHelp : String; //Help filename of calling application. public { Public declarations } ServerPairs : TStringList; end; function GetServerInfo(var Server,Port: string): integer; function GetServerIP(ServerName: String): String; var rpcConfig: TrpcConfig; ButtonStatus, Instance: integer; rServer, rPort: string; TaskInstance: integer; implementation uses AddServer; {$R *.DFM} function IsIPAddress(Val: String): Boolean; var I: Integer; C: Char; begin Result := True; for I := 1 to Length(Val) do // Iterate begin C := Val[I]; if not (C in ['0','1','2','3','4','5','6','7','8','9','.']) then begin Result := False; Break; end; end; // for end; {: Library function to obtain an IP address, given a server name } function GetServerIP(ServerName: String): String; var host,outcome: PChar; begin TaskInstance := LibOpen; if not IsIPAddress(ServerName) then begin outcome := StrAlloc(256); host := StrAlloc(length(ServerName) + 1); StrPCopy(host, ServerName); LibGetHostIP1(TaskInstance, host, outcome); Result := StrPas(outcome); StrDispose(outcome); StrDispose(host); end else Result := ServerName; LibClose(TaskInstance); end; procedure TrpcConfig.cboServerClick(Sender: TObject); var index: integer; begin {Based on selction, set port and server variable} index := cboServer.ItemIndex; rPort := Piece(ServerPairs[index], ',', 2); pnlPort.Caption := rPort; rServer := Piece(ServerPairs[index], ',', 1); btnOk.Enabled := True; {Based on Server, get IP addresss.} Panel4.Caption := GetServerIP(rServer); end; procedure TrpcConfig.FormCreate(Sender: TObject); begin FormStyle := fsStayOnTop; OrigHelp := Application.HelpFile; // Save original helpfile. Application.HelpFile := ReadRegData(HKLM, REG_BROKER, 'BrokerDr') + '\clagent.hlp'; // Identify ConnectTo helpfile. ServerPairs := TStringList.Create; end; procedure TrpcConfig.FormClose(Sender: TObject; var Action: TCloseAction); begin cboServer.Clear; pnlPort.Caption := ''; ServerPairs.Free; Application.HelpFile := OrigHelp; // Restore helpfile. end; function GetServerInfo(var Server,Port: string): integer; var index: integer; //tmp,fname,: string; {P14} tmpServerPairs : TStringList; //Format: SERVER,port# TextStr: String; begin rpcconfig := Trpcconfig.Create(Application); TaskInstance := LibOpen; with rpcConfig do begin tmpServerPairs := TStringList.Create; ReadRegValueNames(HKLM, REG_SERVERS, tmpServerPairs); ServerPairs.Assign(tmpServerPairs); tmpServerPairs.Clear; ReadRegValueNames(HKCU, REG_SERVERS, tmpServerPairs); for index := 0 to (tmpServerPairs.Count-1) do begin TextStr := tmpServerPairs[index]; if ServerPairs.IndexOf(TextStr) < 0 then ServerPairs.Add(TextStr); end; ButtonStatus := mrOk; if ServerPairs.Count < 1 then begin WriteRegData(HKLM, REG_SERVERS, 'BROKERSERVER,9200', ''); ServerPairs.Add('BROKERSERVER,9200'); end; if ServerPairs.Count > 1 then // P31 //need to show form begin //Initialize form. for index := 0 to (ServerPairs.Count -1) do //Load combobox cboServer.Items.Add(ServerPairs[index]); // cboServer.Items.Add(Piece(ServerPairs[index], ',', 1)); cboServer.ItemIndex := 0; rServer := Piece(ServerPairs[0], ',', 1); pnlPort.Caption := Piece(ServerPairs[0], ',', 2); rPort := Piece(ServerPairs[0], ',', 2); //Get and display IP address. panel4.Caption := GetServerIP(rServer); ShowModal; //Display form end else //One choice: form not shown, value returned. begin rServer := Piece(ServerPairs[0], ',', 1); rPort := Piece(ServerPairs[0], ',', 2); end; if ButtonStatus = mrOk then begin Server := rServer; Port := rPort; end; Result := ButtonStatus; tmpServerPairs.Free; libClose(TaskInstance); Release; end; end; procedure TrpcConfig.butOkClick(Sender: TObject); begin ButtonStatus := mrOk; rServer := Piece(cboServer.Text,',',1); rPort := pnlPort.Caption; rpcConfig.close; end; procedure TrpcConfig.butCancelClick(Sender: TObject); begin ButtonStatus := mrCancel; rServer := cboServer.Text; rPort := pnlPort.Caption; rpcConfig.close; end; procedure TrpcConfig.FormDestroy(Sender: TObject); begin ServerPairs := TStringList.Create; // {p13 - REM} ServerPairs.Free; // Release Help File. Application.HelpFile := OrigHelp; // end; procedure TrpcConfig.cboServerExit(Sender: TObject); begin // end; procedure TrpcConfig.NewClick(Sender: TObject); var I: Integer; ServerForm: TfrmAddServer; strServer, strName, strPort: String; begin ServerForm := TfrmAddServer.Create(Self); if ServerForm.ShowModal <> mrCancel then begin strServer := ServerForm.edtAddress.Text; strPort := ServerForm.edtPortNumber.Text; ServerForm.edtPortNumber.Text := strPort; strName := strServer + ',' + strPort; WriteRegData(HKCU, REG_SERVERS, strName, ''); ServerPairs.Add(strName); strName := ServerPairs[ServerPairs.Count-1]; cboServer.Items.Add(strName); for I := 0 to cboServer.Items.Count-1 do // Iterate begin if cboServer.Items[I] = strName then cboServer.ItemIndex := I; end; // for // cboServer.Text := strServer; // pnlPort.Caption := strPort; cboServerClick(Self); end; ServerForm.Free; end; end.