examples/Base/IPC/pubsub/publishstd.cpp

Go to the documentation of this file.
00001 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
00002 // All rights reserved.
00003 // This component and the accompanying materials are made available
00004 // under the terms of "Eclipse Public License v1.0"
00005 // which accompanies this distribution, and is available
00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
00007 //
00008 // Initial Contributors:
00009 // Nokia Corporation - initial contribution.
00010 //
00011 // Contributors:
00012 //
00013 // Description:
00014 // Demonstrates standard state pattern of publishing a byte-array property
00015 //
00016 
00017 
00018 
00023 #include "publish.h"
00024 
00025 LOCAL_D CConsoleBase* console;
00026 
00032 void PublishL(RProperty& aProperty,TDes16& aBuf)
00033         {
00034         console->Printf(KTxtPublish);
00035 
00036         // Publish the property
00037         // Failure to publish values in standard state publishing pattern is treated as a serious error
00038         User::LeaveIfError(aProperty.Set(aBuf));
00039         console->Printf(KTxtArray);
00040 
00041         // Print the value of the byte-array
00042         TInt bufLength = aBuf.Length();
00043         for(TInt ix = 0; ix < bufLength; ix++)
00044                 {
00045                 console->Printf(KTxtArrayElement,aBuf[ix]);
00046                 }
00047         console->Printf(KTxtNewLine);
00048         }
00049 
00050 void DoExampleL()
00051         {
00052         console->Printf(KTxtStPublish);
00053         console->Printf(KTxtDefine);
00054 
00055         // Define and pre-allocate memory to the byte-array property
00056         RProperty::Define(KMyPropertyCat, KMyPropertyName,RProperty::EByteArray,KAllowAllPolicy,KAllowAllPolicy,KArraySize);
00057         RProperty myProperty;
00058         // Create a handle to the property
00059         User::LeaveIfError(myProperty.Attach(KMyPropertyCat,KMyPropertyName,EOwnerThread));
00060         console->Printf(KTxtCreateHandle);
00061 
00062         // Byte-Array property value to be published
00063         TUint16 array[KArraySize] = {10,20,30,40};
00064 
00065         // Descriptor that the array contents are copied into
00066         TBuf16<KBufSize> buf;
00067 
00068         // Copy array contents into the descriptor
00069         buf.Copy(&array[0],sizeof(array));
00070         buf.SetLength(KArraySize);
00071 
00072         // Publish the property
00073         PublishL(myProperty,buf);
00074 
00075         // Change the array contents
00076         array[0] = 0x00ab;
00077         array[1] = 0x00bc;
00078         array[2] = 0x00cd;
00079         array[3] = 0x00de;
00080         array[4] = 0x00ef;
00081         array[5] = 0x00fa;
00082 
00083         buf.Copy(&array[0],sizeof(array));
00084         // Copy array contents into the descriptor
00085         buf.SetLength(KArraySize);
00086 
00087         // Wait for a key press
00088         console->Printf(KTxtEnter);
00089         while(console->Getch()!= EKeyEnter)
00090                 {
00091                 console->Printf(KTxtEnter);
00092                 }
00093 
00094         // Publish the property
00095         PublishL(myProperty,buf);
00096 
00097         // Indicate the publisher will not publish any more values
00098         // The subscriber stops its subscription to the property when this value is published
00099         buf.Copy(KStop);
00100         console->Printf(KTxtEnter);
00101 
00102         // Wait for a key press
00103         while(console->Getch()!= EKeyEnter)
00104                 {
00105                 console->Printf(KTxtEnter);
00106                 }
00107 
00108         // Publish the property
00109         PublishL(myProperty,buf);
00110 
00111         // Close the handle to the property
00112 
00113         myProperty.Close();
00114 
00115         // Wait for a key press
00116         while(console->Getch()!= EKeyEnter)
00117                 {
00118                 console->Printf(KTxtEnter);
00119                 }
00120 
00121         // The publisher has finished so delete the property
00122         User::LeaveIfError(RProperty::Delete(KMyPropertyCat, KMyPropertyName));
00123         }
00124 
00125 GLDEF_C TInt E32Main()
00126         {
00127         __UHEAP_MARK;
00128         CTrapCleanup* cleanup = CTrapCleanup::New();
00129 
00130         TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(KConsFullScreen,KConsFullScreen)));
00131         if (createError)
00132                 return createError;
00133 
00134         TRAPD(mainError, DoExampleL());
00135         if (mainError)
00136                 console->Printf(KTextFailed, mainError);
00137         console->Printf(KTextPressAnyKey);
00138         console->Getch();
00139 
00140         delete console;
00141         delete cleanup;
00142         __UHEAP_MARKEND;
00143         return KErrNone;
00144         }

Generated by  doxygen 1.6.2