Publish (Instance)

De Wiki1000
Révision datée du 14 mars 2013 à 16:02 par Syfre (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

versionlatest-32x32.png

procedure Publish(const iTopic:string; const iParam:variant);

Cette procédure permet d'envoyer un message aux abonnés d'un sujet.

iTopic Sujet du message.
iParam Paramètre du message.


Exemple :

Utilisation basique :

procedure MyObject.Handler(const iTopic:string; const iEvent:Variant);
begin
  unEntier := unEntier+1;
end;

function MyObject.doPublishSubscribe(const sTopic:string; const pTopic:string):boolean;
begin
  unEntier := 0;
  Subscribe(sTopic,''Handler'');
  try
    // if pTopic match sTopic the Handler method will be called.
    // This message has no parameter, we can pass anything in the parameter 
    Publish(pTopic,0);
    Result := unEntier=1;
  finally
  UnSubscribe(sTopic);
  end;
end;

Utilisation d'un paramètre objet :

procedure Handler(const iTopic:string; const iEvent:variant);
var obj:TitObject;
begin
  obj := iEvent;
  if (obj is ClassNPA) then
   unEntier := (obj as ClassNPA).unEntier;
end;

function doPublishSubscribe(const sTopic:string; const pTopic:string):boolean;
var event:ClassNPA;
begin
  unEntier := 0;
  event := ClassNPA.Create;
  event.unEntier := 1;
  Subscribe(sTopic,''Handler'');
  try
    Publish(pTopic,event);
    Result := unEntier=1;
  finally
  UnSubscribe(sTopic);
  end;
end;

Souscription dans une règle d'initialisation :

unit TestSYFREWF;
interface

Type
  PublishSubscribe = Class(TitObject)
  private
    procedure Action_Initialize:boolean;
  public
    Procedure doPublish;
    Procedure Handler(const iTopic:string; const iEvent:variant);
  end;

Implementation

{PublishSubscribe}

procedure PublishSubscribe.Action_Initialize:boolean;
//procedure Action_Initialize:boolean;
begin
  // We subscribe in an initialization rule.
  SubScribe('/MyTopic/*','Handler');
end;

Procedure PublishSubscribe.Handler(const iTopic:string; const iEvent:variant);
//Procedure Handler(const iTopic:string; const iEvent:variant);
var url:string;
begin
  // This handler is a router which republish a message to the UI

  // Build a first message with the current datetime.
  // The value is passed inside the topic which is formatted as an URL.
  url := 'forms://testpublishsubscribe/controls/memo';
  urlConcatParameter(url,'text', FormatDatetime('c',now));
  Publish(url,0);
  
  // Republish the message
  // The value is passed in the parameter
  Publish('forms://testpublishsubscribe/controls/memo/text',iEvent);
end;

Procedure PublishSubscribe.doPublish;
//Procedure doPublish;
begin
  // Test case
  // Publish a message to my topic so that the handler will republish it 
  Publish('/MyTopic/subject', 'some text');
end;

Voir aussi :

Objets métiers (tech)Développement DSM