| 1 | { **************************************************************
 | 
|---|
| 2 |         Package: XWB - Kernel RPCBroker
 | 
|---|
| 3 |         Date Created: Sept 18, 1997 (Version 1.1)
 | 
|---|
| 4 |         Site Name: Oakland, OI Field Office, Dept of Veteran Affairs
 | 
|---|
| 5 |         Developers: Danila Manapsal, Raul Mendoza, Joel Ivey
 | 
|---|
| 6 |         Description: Server selection dialog.
 | 
|---|
| 7 |         Current Release: Version 1.1 Patch 40 (January 7, 2005))
 | 
|---|
| 8 | *************************************************************** }
 | 
|---|
| 9 | 
 | 
|---|
| 10 | {**************************************************
 | 
|---|
| 11 |  p13 - added an OnDestroy event to release the
 | 
|---|
| 12 |         help file.  - REM (4/25/00)
 | 
|---|
| 13 | **************************************************}
 | 
|---|
| 14 | unit Rpcconf1;
 | 
|---|
| 15 | 
 | 
|---|
| 16 | interface
 | 
|---|
| 17 | 
 | 
|---|
| 18 | uses
 | 
|---|
| 19 |   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
 | 
|---|
| 20 |   Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Xwbut1,
 | 
|---|
| 21 |   WinSock, rpcnet, MFunStr;
 | 
|---|
| 22 | 
 | 
|---|
| 23 | type
 | 
|---|
| 24 |   TrpcConfig = class(TForm)
 | 
|---|
| 25 |     cboServer: TComboBox;
 | 
|---|
| 26 |     Panel2: TPanel;
 | 
|---|
| 27 |     Panel3: TPanel;
 | 
|---|
| 28 |     pnlPort: TPanel;
 | 
|---|
| 29 |     btnOk: TBitBtn;
 | 
|---|
| 30 |     btnCancel: TBitBtn;
 | 
|---|
| 31 |     Panel1: TPanel;
 | 
|---|
| 32 |     Panel4: TPanel;
 | 
|---|
| 33 |     btnHelp: TBitBtn;
 | 
|---|
| 34 |     New: TButton;
 | 
|---|
| 35 |     procedure cboServerClick(Sender: TObject);
 | 
|---|
| 36 |     procedure FormClose(Sender: TObject; var Action: TCloseAction);
 | 
|---|
| 37 |     procedure FormCreate(Sender: TObject);
 | 
|---|
| 38 |     procedure butOkClick(Sender: TObject);
 | 
|---|
| 39 |     procedure butCancelClick(Sender: TObject);
 | 
|---|
| 40 |     procedure FormDestroy(Sender: TObject);
 | 
|---|
| 41 |     procedure cboServerExit(Sender: TObject);
 | 
|---|
| 42 |     procedure NewClick(Sender: TObject);
 | 
|---|
| 43 | 
 | 
|---|
| 44 |   private
 | 
|---|
| 45 |     { Private declarations }
 | 
|---|
| 46 |     OrigHelp : String;   //Help filename of calling application.
 | 
|---|
| 47 | 
 | 
|---|
| 48 |   public
 | 
|---|
| 49 |     { Public declarations }
 | 
|---|
| 50 |     ServerPairs : TStringList;
 | 
|---|
| 51 |   end;
 | 
|---|
| 52 | 
 | 
|---|
| 53 | function GetServerInfo(var Server,Port: string): integer;
 | 
|---|
| 54 | function GetServerIP(ServerName: String): String;
 | 
|---|
| 55 | 
 | 
|---|
| 56 | var
 | 
|---|
| 57 |   rpcConfig: TrpcConfig;
 | 
|---|
| 58 |   ButtonStatus, Instance: integer;
 | 
|---|
| 59 |   rServer, rPort: string;
 | 
|---|
| 60 |   TaskInstance: integer;
 | 
|---|
| 61 | 
 | 
|---|
| 62 | implementation
 | 
|---|
| 63 | 
 | 
|---|
| 64 | uses AddServer;
 | 
|---|
| 65 | 
 | 
|---|
| 66 | {$R *.DFM}
 | 
|---|
| 67 | 
 | 
|---|
| 68 | 
 | 
|---|
| 69 | function IsIPAddress(Val: String): Boolean;
 | 
|---|
| 70 | var
 | 
|---|
| 71 |   I: Integer;
 | 
|---|
| 72 |   C: Char;
 | 
|---|
| 73 | begin
 | 
|---|
| 74 |   Result := True;
 | 
|---|
| 75 |   for I := 1 to Length(Val) do    // Iterate
 | 
|---|
| 76 |   begin
 | 
|---|
| 77 |     C := Val[I];
 | 
|---|
| 78 |     if not (C in ['0','1','2','3','4','5','6','7','8','9','.']) then
 | 
|---|
| 79 |     begin
 | 
|---|
| 80 |       Result := False;
 | 
|---|
| 81 |       Break;
 | 
|---|
| 82 |     end;
 | 
|---|
| 83 |   end;    // for
 | 
|---|
| 84 | end;
 | 
|---|
| 85 | 
 | 
|---|
| 86 | {: Library function to obtain an IP address, given a server name }
 | 
|---|
| 87 | function GetServerIP(ServerName: String): String;
 | 
|---|
| 88 | var
 | 
|---|
| 89 |    host,outcome: PChar;
 | 
|---|
| 90 | begin
 | 
|---|
| 91 |   TaskInstance := LibOpen;
 | 
|---|
| 92 |   if not IsIPAddress(ServerName) then
 | 
|---|
| 93 |   begin
 | 
|---|
| 94 |     outcome := StrAlloc(256);
 | 
|---|
| 95 |     host := StrAlloc(length(ServerName) + 1);
 | 
|---|
| 96 |     StrPCopy(host, ServerName);
 | 
|---|
| 97 |     LibGetHostIP1(TaskInstance, host, outcome);
 | 
|---|
| 98 |     Result := StrPas(outcome);
 | 
|---|
| 99 |     StrDispose(outcome);
 | 
|---|
| 100 |     StrDispose(host);
 | 
|---|
| 101 |   end
 | 
|---|
| 102 |   else
 | 
|---|
| 103 |     Result := ServerName;
 | 
|---|
| 104 |   LibClose(TaskInstance);
 | 
|---|
| 105 | end;
 | 
|---|
| 106 | 
 | 
|---|
| 107 | 
 | 
|---|
| 108 | procedure TrpcConfig.cboServerClick(Sender: TObject);
 | 
|---|
| 109 | var
 | 
|---|
| 110 |    index: integer;
 | 
|---|
| 111 | begin
 | 
|---|
| 112 |      {Based on selction, set port and server variable}
 | 
|---|
| 113 |      index := cboServer.ItemIndex;
 | 
|---|
| 114 |      rPort := Piece(ServerPairs[index], ',', 2);
 | 
|---|
| 115 |      pnlPort.Caption := rPort;
 | 
|---|
| 116 |      rServer := Piece(ServerPairs[index], ',', 1);
 | 
|---|
| 117 |      btnOk.Enabled := True;
 | 
|---|
| 118 | 
 | 
|---|
| 119 |      {Based on Server, get IP addresss.}
 | 
|---|
| 120 |      Panel4.Caption := GetServerIP(rServer);
 | 
|---|
| 121 | end;
 | 
|---|
| 122 | 
 | 
|---|
| 123 | procedure TrpcConfig.FormCreate(Sender: TObject);
 | 
|---|
| 124 | begin
 | 
|---|
| 125 |   FormStyle := fsStayOnTop;
 | 
|---|
| 126 |   OrigHelp := Application.HelpFile;             // Save original helpfile.
 | 
|---|
| 127 |   Application.HelpFile := ReadRegData(HKLM, REG_BROKER, 'BrokerDr') +
 | 
|---|
| 128 |                            '\clagent.hlp';      // Identify ConnectTo helpfile.
 | 
|---|
| 129 |   ServerPairs := TStringList.Create;
 | 
|---|
| 130 | end;
 | 
|---|
| 131 | 
 | 
|---|
| 132 | procedure TrpcConfig.FormClose(Sender: TObject; var Action: TCloseAction);
 | 
|---|
| 133 | begin
 | 
|---|
| 134 |      cboServer.Clear;
 | 
|---|
| 135 |      pnlPort.Caption := '';
 | 
|---|
| 136 |      ServerPairs.Free;
 | 
|---|
| 137 |      Application.HelpFile := OrigHelp;  // Restore helpfile.
 | 
|---|
| 138 | end;
 | 
|---|
| 139 | 
 | 
|---|
| 140 | function GetServerInfo(var Server,Port: string): integer;
 | 
|---|
| 141 | var
 | 
|---|
| 142 |    index: integer;
 | 
|---|
| 143 |    //tmp,fname,: string;  {P14}
 | 
|---|
| 144 |    tmpServerPairs : TStringList;      //Format: SERVER,port#
 | 
|---|
| 145 |    TextStr: String;
 | 
|---|
| 146 | 
 | 
|---|
| 147 | begin
 | 
|---|
| 148 |      rpcconfig := Trpcconfig.Create(Application);
 | 
|---|
| 149 |      TaskInstance := LibOpen;
 | 
|---|
| 150 | 
 | 
|---|
| 151 |      with rpcConfig do
 | 
|---|
| 152 |      begin
 | 
|---|
| 153 |        tmpServerPairs := TStringList.Create;
 | 
|---|
| 154 |        ReadRegValueNames(HKLM, REG_SERVERS, tmpServerPairs);
 | 
|---|
| 155 |        ServerPairs.Assign(tmpServerPairs);
 | 
|---|
| 156 |        tmpServerPairs.Clear;
 | 
|---|
| 157 |        ReadRegValueNames(HKCU, REG_SERVERS, tmpServerPairs);
 | 
|---|
| 158 |        for index := 0 to (tmpServerPairs.Count-1) do
 | 
|---|
| 159 |        begin
 | 
|---|
| 160 |          TextStr := tmpServerPairs[index];
 | 
|---|
| 161 |          if ServerPairs.IndexOf(TextStr) < 0 then
 | 
|---|
| 162 |            ServerPairs.Add(TextStr);
 | 
|---|
| 163 |        end;
 | 
|---|
| 164 | 
 | 
|---|
| 165 |        ButtonStatus := mrOk;
 | 
|---|
| 166 | 
 | 
|---|
| 167 |        if ServerPairs.Count < 1 then
 | 
|---|
| 168 |        begin
 | 
|---|
| 169 |          WriteRegData(HKLM, REG_SERVERS, 'BROKERSERVER,9200', '');
 | 
|---|
| 170 |          ServerPairs.Add('BROKERSERVER,9200');
 | 
|---|
| 171 |        end;
 | 
|---|
| 172 | 
 | 
|---|
| 173 | 
 | 
|---|
| 174 |        if ServerPairs.Count > 1 then  // P31                     //need to show form
 | 
|---|
| 175 |        begin
 | 
|---|
| 176 |          //Initialize form.
 | 
|---|
| 177 |          for index := 0 to (ServerPairs.Count -1) do     //Load combobox
 | 
|---|
| 178 |            cboServer.Items.Add(ServerPairs[index]);
 | 
|---|
| 179 | //           cboServer.Items.Add(Piece(ServerPairs[index], ',', 1));
 | 
|---|
| 180 |          cboServer.ItemIndex := 0;
 | 
|---|
| 181 |          rServer := Piece(ServerPairs[0], ',', 1);
 | 
|---|
| 182 |          pnlPort.Caption := Piece(ServerPairs[0], ',', 2);
 | 
|---|
| 183 |          rPort := Piece(ServerPairs[0], ',', 2);
 | 
|---|
| 184 | 
 | 
|---|
| 185 |          //Get and display IP address.
 | 
|---|
| 186 |          panel4.Caption := GetServerIP(rServer);
 | 
|---|
| 187 |          ShowModal;                           //Display form
 | 
|---|
| 188 |        end
 | 
|---|
| 189 |        else                //One choice: form not shown, value returned.
 | 
|---|
| 190 |        begin
 | 
|---|
| 191 |          rServer := Piece(ServerPairs[0], ',', 1);
 | 
|---|
| 192 |          rPort   := Piece(ServerPairs[0], ',', 2);
 | 
|---|
| 193 |      end;
 | 
|---|
| 194 | 
 | 
|---|
| 195 |        if ButtonStatus = mrOk then
 | 
|---|
| 196 |           begin
 | 
|---|
| 197 |             Server := rServer;
 | 
|---|
| 198 |             Port := rPort;
 | 
|---|
| 199 |        end;
 | 
|---|
| 200 |        Result := ButtonStatus;
 | 
|---|
| 201 | 
 | 
|---|
| 202 |        tmpServerPairs.Free;
 | 
|---|
| 203 |        libClose(TaskInstance);
 | 
|---|
| 204 |        Release;
 | 
|---|
| 205 |      end;
 | 
|---|
| 206 | end;
 | 
|---|
| 207 | 
 | 
|---|
| 208 | procedure TrpcConfig.butOkClick(Sender: TObject);
 | 
|---|
| 209 | begin
 | 
|---|
| 210 |      ButtonStatus := mrOk;
 | 
|---|
| 211 |      rServer := Piece(cboServer.Text,',',1);
 | 
|---|
| 212 |      rPort := pnlPort.Caption;
 | 
|---|
| 213 |      rpcConfig.close;
 | 
|---|
| 214 | end;
 | 
|---|
| 215 | 
 | 
|---|
| 216 | procedure TrpcConfig.butCancelClick(Sender: TObject);
 | 
|---|
| 217 | begin
 | 
|---|
| 218 |      ButtonStatus := mrCancel;
 | 
|---|
| 219 |      rServer := cboServer.Text;
 | 
|---|
| 220 |      rPort := pnlPort.Caption;
 | 
|---|
| 221 |      rpcConfig.close;
 | 
|---|
| 222 | end;
 | 
|---|
| 223 | 
 | 
|---|
| 224 | procedure TrpcConfig.FormDestroy(Sender: TObject);
 | 
|---|
| 225 | begin
 | 
|---|
| 226 |         ServerPairs := TStringList.Create; // {p13 - REM}
 | 
|---|
| 227 |         ServerPairs.Free;                  //   Release Help File.
 | 
|---|
| 228 |         Application.HelpFile := OrigHelp;  //
 | 
|---|
| 229 | end;
 | 
|---|
| 230 | 
 | 
|---|
| 231 | procedure TrpcConfig.cboServerExit(Sender: TObject);
 | 
|---|
| 232 | begin
 | 
|---|
| 233 |   //
 | 
|---|
| 234 | end;
 | 
|---|
| 235 | 
 | 
|---|
| 236 | procedure TrpcConfig.NewClick(Sender: TObject);
 | 
|---|
| 237 | var
 | 
|---|
| 238 |   I: Integer;
 | 
|---|
| 239 |   ServerForm: TfrmAddServer;
 | 
|---|
| 240 |   strServer, strName, strPort: String;
 | 
|---|
| 241 | begin
 | 
|---|
| 242 |   ServerForm := TfrmAddServer.Create(Self);
 | 
|---|
| 243 |   if ServerForm.ShowModal <> mrCancel then
 | 
|---|
| 244 |   begin
 | 
|---|
| 245 |     strServer := ServerForm.edtAddress.Text;
 | 
|---|
| 246 |     strPort := ServerForm.edtPortNumber.Text;
 | 
|---|
| 247 |     ServerForm.edtPortNumber.Text := strPort;
 | 
|---|
| 248 |     strName := strServer + ',' + strPort;
 | 
|---|
| 249 |     WriteRegData(HKCU, REG_SERVERS, strName, '');
 | 
|---|
| 250 |     ServerPairs.Add(strName);
 | 
|---|
| 251 |     strName := ServerPairs[ServerPairs.Count-1];
 | 
|---|
| 252 |     cboServer.Items.Add(strName);
 | 
|---|
| 253 |     for I := 0 to cboServer.Items.Count-1 do    // Iterate
 | 
|---|
| 254 |     begin
 | 
|---|
| 255 |       if cboServer.Items[I] = strName then
 | 
|---|
| 256 |         cboServer.ItemIndex := I;
 | 
|---|
| 257 |     end;    // for
 | 
|---|
| 258 | //    cboServer.Text := strServer;
 | 
|---|
| 259 | //    pnlPort.Caption := strPort;
 | 
|---|
| 260 |     cboServerClick(Self);
 | 
|---|
| 261 |   end;
 | 
|---|
| 262 |   ServerForm.Free;
 | 
|---|
| 263 | end;
 | 
|---|
| 264 | 
 | 
|---|
| 265 | end.
 | 
|---|
| 266 | 
 | 
|---|