Cmvmi.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef Cmvmi_H_
  14. #define Cmvmi_H_
  15. #include <pc.hpp>
  16. #include <SimulatedBlock.hpp>
  17. #include <LogLevel.hpp>
  18. #include <ArrayList.hpp>
  19. /**
  20.  * Cmvmi class
  21.  */
  22. class Cmvmi : public SimulatedBlock {
  23. public:
  24.   Cmvmi(const Configuration & conf);
  25.   virtual ~Cmvmi();
  26.   
  27. private:
  28.   /**
  29.    * These methods used to be reportXXX
  30.    *
  31.    * But they in a nasty way intefere with the execution model
  32.    * they been turned in to exec-Method used via prio A signals
  33.    */
  34.   void execDISCONNECT_REP(Signal*);
  35.   void execCONNECT_REP(Signal*);
  36.   
  37. private:
  38.   BLOCK_DEFINES(Cmvmi);
  39.   // The signal processing functions
  40.   void execNDB_TAMPER(Signal* signal);
  41.   void execSET_LOGLEVELORD(Signal* signal);
  42.   void execEVENT_REP(Signal* signal);
  43.   void execSTTOR(Signal* signal);
  44.   void execCLOSE_COMREQ(Signal* signal);
  45.   void execENABLE_COMORD(Signal* signal);
  46.   void execOPEN_COMREQ(Signal* signal);
  47.   void execSIZEALT_ACK(Signal* signal);
  48.   void execTEST_ORD(Signal* signal);
  49.   void execSTATISTICS_REQ(Signal* signal);
  50.   void execSTOP_ORD(Signal* signal);
  51.   void execSTART_ORD(Signal* signal);
  52.   void execTAMPER_ORD(Signal* signal);
  53.   void execSET_VAR_REQ(Signal* signal);
  54.   void execSET_VAR_CONF(Signal* signal);
  55.   void execSET_VAR_REF(Signal* signal);
  56.   void execDUMP_STATE_ORD(Signal* signal);
  57.   void execEVENT_SUBSCRIBE_REQ(Signal *);
  58.   void cancelSubscription(NodeId nodeId);
  59.   
  60.   void handleSET_VAR_REQ(Signal* signal);
  61.   void execTESTSIG(Signal* signal);
  62.   char theErrorMessage[256];
  63.   void sendSTTORRY(Signal* signal);
  64.   LogLevel clogLevel;
  65.   NdbNodeBitmask c_dbNodes;
  66.   class Configuration & theConfig;
  67.   /**
  68.    * This struct defines the data needed for a EVENT_REP subscriber
  69.    */
  70.   struct EventRepSubscriber {
  71.     /**
  72.      * What log level is the subscriber using
  73.      */
  74.     LogLevel       logLevel;
  75.     /**
  76.      * What block reference does he use
  77.      *   (Where should the EVENT_REP's be forwarded)
  78.      */
  79.     BlockReference blockRef;
  80.     /**
  81.      * Next ptr (used in pool/list)
  82.      */
  83.     union { Uint32 nextPool; Uint32 nextList; };
  84.     Uint32 prevList;
  85.   };
  86.   typedef Ptr<EventRepSubscriber> SubscriberPtr;
  87.   
  88.   /**
  89.    * Pool of EventRepSubscriber record
  90.    */
  91.   ArrayPool<EventRepSubscriber> subscriberPool;
  92.   
  93.   /**
  94.    * List of current subscribers
  95.    */
  96.   ArrayList<EventRepSubscriber> subscribers;
  97. private:
  98.   // Declared but not defined
  99.   Cmvmi(const Cmvmi &obj);
  100.   void operator = (const Cmvmi &);
  101.   void sendFragmentedComplete(Signal* signal, Uint32 data, Uint32 returnCode);
  102. };
  103. #endif