examples/Base/IPC/ClientServer/Gettingstarted/transient/src/server.h

00001 /*
00002 Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
00003 
00004 Redistribution and use in source and binary forms, with or without
00005 modification, are permitted provided that the following conditions are met:
00006 
00007 * Redistributions of source code must retain the above copyright notice, this
00008   list of conditions and the following disclaimer.
00009 * Redistributions in binary form must reproduce the above copyright notice,
00010   this list of conditions and the following disclaimer in the documentation
00011   and/or other materials provided with the distribution.
00012 * Neither the name of Nokia Corporation nor the names of its contributors
00013   may be used to endorse or promote products derived from this software
00014   without specific prior written permission.
00015 
00016 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00017 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00018 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00019 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
00020 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00021 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00022 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00023 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00024 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00025 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026 
00027 Description: Transient server example - server classes  
00028 */
00029 
00030 
00031 #include <e32base.h>
00032 #include "clientserver.h"
00033 
00034 enum TMyPanic
00035         {
00036         EPanicBadDescriptor,
00037         EPanicIllegalFunction,
00038         EPanicAlreadyReceiving
00039         };
00040 
00041 void PanicClient(const RMessagePtr2& aMessage,TMyPanic TMyPanic);
00042 
00043 class CShutdown : public CTimer
00044         {
00045         enum {KMyShutdownDelay=0x200000};       // approx 2s
00046 public:
00047         inline CShutdown();
00048         inline void ConstructL();
00049         inline void Start();
00050 private:
00051         void RunL();
00052         };
00053 
00054 class CMyServer : public CServer2
00055         {
00056 public:
00057         static CServer2* NewLC();
00058         void AddSession();
00059         void DropSession();
00060         void Send(const TDesC& aMessage);
00061 private:
00062         CMyServer();
00063         void ConstructL();
00064         CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
00065 private:
00066         TInt iSessionCount;
00067         CShutdown iShutdown;
00068         };
00069 
00070 class CMySession : public CSession2
00071         {
00072 public:
00073         CMySession();
00074         void CreateL();
00075         void Send(const TDesC& aMessage);
00076 private:
00077         ~CMySession();
00078         inline CMyServer& Server();
00079         void ServiceL(const RMessage2& aMessage);
00080         void ServiceError(const RMessage2& aMessage,TInt aError);
00081         inline TBool ReceivePending() const;
00082 private:
00083         RMessagePtr2 iReceiveMsg;
00084         TInt iReceiveLen;
00085         };
00086 

Generated by  doxygen 1.6.2