summaryrefslogtreecommitdiff
path: root/gobi-api/fixed-GobiAPI-1.0.40/Core/ProtocolNotification.h
diff options
context:
space:
mode:
Diffstat (limited to 'gobi-api/fixed-GobiAPI-1.0.40/Core/ProtocolNotification.h')
-rwxr-xr-xgobi-api/fixed-GobiAPI-1.0.40/Core/ProtocolNotification.h237
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;
+};