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. #ifndef Transporter_H
  14. #define Transporter_H
  15. #include <ndb_global.h>
  16. #include <SocketClient.hpp>
  17. #include <TransporterRegistry.hpp>
  18. #include <TransporterCallback.hpp>
  19. #include "TransporterDefinitions.hpp"
  20. #include "Packer.hpp"
  21. #include <NdbMutex.h>
  22. #include <NdbThread.h>
  23. class Transporter {
  24.   friend class TransporterRegistry;
  25. public:
  26.   virtual bool initTransporter() = 0;
  27.   /**
  28.    * Destructor
  29.    */
  30.   virtual ~Transporter();
  31.   /**
  32.    * None blocking
  33.    *    Use isConnected() to check status
  34.    */
  35.   bool connect_client();
  36.   bool connect_server(NDB_SOCKET_TYPE socket);
  37.   /**
  38.    * Blocking
  39.    */
  40.   virtual void doDisconnect();
  41.   virtual Uint32 * getWritePtr(Uint32 lenBytes, Uint32 prio) = 0;
  42.   virtual void updateWritePtr(Uint32 lenBytes, Uint32 prio) = 0;
  43.   
  44.   /**
  45.    * Are we currently connected
  46.    */
  47.   bool isConnected() const;
  48.   
  49.   /**
  50.    * Remote Node Id
  51.    */
  52.   NodeId getRemoteNodeId() const;
  53.   /**
  54.    * Local (own) Node Id
  55.    */
  56.   NodeId getLocalNodeId() const;
  57.   virtual Uint32 get_free_buffer() const = 0;
  58.   
  59. protected:
  60.   Transporter(TransporterRegistry &,
  61.       TransporterType,
  62.       const char *lHostName,
  63.       const char *rHostName, 
  64.       int r_port,
  65.       NodeId lNodeId,
  66.       NodeId rNodeId, 
  67.       int byteorder, 
  68.       bool compression, 
  69.       bool checksum, 
  70.       bool signalId);
  71.   /**
  72.    * Blocking, for max timeOut milli seconds
  73.    *   Returns true if connect succeded
  74.    */
  75.   virtual bool connect_server_impl(NDB_SOCKET_TYPE sockfd) = 0;
  76.   virtual bool connect_client_impl(NDB_SOCKET_TYPE sockfd) = 0;
  77.   
  78.   /**
  79.    * Blocking
  80.    */
  81.   virtual void disconnectImpl() = 0;
  82.   
  83.   /**
  84.    * Remote host name/and address
  85.    */
  86.   char remoteHostName[256];
  87.   char localHostName[256];
  88.   struct in_addr remoteHostAddress;
  89.   struct in_addr localHostAddress;
  90.   const unsigned int m_r_port;
  91.   const NodeId remoteNodeId;
  92.   const NodeId localNodeId;
  93.   
  94.   const bool isServer;
  95.   unsigned createIndex;
  96.   
  97.   int byteOrder;
  98.   bool compressionUsed;
  99.   bool checksumUsed;
  100.   bool signalIdUsed;
  101.   Packer m_packer;  
  102. private:
  103.   SocketClient *m_socket_client;
  104.   struct in_addr m_connect_address;
  105. protected:
  106.   Uint32 getErrorCount();
  107.   Uint32 m_errorCount;
  108.   Uint32 m_timeOutMillis;
  109. protected:
  110.   bool m_connected;     // Are we connected
  111.   TransporterType m_type;
  112.   TransporterRegistry &m_transporter_registry;
  113.   void *get_callback_obj() { return m_transporter_registry.callbackObj; };
  114.   void report_disconnect(int err){m_transporter_registry.report_disconnect(remoteNodeId,err);};
  115.   void report_error(enum TransporterError err){reportError(get_callback_obj(),remoteNodeId,err);};
  116. };
  117. inline
  118. bool
  119. Transporter::isConnected() const {
  120.   return m_connected;
  121. }
  122. inline
  123. NodeId
  124. Transporter::getRemoteNodeId() const {
  125.   return remoteNodeId;
  126. }
  127. inline
  128. NodeId
  129. Transporter::getLocalNodeId() const {
  130.   return localNodeId;
  131. }
  132. inline
  133. Uint32
  134. Transporter::getErrorCount()
  135.   return m_errorCount;
  136. }
  137. #endif // Define of Transporter_H