diff options
Diffstat (limited to 'gobi-api/fixed-GobiAPI-1.0.40/Core/ProtocolNotification.h')
-rwxr-xr-x | gobi-api/fixed-GobiAPI-1.0.40/Core/ProtocolNotification.h | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/gobi-api/fixed-GobiAPI-1.0.40/Core/ProtocolNotification.h b/gobi-api/fixed-GobiAPI-1.0.40/Core/ProtocolNotification.h new file mode 100755 index 0000000..f44d13e --- /dev/null +++ b/gobi-api/fixed-GobiAPI-1.0.40/Core/ProtocolNotification.h @@ -0,0 +1,237 @@ +/*=========================================================================== +FILE: + ProtocolNotification.h + +DESCRIPTION: + Declaration of cProtocolNotification base class and derivations + +PUBLIC CLASSES AND METHODS: + sProtocolNotificationEvent + Generic protocol event notification structure + + cProtocolNotification + This abstract base class provides notification of protocol server + events sent from the protocol server to protocol server clients + + cProtocolQueueNotification + This class provides notification via a cSyncQueue object + populated with sProtocolNotificationEvent objects + +Copyright (c) 2011, Code Aurora Forum. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Code Aurora Forum nor + the names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +===========================================================================*/ + +//--------------------------------------------------------------------------- +// Pragmas +//--------------------------------------------------------------------------- +#pragma once + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "SyncQueue.h" + +//--------------------------------------------------------------------------- +// Definitions +//--------------------------------------------------------------------------- +enum eProtocolEventType +{ + ePROTOCOL_EVT_BEGIN = -1, + + ePROTOCOL_EVT_REQ_ERR, // There was an error sending the request + ePROTOCOL_EVT_REQ_SENT, // The request has been sent + + ePROTOCOL_EVT_RSP_ERR, // There was an error receiving the response + ePROTOCOL_EVT_RSP_RECV, // The response has been received + + ePROTOCOL_EVT_AUX_TU_SENT, // Auxiliary data transmission unit sent + + ePROTOCOL_EVT_END +}; + +// NOTE: The arguments for each event are currently as follows: +// +// ePROTOCOL_EVT_REQ_ERR +// param1: Request ID +// param2: Error code +// +// ePROTOCOL_EVT_REQ_SENT +// param1: Request ID +// param2: Index of request buffer in associated protocol log + +// ePROTOCOL_EVT_RSP_ERR +// param1: Request ID +// param2: Error code +// +// ePROTOCOL_EVT_RSP_RECV +// param1: Request ID +// param2: Index of response buffer in associated protocol log +// +// ePROTOCOL_EVT_AUX_TU_SENT +// param1: Request ID +// param2: Size of transmission unit + +// NOTE: To handle protoocl events using the Windows notifier add the following +// prototype to your Window class header file: +// +// afx_msg LRESULT OnProtocolEvent( +// WPARAM wParam, +// LPARAM lParam ); +// +// Then add an entry to the message map in your Window class source file: +// +// BEGIN_MESSAGE_MAP( CView, CChildView ) +// ON_MESSAGE( PROTOCOL_WM_BASE + (ULONG)ePROTOCOL_EVT_XXX, OnProtocolEvent ) +// END_MESSAGE_MAP() +// +// Finally write the handler itself: +// +// LRESULT CView::OnProtocolEvent( +// WPARAM wParam, +// LPARAM lParam ) +// { +// Do something +// return 0; +// } + +/*=========================================================================== +METHOD: + IsValid (Inline Method) + +DESCRIPTION: + eProtocolEventType validity check + +PARAMETERS: + evtType [ I ] - Enum value being verified + +RETURN VALUE: + bool +===========================================================================*/ +inline bool IsValid( eProtocolEventType evtType ) +{ + bool bRC = false; + if (evtType > ePROTOCOL_EVT_BEGIN && evtType < ePROTOCOL_EVT_END) + { + bRC = true; + } + + return bRC; +}; + +/*=========================================================================*/ +// Struct sProtocolNotificationEvent +/*=========================================================================*/ +struct sProtocolNotificationEvent +{ + public: + // (Inline) Default constructor (results in invalid object) + sProtocolNotificationEvent() + : mEventType( ePROTOCOL_EVT_BEGIN ), + mParam1( 0 ), + mParam2( 0 ) + { + // Nothing to do + }; + + // (Inline) Parameter constructor + sProtocolNotificationEvent( + eProtocolEventType eventType, + DWORD param1, + DWORD param2 ) + : mEventType( eventType ), + mParam1( param1 ), + mParam2( param2 ) + { + // Nothing to do + }; + + // (Inline) Is this object valid? + bool IsValid() + { + return ::IsValid( mEventType ); + } + + /* Event type */ + eProtocolEventType mEventType; + + /* First parameter (see above) */ + DWORD mParam1; + + /* Second parameter (see above) */ + DWORD mParam2; +}; + +/*=========================================================================*/ +// Class cProtocolNotification +// +// This abstract base class provides notification of protocol server +// events sent from the protocol server to protocol server clients +/*=========================================================================*/ +class cProtocolNotification +{ + public: + // Return an allocated copy of this object + virtual cProtocolNotification * Clone() const = 0; + + // Notify view of a protocol event + virtual void Notify( + eProtocolEventType eventType, + DWORD param1, + DWORD param2 ) const = 0; +}; + +/*=========================================================================*/ +// Class cProtocolQueueNotification +// +// This class provides notification via a cSyncQueue object +// populated with sProtocolNotificationEvent objects +/*=========================================================================*/ +class cProtocolQueueNotification : public cProtocolNotification +{ + public: + // Constructor + cProtocolQueueNotification( cSyncQueue <sProtocolNotificationEvent> * pSQ ); + + // Copy constructor + cProtocolQueueNotification( const cProtocolQueueNotification & notifier ); + + // Destructor + virtual ~cProtocolQueueNotification(); + + // Return a copy of this object + virtual cProtocolNotification * Clone() const; + + // Notify view of a MIS event + virtual void Notify( + eProtocolEventType eventType, + DWORD param1, + DWORD param2 ) const; + + protected: + /* Event notification queue */ + mutable cSyncQueue <sProtocolNotificationEvent> * mpSQ; +}; |