diff options
Diffstat (limited to 'src/game/WorldSocket.h')
-rw-r--r-- | src/game/WorldSocket.h | 48 |
1 files changed, 0 insertions, 48 deletions
diff --git a/src/game/WorldSocket.h b/src/game/WorldSocket.h index 94f57d8d636..6847185cc8f 100644 --- a/src/game/WorldSocket.h +++ b/src/game/WorldSocket.h @@ -17,16 +17,13 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - /** \addtogroup u2w User to World Communication * @{ * \file WorldSocket.h * \author Derex <derex101@gmail.com> */ - #ifndef _WORLDSOCKET_H #define _WORLDSOCKET_H - #include <ace/Basic_Types.h> #include <ace/Synch_Traits.h> #include <ace/Svc_Handler.h> @@ -37,21 +34,16 @@ #include <ace/Guard_T.h> #include <ace/Unbounded_Queue.h> #include <ace/Message_Block.h> - #if !defined (ACE_LACKS_PRAGMA_ONCE) #pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ - #include "Common.h" #include "Auth/AuthCrypt.h" - class ACE_Message_Block; class WorldPacket; class WorldSession; - /// Handler that can communicate over stream sockets. typedef ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH> WorldHandler; - /** * WorldSocket. * @@ -95,142 +87,102 @@ class WorldSocket : protected WorldHandler friend class ACE_Acceptor< WorldSocket, ACE_SOCK_ACCEPTOR >; friend class WorldSocketMgr; friend class ReactorRunnable; - /// Declare the acceptor for this class typedef ACE_Acceptor< WorldSocket, ACE_SOCK_ACCEPTOR > Acceptor; - /// Mutex type used for various synchronizations. typedef ACE_Thread_Mutex LockType; typedef ACE_Guard<LockType> GuardType; - /// Queue for storing packets for which there is no space. typedef ACE_Unbounded_Queue< WorldPacket* > PacketQueueT; - /// Check if socket is closed. bool IsClosed (void) const; - /// Close the socket. void CloseSocket (void); - /// Get address of connected peer. const std::string& GetRemoteAddress (void) const; - /// Send A packet on the socket, this function is reentrant. /// @param pct packet to send /// @return -1 of failure int SendPacket (const WorldPacket& pct); - /// Add reference to this object. long AddReference (void); - /// Remove reference to this object. long RemoveReference (void); - protected: /// things called by ACE framework. WorldSocket (void); virtual ~WorldSocket (void); - /// Called on open ,the void* is the acceptor. virtual int open (void *); - /// Called on failures inside of the acceptor, don't call from your code. virtual int close (int); - /// Called when we can read from the socket. virtual int handle_input (ACE_HANDLE = ACE_INVALID_HANDLE); - /// Called when the socket can write. virtual int handle_output (ACE_HANDLE = ACE_INVALID_HANDLE); - /// Called when connection is closed or error happens. virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE, ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK); - /// Called by WorldSocketMgr/ReactorRunnable. int Update (void); - private: /// Helper functions for processing incoming data. int handle_input_header (void); int handle_input_payload (void); int handle_input_missing_data (void); - /// Help functions to mark/unmark the socket for output. /// @param g the guard is for m_OutBufferLock, the function will release it int cancel_wakeup_output (GuardType& g); int schedule_wakeup_output (GuardType& g); - /// process one incoming packet. /// @param new_pct received packet ,note that you need to delete it. int ProcessIncoming (WorldPacket* new_pct); - /// Called by ProcessIncoming() on CMSG_AUTH_SESSION. int HandleAuthSession (WorldPacket& recvPacket); - /// Called by ProcessIncoming() on CMSG_PING. int HandlePing (WorldPacket& recvPacket); - /// Try to write WorldPacket to m_OutBuffer ,return -1 if no space /// Need to be called with m_OutBufferLock lock held int iSendPacket (const WorldPacket& pct); - /// Flush m_PacketQueue if there are packets in it /// Need to be called with m_OutBufferLock lock held /// @return true if it wrote to the buffer ( AKA you need /// to mark the socket for output ). bool iFlushPacketQueue (); - private: /// Time in which the last ping was received ACE_Time_Value m_LastPingTime; - /// Keep track of over-speed pings ,to prevent ping flood. uint32 m_OverSpeedPings; - /// Address of the remote peer std::string m_Address; - /// Class used for managing encryption of the headers AuthCrypt m_Crypt; - /// Mutex lock to protect m_Session LockType m_SessionLock; - /// Session to which received packets are routed WorldSession* m_Session; - /// here are stored the fragments of the received data WorldPacket* m_RecvWPct; - /// This block actually refers to m_RecvWPct contents, /// which allows easy and safe writing to it. /// It wont free memory when its deleted. m_RecvWPct takes care of freeing. ACE_Message_Block m_RecvPct; - /// Fragment of the received header. ACE_Message_Block m_Header; - /// Mutex for protecting output related data. LockType m_OutBufferLock; - /// Buffer used for writing output. ACE_Message_Block *m_OutBuffer; - /// Size of the m_OutBuffer. size_t m_OutBufferSize; - /// Here are stored packets for which there was no space on m_OutBuffer, /// this allows not-to kick player if its buffer is overflowed. PacketQueueT m_PacketQueue; - /// True if the socket is registered with the reactor for output bool m_OutActive; - uint32 m_Seed; }; - #endif /* _WORLDSOCKET_H */ - /// @} |