hkSocket.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_BASE_SOCKET_H
  9. #define HK_BASE_SOCKET_H
  10. #include <Common/Base/System/Io/Reader/hkStreamReader.h>
  11. #include <Common/Base/System/Io/Writer/hkStreamWriter.h>
  12. class hkSocketImpl;
  13. /// A simple platform independent socket.
  14. class hkSocket : public hkReferencedObject
  15. {
  16. public:
  17. enum SOCKET_EVENTS {
  18. SOCKET_NOEVENTS = 0, // register for this only to get back to a blocking socket (default)
  19. SOCKET_CAN_READ = 1, // Data has arrived to read
  20. SOCKET_CAN_WRITE = 2, // Space is now available to write
  21. SOCKET_CONNECT = 4, // A connect has succeeded
  22. SOCKET_CLOSED = 8, // The socket has closed.
  23. SOCKET_ALLEVENTS = 0xff // register for all of the above
  24. };
  25. static hkSocket* (HK_CALL *create)();
  26. /// Return true if the connection is still live.
  27. virtual hkBool isOk() const = 0;
  28. /// Close the connection.
  29. virtual void close() = 0;
  30. /// Read at most nbytes into buf. Return number of bytes read.
  31. virtual int read( void* buf, int nbytes) = 0;
  32. /// Write at most nbytes from buf. Return number of bytes written.
  33. virtual int write( const void* buf, int nbytes) = 0;
  34. /// Connect to host 'remote' at specified port.
  35. virtual hkResult connect( const char* remote, int port) = 0;
  36. /// Start listening for connections on the specified port.
  37. virtual hkResult listen(int port) = 0;
  38. /// Get notification of network events instead of having to poll for them
  39. virtual hkResult asyncSelect(void* notificationHandle, hkUint32 message, SOCKET_EVENTS events) { return HK_FAILURE; }
  40. /// Check for new connections on a socket which we are listen()ing on.
  41. /// Returns NULL if there are no new connections.
  42. virtual hkSocket* pollForNewClient() = 0;
  43. /// Get a stream reader for this connection.
  44. hkStreamReader& getReader() { return m_reader; }
  45. /// Get a stream writer for this connection.
  46. hkStreamWriter& getWriter() { return m_writer; }
  47. /// This flag is used to ensure the network is only set up when a socket is created.
  48. /// Initially set to false this is check in the base hkSocket constructor and when false calls hkSocket::s_platformNetInit
  49. static hkBool s_platformNetInitialized;
  50. /// Pointers to default network initialization function.
  51. /// This is called during hkBaseSystem::init().
  52. /// Setting this to to HK_NULL before hkBaseSystem::init() is called will bypass initialization.
  53. static void (HK_CALL *s_platformNetInit)(void);
  54. /// Pointers to default network shutdown function.
  55. /// This is called during hkBaseSystem::quit().
  56. /// Setting this to to HK_NULL before hkBaseSystem::quit() is called will bypass shutdown.
  57. static void (HK_CALL *s_platformNetQuit)(void);
  58. protected:
  59. hkSocket();
  60. private:
  61. class ReaderAdapter : public hkStreamReader
  62. {
  63. public:
  64. ReaderAdapter() : m_socket(HK_NULL) { }
  65. virtual int read( void* buf, int nbytes );
  66. virtual hkBool isOk() const;
  67. hkSocket* m_socket;
  68. };
  69. class WriterAdapter : public hkStreamWriter
  70. {
  71. public:
  72. WriterAdapter() : m_socket(HK_NULL) { }
  73. virtual int write( const void* buf, int nbytes );
  74. virtual hkBool isOk() const;
  75. hkSocket* m_socket;
  76. };
  77. ReaderAdapter m_reader;
  78. WriterAdapter m_writer;
  79. };
  80. #endif // HK_BASE_SOCKET_H
  81. /*
  82. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  83. * Confidential Information of Havok.  (C) Copyright 1999-2009
  84. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  85. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  86. * rights, and intellectual property rights in the Havok software remain in
  87. * Havok and/or its suppliers.
  88. * Use of this software for evaluation purposes is subject to and indicates
  89. * acceptance of the End User licence Agreement for this product. A copy of
  90. * the license is included with this software and is also available at www.havok.com/tryhavok.
  91. */