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>
|
2018-06-02 13:38:00 +02:00
|
|
|
|
2018-03-06 22:22:19 +01:00
|
|
|
#include <Network/CommonNetwork.h>
|
2018-06-02 15:52:35 +02:00
|
|
|
//#include <Network/GamePacket.h>
|
2018-03-06 22:22:19 +01:00
|
|
|
#include <Util/LockedQueue.h>
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-09-09 23:56:22 +02:00
|
|
|
#include "ForwardsZone.h"
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-06-18 23:03:39 +02:00
|
|
|
#define DECLARE_HANDLER( x ) void x( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
namespace Core {
|
|
|
|
namespace Network {
|
2018-06-02 15:52:35 +02:00
|
|
|
namespace Packets {
|
2018-08-29 21:40:59 +02:00
|
|
|
class GamePacket;
|
2018-06-02 15:52:35 +02:00
|
|
|
}
|
2018-08-29 21:40:59 +02:00
|
|
|
enum ConnectionType :
|
|
|
|
uint8_t
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
2018-08-29 21:40:59 +02:00
|
|
|
Zone = 1,
|
|
|
|
Chat = 2,
|
|
|
|
Lobby = 3,
|
|
|
|
None
|
2017-08-08 13:53:47 +02:00
|
|
|
};
|
|
|
|
|
2018-09-24 23:48:42 +02:00
|
|
|
class GameConnection : public Connection
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
private:
|
2018-08-29 21:40:59 +02:00
|
|
|
typedef void ( GameConnection::* Handler )( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
|
|
|
Entity::Player& player );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
using HandlerMap = std::map< uint16_t, Handler >;
|
|
|
|
using HandlerStrMap = std::map< uint16_t, std::string >;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
AcceptorPtr m_pAcceptor;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
// handler for game packets ( main type 0x03, connection type 1 )
|
|
|
|
HandlerMap m_zoneHandlerMap;
|
|
|
|
HandlerStrMap m_zoneHandlerStrMap;
|
2017-08-22 21:36:20 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
// handler for game packets ( main type 0x03, connection type 2 )
|
|
|
|
HandlerMap m_chatHandlerMap;
|
|
|
|
HandlerStrMap m_chatHandlerStrMap;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
SessionPtr m_pSession;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
LockedQueue< Core::Network::Packets::FFXIVARR_PACKET_RAW > m_inQueue;
|
|
|
|
LockedQueue< Packets::FFXIVPacketBasePtr > m_outQueue;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
public:
|
2018-08-29 21:40:59 +02:00
|
|
|
ConnectionType m_conType;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
GameConnection( HivePtr pHive, AcceptorPtr pAcceptor );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
~GameConnection();
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02: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-08-29 21:40:59 +02:00
|
|
|
void OnDisconnect() override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void OnRecv( std::vector< uint8_t >& buffer ) override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void OnError( const boost::system::error_code& error ) override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void handlePackets( const Packets::FFXIVARR_PACKET_HEADER& ipcHeader,
|
|
|
|
const std::vector< Packets::FFXIVARR_PACKET_RAW >& packetData );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void queueInPacket( Core::Network::Packets::FFXIVARR_PACKET_RAW inPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void queueOutPacket( Packets::FFXIVPacketBasePtr outPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void processInQueue();
|
2017-08-22 21:36:20 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void processOutQueue();
|
2017-08-22 21:36:20 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void handlePacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void handleZonePacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void handleChatPacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void sendPackets( Packets::PacketContainer* pPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void sendSinglePacket( Core::Network::Packets::FFXIVPacketBasePtr pPacket );
|
2018-01-14 23:54:26 +01:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
void injectPacket( const std::string& packetpath, Entity::Player& player );
|
2017-08-12 23:20:26 +09:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( initHandler );
|
2017-08-12 23:20:26 +09:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( finishLoadingHandler );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( blackListHandler );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( socialListHandler );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( linkshellListHandler );
|
2017-11-22 00:29:42 +09:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( playTimeHandler );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( pingHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( fcInfoReqHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( setSearchInfoHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( reqSearchInfoHandler );
|
|
|
|
|
2018-09-10 14:34:24 +01:00
|
|
|
DECLARE_HANDLER( reqExamineSearchCommentHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( reqExamineFcInfo );
|
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( updatePositionHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( chatHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( zoneLineHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( clientTriggerHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( inventoryModifyHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( discoveryHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( eventHandlerTalk );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( eventHandlerEmote );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( eventHandlerWithinRange );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( eventHandlerOutsideRange );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( eventHandlerEnterTerritory );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-08-29 21:40:59 +02:00
|
|
|
DECLARE_HANDLER( eventHandlerReturn );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( eventHandlerLinkshell );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( logoutHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( cfDutyInfoRequest );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( cfRegisterDuty );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( cfRegisterRoulette );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( cfDutyAccepted );
|
|
|
|
|
|
|
|
|
|
|
|
DECLARE_HANDLER( actionHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( gm1Handler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( gm2Handler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( reqEquipDisplayFlagsHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( performNoteHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( tellHandler );
|
|
|
|
|
|
|
|
};
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|