2017-08-08 13:53:47 +02:00
|
|
|
#ifndef GAMECONNECTION_H
|
|
|
|
#define GAMECONNECTION_H
|
|
|
|
|
2018-03-06 22:22:19 +01:00
|
|
|
#include <Network/Connection.h>
|
|
|
|
#include <Network/Acceptor.h>
|
|
|
|
#include <Network/CommonNetwork.h>
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-03-06 22:22:19 +01:00
|
|
|
#include <Network/PacketContainer.h>
|
|
|
|
#include <Util/LockedQueue.h>
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-24 23:39:11 +02:00
|
|
|
#include <asio.hpp>
|
2018-10-26 13:46:28 +02:00
|
|
|
#include <map>
|
2017-12-18 12:36:52 +01:00
|
|
|
#include "LobbyPacketContainer.h"
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
#include "Forwards.h"
|
|
|
|
|
|
|
|
#define DECLARE_HANDLER( x ) void x( Packets::GamePacketPtr pInPacket, Entity::PlayerPtr pPlayer )
|
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
namespace Core::Network
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
class GameConnection : public Connection
|
|
|
|
{
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
private:
|
|
|
|
// TODO move the next three params to the session, makes more sense there
|
|
|
|
// encryption key
|
|
|
|
uint8_t m_encKey[0x10];
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
// base key, the encryption key is generated from this
|
|
|
|
uint8_t m_baseKey[0x2C];
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
bool m_bEncryptionInitialized;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
AcceptorPtr m_pAcceptor;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
LobbySessionPtr m_pSession;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
LockedQueue< Packets::GamePacketPtr > m_inQueue;
|
|
|
|
LockedQueue< Packets::GamePacketPtr > m_outQueue;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
public:
|
|
|
|
GameConnection( HivePtr pHive, AcceptorPtr pAcceptor );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
~GameConnection();
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void generateEncryptionKey( uint32_t key, const std::string& keyPhrase );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
// overwrite the parents onConnect for our game socket needs
|
|
|
|
void OnAccept( const std::string& host, uint16_t port ) override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void OnDisconnect() override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void OnRecv( std::vector< uint8_t >& buffer ) override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void OnError( const asio::error_code& error ) override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void sendError( uint64_t sequence, uint32_t errorcode, uint16_t messageId, uint32_t tmpId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void getCharList( Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void enterWorld( Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
bool sendServiceAccountList( Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
bool createOrModifyChar( Packets::FFXIVARR_PACKET_RAW& packet, uint32_t tmpId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void handlePackets( const Packets::FFXIVARR_PACKET_HEADER& ipcHeader,
|
|
|
|
const std::vector< Packets::FFXIVARR_PACKET_RAW >& packetData );
|
2018-07-03 00:01:26 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void handleGamePacket( Packets::FFXIVARR_PACKET_RAW& pPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void handlePacket( Packets::FFXIVPacketBasePtr pPacket );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void sendPackets( Packets::PacketContainer* pPacket );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void sendPacket( Packets::LobbyPacketContainer& pLpc );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void sendSinglePacket( Packets::FFXIVPacketBasePtr pPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
};
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-12-18 12:36:52 +01:00
|
|
|
#endif
|