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

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. //****************************************************************************
  14. //
  15. //  AUTHOR
  16. //      Magnus Svensson
  17. //
  18. //  NAME
  19. //      OSE_Transporter
  20. //
  21. //  DESCRIPTION
  22. //      A OSE_Transporter instance is created when OSE-signal communication 
  23. //      shall be used (user specified). It handles connect, disconnect, 
  24. //      send and receive.
  25. //
  26. //
  27. //
  28. //***************************************************************************/
  29. #ifndef OSE_Transporter_H
  30. #define OSE_Transporter_H
  31. #include "Transporter.hpp"
  32. #include "ose.h"
  33. class OSE_Transporter : public Transporter {
  34.   friend class OSE_Receiver;
  35.   friend class TransporterRegistry;
  36. public:
  37.   
  38.   // Initialize member variables
  39.   OSE_Transporter(int prioASignalSize,
  40.   int prioBSignalSize,
  41.   NodeId localNodeId,
  42.   const char * lHostName,
  43.   NodeId remoteNodeId,
  44.   const char * rHostName,
  45.   int byteorder,
  46.   bool compression, 
  47.   bool checksum, 
  48.   bool signalId,
  49.   Uint32 reportFreq = 4096);
  50.   
  51.   // Disconnect, delete send buffers and receive buffer
  52.   ~OSE_Transporter();
  53.   
  54.   /**
  55.    * Allocate buffers for sending and receiving
  56.    */
  57.   bool initTransporter();
  58.   /**
  59.    * Connect
  60.    */
  61.   virtual void doConnect();
  62.   /**
  63.    * Disconnect
  64.    */
  65.   virtual void doDisconnect();
  66.   
  67.   Uint32 * getWritePtr(Uint32 lenBytes, Uint32 prio);
  68.   void updateWritePtr(Uint32 lenBytes, Uint32 prio);
  69.   
  70.   /**
  71.    * Retrieves the contents of the send buffers, copies it into 
  72.    * an OSE signal and sends it. Until the send buffers are empty
  73.    */
  74.   void doSend();
  75.   bool hasDataToSend() const {
  76.     return prioBSignal->dataSignal.length > 0;
  77.   }
  78.   
  79. protected:
  80.   /**
  81.    * Not implemented
  82.    *   OSE uses async connect/disconnect
  83.    */
  84.   virtual bool connectImpl(Uint32 timeOut){
  85.     return false;
  86.   }
  87.   
  88.   /**
  89.    * Not implemented
  90.    *   OSE uses async connect/disconnect
  91.    */
  92.   virtual void disconnectImpl(){
  93.   }
  94. private:
  95.   const bool isServer;
  96.   
  97.   int maxPrioBDataSize;
  98.   /**
  99.    * Remote node name
  100.    * On same machine: ndb_node1
  101.    * On remote machine: rhost/ndb_node1
  102.    **/
  103.   PROCESS  remoteNodePid;
  104.   OSATTREF remoteNodeRef;
  105.   char remoteNodeName[256];
  106.   Uint32 signalIdCounter;
  107.   int prioBSignalSize;
  108.   Uint32 * prioBInsertPtr;
  109.   union SIGNAL * prioBSignal;
  110.   struct NdbTransporterData * allocPrioASignal(Uint32 lenBytes) const;
  111.   
  112.   /**
  113.    * Statistics
  114.    */
  115.   Uint32 reportFreq;
  116.   Uint32 receiveCount;
  117.   Uint64 receiveSize;
  118.   Uint32 sendCount;
  119.   Uint64 sendSize;
  120.   void initSignals();
  121.   /**
  122.    * OSE Receiver callbacks
  123.    */
  124.   void huntReceived(struct NdbTransporterHunt * sig);
  125.   bool connectReq(struct NdbTransporterConnectReq * sig);
  126.   bool connectRef(struct NdbTransporterConnectRef * sig);
  127.   bool connectConf(struct NdbTransporterConnectConf * sig);
  128.   bool disconnectOrd(struct NdbTransporterDisconnectOrd * sig);
  129.   enum OSETransporterState {
  130.     DISCONNECTED              = 0,
  131.     WAITING_FOR_HUNT          = 1,
  132.     WAITING_FOR_CONNECT_REQ   = 2,
  133.     WAITING_FOR_CONNECT_CONF  = 3,
  134.     CONNECTED                 = 4
  135.   } state;
  136. };
  137. // Define of OSE_Transporter_H
  138. #endif