Avatar billede michael-schou Novice
13. februar 2013 - 08:57 Der er 3 kommentarer og
1 løsning

Hvordan laver man et informations system (Broadcast) til sine programmer?

Hej Eksperten.

Jeg har søgt en del på nettet efter dette emne, men har ikke kunne finde nogle brugbare eksempler.

Det jeg har brug for er et informations system / Broadcast system på den smarteste måde, hvor man i de programmer jeg har programmeret kan modtage informationer om nye opdatering eller nedetid på server o.s.v.

Så man på f.eks Form1 kan se at der er en ny besked og når man så trykker for at læse den så åbner den Form2 med et Memo felt hvor man så kan læse beskeden i.

Jeg har tænkt på at ligge en txt fil på en FTP som programmet så connecter til og hiver ind i programmet.

Tænkte også på om man kunne skrive direkte til ens programmer som noget server / client noget.

Men som sagt ved ikke hvad der kunne være den bedste løsning på dette.

Er der nogen der ligger inde med et eksempel ville det være super :-)

Mvh.

Michael.
Avatar billede michael-schou Novice
13. februar 2013 - 14:54 #1
Ved ikke om det er kønt, men har selv bikset et eksempel sammen.
I er meget velkommenede til at komme med input og gode idér. :-)

<-------UNIT1 START------->

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, UrlMon, ComCtrls, Gauges, StdCtrls, ExtCtrls, ShellApi,
  Buttons, jpeg;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure ChkNewz();
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    winsc: TiniFile;
    old: Integer;
    vernfo: TIniFile;
  end;

var
  Form1: TForm1;
  Sti, FileName, OldNewz, NewNewz : String;
  IniFile : TIniFile;

implementation

Uses Unit2;

{$R *.dfm}

//Download funktion
Function DownloadFile(Source, Dest: string): Boolean;
begin
  try
    Result := UrlDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil) = 0;
  except
    Result := False;
  end;
end;

//Tjekker for nye nyheder.
procedure TForm1.ChkNewz();
Var
S : TStringList;
begin
Sti := ExtractFilePath(Application.ExeName);

Form1.Label1.Caption := 'Skaber forbindelse til serveren...';
if DownloadFile('www.MINHOST.dk/Test/NewNewz.ini', PChar(Sti) + '/NewNewz.ini') then
begin
  Form1.Label1.Caption := 'Tjekker for ny version...';
  Form1.vernfo.Free;

  IniFile := TIniFile.Create(Sti + 'OldNewz.ini');
  OldNewz := IntToStr(IniFile.ReadInteger('TJEK', 'OldNewzState', 0)); //Læser Fra Ini Fil.
  IniFile := TIniFile.Create(Sti + 'NewNewz.ini');
  NewNewz := IntToStr(IniFile.ReadInteger('TJEK', 'NewNewzState', 0)); //Læser Fra Ini Fil.

  if (OldNewz = NewNewz) then
  Begin
  Form1.Label1.Caption  := 'Intet Nyt!';
  Form1.Button1.Enabled := False;
  end
  else
  begin
  Form1.Label1.Caption  := 'Der er nyt fra producenten!';
  Form1.Button1.Enabled := True;
  end;
end
else
begin
  Form1.Label1.Caption  := 'Kunne ikke skabe forbindelse til serveren!';
  Form1.Button1.Enabled := False;
end;
end;

//Form1 OnCreate
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.ChkNewz();
end;

//Form1 OnActivate
procedure TForm1.FormActivate(Sender: TObject);
begin
Form1.ChkNewz();
end;

//Læs Information - KNAP
procedure TForm1.Button1Click(Sender: TObject);
begin
Sti := ExtractFilePath(Application.ExeName);
Form1.Label1.Caption := 'Skaber forbindelse til serveren...';

if DownloadFile('www.MINHOST.dk/Test/Newz.txt', PChar(Sti + 'Newz.txt')) then
begin
  Form1.Label1.Caption := 'Nyheder hentes.....';
  IniFile := TIniFile.Create(Sti + 'OldNewz.ini');
  IniFile.WriteInteger('TJEK', 'OldNewzState', StrToInt(NewNewz)); //Skriver til Ini Fil
  Form2.Show;
end
else
begin
  Form1.Label1.Caption  := 'Kunne ikke skabe forbindelse til serveren!';
end;

end;

end.

<-------UNIT1 SLUT------->


<-------UNIT2 START------->
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, UrlMon, ComCtrls, Gauges, StdCtrls, ExtCtrls, ShellApi,
  Buttons, jpeg;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  Sti : String;

implementation

{$R *.dfm}

//Form2 OnActivate
procedure TForm2.FormActivate(Sender: TObject);
begin
Sti := ExtractFilePath(Application.ExeName);
Memo1.Lines.LoadFromFile(Sti + 'Newz.txt');
end;

end.

<-------UNIT2 SLUT------->
Avatar billede michael-schou Novice
18. februar 2013 - 08:54 #2
Ingen andre bud? :-)

Så snupper jeg selv mine points.
Avatar billede hrc Mester
19. februar 2013 - 10:19 #3
FTP-løsningen er lo-tech. Du kan placere en ini-fil sammen med exe-filen og så lade dit program forbinde til FTP-serveren med jævne mellemrum. Det er en simpel sag at lave med Indy. Hvis du vil lave det med SFTP bliver det lidt mere kompliceret, men grundlæggende er det den forkerte løsning.

Det smukkere alternativ involverer en WEB-service (SOAP eller REST) som programmet kalder. Noget i retning af dette (i tekstform): "Hej jeg er version 1.0.0.3" er der noget nyt?" Servicen svarer "Jep, der er en 1.0.0.12 og der er sket følgende i mellemtiden: v. 1.0.0.4: Fejl i login-billede rettet, v. 1.0.0.5: ... Filerne findes her: http:\\hentfilerneher.dk"

Dette kræver en IIS eller en apache

Men FTP-løsningen er da simpel og vil fungere
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester