Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
RealmSocket.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SF_REALMSOCKET_H
7#define SF_REALMSOCKET_H
8
9#include "Common.h"
10#include "PacketLogServer.h"
11#include <boost/asio/ip/tcp.hpp>
12#include <boost/system/error_code.hpp>
13#include <array>
14#include <atomic>
15#include <deque>
16#include <memory>
17#include <string>
18#include <vector>
19
20typedef boost::asio::ip::tcp::socket RealmSocketHandle;
21
22class RealmSocket : public std::enable_shared_from_this<RealmSocket>
23{
24public:
25 class Session
26 {
27 public:
28 Session(void);
29 virtual ~Session(void);
30
31 virtual void OnRead(void) = 0;
32 virtual void OnAccept(void) = 0;
33 virtual void OnClose(void) = 0;
34 };
35
36 RealmSocket(std::unique_ptr<RealmSocketHandle> socket, std::string remoteAddress, uint16 remotePort);
37 ~RealmSocket(void);
38
39 void Start();
40 void Close();
41
42 size_t GetAvailableBytes(void) const;
43 bool PeekBytes(void* buf, size_t len, size_t offset = 0) const;
44 bool ReadBytes(void* buf, size_t len);
45 void DiscardBytes(size_t len);
46
47 bool QueueSend(void const* buf, size_t len);
48
49 const std::string& getRemoteAddress(void) const;
50 uint16 getRemotePort(void) const;
51 void SetPacketLogAccountName(std::string accountName);
52
53 void set_session(std::unique_ptr<Session> session);
54
55private:
56 void Run();
57 void AsyncRead();
58 void HandleRead(boost::system::error_code const& error, size_t bytesTransferred);
59 void QueueWrite(std::vector<char> data);
60 void StartAsyncWrite();
61 void HandleWrite(boost::system::error_code const& error);
62 void CloseSocket();
63 void NotifyClose();
64 void CompactInputBuffer();
66 void LogAuthPacket(void const* data, size_t len, Skyfire::PacketLogServerDirection direction);
67
68 bool IsOpen(void) const;
69
70 std::unique_ptr<RealmSocketHandle> _socket;
71 std::array<char, 4096> _readBuffer;
72 std::vector<char> _inputBuffer;
74 std::unique_ptr<Session> _session;
75 std::string _remoteAddress;
78 std::deque<std::vector<char>> _writeQueue;
80 std::atomic<bool> _closed;
81 std::atomic<bool> _closeNotified;
82};
83
84#endif
std::uint16_t uint16
Definition Define.h:78
boost::asio::ip::tcp::socket RealmSocketHandle
Definition RealmSocket.h:20
virtual void OnRead(void)=0
virtual void OnClose(void)=0
virtual ~Session(void)
virtual void OnAccept(void)=0
std::string _packetLogAccountName
Definition RealmSocket.h:76
size_t _inputReadPos
Definition RealmSocket.h:73
void LogAuthPacket(void const *data, size_t len, Skyfire::PacketLogServerDirection direction)
bool PeekBytes(void *buf, size_t len, size_t offset=0) const
void HandleRead(boost::system::error_code const &error, size_t bytesTransferred)
std::deque< std::vector< char > > _writeQueue
Definition RealmSocket.h:78
bool IsOpen(void) const
std::unique_ptr< Session > _session
Definition RealmSocket.h:74
uint16 getRemotePort(void) const
size_t GetAvailableBytes(void) const
bool ReadBytes(void *buf, size_t len)
void CloseSocket()
bool _writeInProgress
Definition RealmSocket.h:79
RealmSocket(std::unique_ptr< RealmSocketHandle > socket, std::string remoteAddress, uint16 remotePort)
void set_session(std::unique_ptr< Session > session)
std::string _remoteAddress
Definition RealmSocket.h:75
Skyfire::PacketLogServerSessionInfo BuildPacketLogSessionInfo() const
const std::string & getRemoteAddress(void) const
std::vector< char > _inputBuffer
Definition RealmSocket.h:72
void DiscardBytes(size_t len)
bool QueueSend(void const *buf, size_t len)
std::atomic< bool > _closeNotified
Definition RealmSocket.h:81
std::atomic< bool > _closed
Definition RealmSocket.h:80
std::array< char, 4096 > _readBuffer
Definition RealmSocket.h:71
void CompactInputBuffer()
~RealmSocket(void)
std::unique_ptr< RealmSocketHandle > _socket
Definition RealmSocket.h:70
void SetPacketLogAccountName(std::string accountName)
void HandleWrite(boost::system::error_code const &error)
void QueueWrite(std::vector< char > data)
void StartAsyncWrite()
uint16 _remotePort
Definition RealmSocket.h:77
void NotifyClose()