Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 06:26, 22 April 2008.

CS000908 - Publish and Subscribe: Using RProperty for publishing

From Forum Nokia Wiki


ID CS000908 Creation date April 22, 2008
Platform S60 3rd Edition, FP1 Tested on devices Nokia N93
Category Symbian C++ Subcategory Files/Data


Keywords (APIs, classes, methods, functions): RProperty, RProperty::Define(), RProperty::Delete(), RProperty::Attach(), RProperty::Set(), RProperty::Close()

Overview

This code snippet shows how the class RProperty can be used to publish user-defined properties with Symbian's IPC Publish and Subscribe mechanism.

A property is published using the RProperty::Set() function. This means that the value of the property is updated. Whenever a property is published, all outstanding subscriptions are completed.

The code snippet CS000909 - Publish and Subscribe: Using RProperty for subscribing shows how to subscribe these user-defined properties. The property definitions are shared between a publisher and a subscriber through the common header file ExampleProperties.h.

#ifndef EXAMPLEPROPERTIES_H_
#define EXAMPLEPROPERTIES_H_
 
const TInt KMaxStrLen = 10;
const TUid KExampleProperty = {0xED1917A8};
enum TExamplePropertyKeys  { EIntProperty, EStrProperty };
 
#endif /*EXAMPLEPROPERTIES_H_*/

This snippet can be self-signed.

MMP file

The following libraries are required:

LIBRARY  euser.lib

Preconditions

The publisher or the subscriber thread can be the one to define properties by calling RProperty::Define(). The user-defined properties persist in the kernel until the operating system reboots or the properties are deleted.

TInt ret=RProperty::Define(KExampleProperty,EIntProperty,RProperty::EInt);
if (ret != KErrAlreadyExists)
  {      
  User::LeaveIfError(ret);
  }
 
ret= RProperty::Define(KExampleProperty,EStrProperty,RProperty::EByteArray,KMaxStrLen);
if (ret != KErrAlreadyExists)
  {     
  User::LeaveIfError(ret);
  }


Source file

#include <e32base.h>
#include <e32property.h>
 
#include "exampleproperties.h"
 
LOCAL_C void SetExamplePropertiesL()
  {
  TInt err(KErrNone);
  
  // Use handle to publish EIntProperty
  RProperty intProperty;
  err = intProperty.Attach(KExampleProperty, EIntProperty, EOwnerThread);
  User::LeaveIfError(err);
  err = intProperty.Set(123);
  User::LeaveIfError(err);
  intProperty.Close();
  
  // Use category and key to publish EStrProperty
  err=RProperty::Set(KExampleProperty,EStrProperty,_L("321"));
  User::LeaveIfError(err);
  }
 
//  Global Functions
GLDEF_C TInt E32Main()
  {
  // Create cleanup stack
  __UHEAP_MARK;
  CTrapCleanup* cleanup = CTrapCleanup::New();
 
  // Run application code inside TRAP harness
  TRAPD(mainError, SetExamplePropertiesL());
  if (mainError)
    {
    //SetExamplePropertiesL leaves...
    }
  else
    {
    //Properties updated ok
    }
  delete cleanup;
  __UHEAP_MARKEND;
  return KErrNone;
  }

Postconditions

Two example properties are published using the class RProperty.

If the publisher thread has defined the properties, it is also capable of deleting properties by using RProperty::Delete() as follows:

TInt err(KErrNone);
 
err = RProperty::Delete(KExampleProperty,EIntProperty);
if (err != KErrNotFound)
  {
  User::LeaveIfError(err);
  }
err = RProperty::Delete(KExampleProperty,EStrProperty);
if (err != KErrNotFound)
  {
  User::LeaveIfError(err);
  }

When properties are deleted, any outstanding subscriptions will be completed with KErrNotFound.

See also

CS000909 - Publish and Subscribe: Using RProperty for subscribing

Related Discussions
Thread Thread Starter Forum Replies Last Post
Retrieving the MAC address patrickfrei Symbian Networking & Messaging 12 2007-07-31 17:37
Nokia 3230 dangerden General Discussion 13 2006-03-18 08:54
How to kill exe running on the background xersmith General Symbian C++ 6 2007-02-17 12:24
subscribing to boards? spiralist General Messaging 1 2002-12-09 10:47
Friendly text-editor chetbox Python 100 2008-04-12 04:28
 
Powered by MediaWiki