examples/ForumNokia/BluetoothPMPExample/inc/Listener.h

00001 /*
00002  * Copyright (c) 2009-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:  
00028  */
00029 
00030 #ifndef LISTENER_H
00031 #define LISTENER_H
00032 
00033 // INCLUDES
00034 #include <e32base.h>
00035 
00036 #include <es_sock.h>
00037 #include <btdevice.h>
00038 #include <bt_sock.h>
00039 #include <btmanclient.h>
00040 
00041 #include "Common.h"
00042 
00043 const TInt KReceivedBufferSize = 40;
00044 
00045 class MListenerObserver
00046 {
00047 
00048 public:
00054     virtual void HandleListenerDataReceivedL(const TDesC& aData)=0;
00060     virtual void HandleListenerConnectedL()=0;
00066     virtual void HandleListenerDisconnectedL()=0;
00067 };
00068 
00069 
00070 class CListener : public CActive
00071 {
00072 public:
00073 
00080     static CListener* NewL(MListenerObserver& aObserver,
00081         RSocketServ& aSocketServ);
00082 
00087     static CListener* NewLC(MListenerObserver& aObserver,
00088         RSocketServ& aSocketServ);
00089 
00095     ~CListener();
00096 
00105     void StartListenerL(TInt& aChannel);
00106     
00112     void StopListener();
00113 
00122     void SendData(const TDesC8& aData);
00123 
00131     TBool IsConnected();
00132 
00133 protected:
00134 
00140     void RunL();
00141 
00147     void DoCancel();
00148 
00149     TInt RunError(TInt aError);
00150     
00151 private:
00152 
00161     CListener(MListenerObserver& aObserver, RSocketServ& aSocketServ);
00162 
00167     void ConstructL();
00168 
00174     void ReceiveData();
00175 
00181     void SetSecurityL(TInt /*aChannel*/);
00182 
00191     void HandleListenerDataReceivedL(const TDesC& aData);
00192 
00199     void HandleListenerConnectedL();
00200 
00208     void HandleListenerDisconnectedL();
00209 
00210 
00211 public: // data
00212 
00213     // listening socket
00214     RSocket iListenSock;
00215     // accepted socket
00216     RSocket iSock;
00217     // length of received data
00218     TSockXfrLength iLen;
00219     // buffer holding received data
00220     TBuf8<KReceivedBufferSize> iBuffer;
00221     // observer reference
00222     MListenerObserver& iObserver;
00223     // socket server handle
00224     RSocketServ& iSocketServ;
00225     // listener connection status
00226     TBool iIsConnected;
00227     // the state of the listener
00228     enum TState
00229         {
00230         ENone = 1,
00231         EConnecting,
00232         EWaiting,
00233         ESending
00234         };
00235 
00236     TState iState;
00237 };
00238 
00239 #endif

Generated by  doxygen 1.6.2