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 |

