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>
|
|
|
|
#include <Util/LockedQueue.h>
|
2018-10-26 13:51:38 +02:00
|
|
|
#include <map>
|
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
|
|
|
|
2020-03-01 01:00:57 +11:00
|
|
|
#define DECLARE_HANDLER( x ) void x( const Sapphire::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
namespace Sapphire::Network::Packets
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
2018-10-28 21:53:21 +01:00
|
|
|
class GamePacket;
|
2019-02-09 14:44:43 +11:00
|
|
|
class PacketContainer;
|
2018-10-28 21:53:21 +01:00
|
|
|
}
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
namespace Sapphire::Network
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
enum ConnectionType : uint8_t
|
|
|
|
{
|
|
|
|
Zone = 1,
|
|
|
|
Chat = 2,
|
|
|
|
Lobby = 3,
|
|
|
|
None
|
|
|
|
};
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2019-06-03 00:21:58 +10:00
|
|
|
class GameConnection : public Network::Connection
|
2018-10-28 21:53:21 +01:00
|
|
|
{
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
private:
|
2020-03-01 01:00:57 +11:00
|
|
|
typedef void ( GameConnection::* Handler )( const Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
2018-10-28 21:53:21 +01:00
|
|
|
Entity::Player& player );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
using HandlerMap = std::map< uint16_t, Handler >;
|
|
|
|
using HandlerStrMap = std::map< uint16_t, std::string >;
|
2017-08-22 21:36:20 +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
|
|
|
// handler for game packets ( main type 0x03, connection type 1 )
|
|
|
|
HandlerMap m_zoneHandlerMap;
|
|
|
|
HandlerStrMap m_zoneHandlerStrMap;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01: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-12-22 22:25:03 +01:00
|
|
|
World::SessionPtr m_pSession;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2019-06-03 00:21:58 +10:00
|
|
|
Common::Util::LockedQueue< Network::Packets::FFXIVARR_PACKET_RAW > m_inQueue;
|
2019-06-02 00:34:22 +10:00
|
|
|
Common::Util::LockedQueue< Packets::FFXIVPacketBasePtr > m_outQueue;
|
2019-03-20 09:15:57 +01:00
|
|
|
std::vector< uint8_t > m_packets;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
public:
|
|
|
|
ConnectionType m_conType;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2020-03-01 01:00:57 +11:00
|
|
|
GameConnection( HivePtr pHive, AcceptorPtr pAcceptor );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
~GameConnection() override;
|
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
|
2019-03-08 09:43:56 +01:00
|
|
|
void onAccept( const std::string& host, uint16_t port ) override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2019-03-08 09:43:56 +01:00
|
|
|
void onDisconnect() override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2019-03-08 09:43:56 +01:00
|
|
|
void onRecv( std::vector< uint8_t >& buffer ) override;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2019-03-08 09:43:56 +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 handlePackets( const Packets::FFXIVARR_PACKET_HEADER& ipcHeader,
|
|
|
|
const std::vector< Packets::FFXIVARR_PACKET_RAW >& packetData );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-11-29 16:55:48 +01:00
|
|
|
void queueInPacket( Sapphire::Network::Packets::FFXIVARR_PACKET_RAW inPacket );
|
2017-08-22 21:36:20 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void queueOutPacket( Packets::FFXIVPacketBasePtr outPacket );
|
2021-11-27 00:53:57 +01:00
|
|
|
void queueOutPacket( std::vector< Packets::FFXIVPacketBasePtr > vector );
|
2017-08-22 21:36:20 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void processInQueue();
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void processOutQueue();
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2019-06-03 00:21:58 +10:00
|
|
|
void handlePacket( Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2019-06-03 00:21:58 +10:00
|
|
|
void handleZonePacket( Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2019-06-03 00:21:58 +10:00
|
|
|
void handleChatPacket( Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
2018-01-14 23:54:26 +01:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void sendPackets( Packets::PacketContainer* pPacket );
|
2017-08-12 23:20:26 +09:00
|
|
|
|
2019-06-03 00:21:58 +10:00
|
|
|
void sendSinglePacket( Network::Packets::FFXIVPacketBasePtr pPacket );
|
2017-08-12 23:20:26 +09:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
void injectPacket( const std::string& packetpath, Entity::Player& player );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
static const char* zonePacketToString( uint32_t opcode );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( loginHandler );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( setLanguageHandler );
|
2017-11-22 00:29:42 +09:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( getBlacklistHandler );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( getCommonlistHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( getCommonlistDetailHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( pcSearchHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( joinChatChannelHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( linkshellListHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( linkshellJoinHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( syncHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( setProfileHandler );
|
2018-09-10 14:34:24 +01:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( getProfileHandler );
|
2018-09-10 14:34:24 +01:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( getSearchCommentHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( reqExamineFcInfo );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( moveHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( chatHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( zoneJumpHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( commandHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( itemOperation );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( newDiscoveryHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( eventHandlerTalk );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( eventHandlerEmote );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( eventHandlerWithinRange );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( eventHandlerOutsideRange );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( eventHandlerEnterTerritory );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( returnEventSceneHeader );
|
|
|
|
DECLARE_HANDLER( returnEventScene2 );
|
|
|
|
DECLARE_HANDLER( returnEventScene4 );
|
|
|
|
DECLARE_HANDLER( returnEventScene8 );
|
|
|
|
DECLARE_HANDLER( returnEventScene16 );
|
|
|
|
DECLARE_HANDLER( returnEventScene32 );
|
|
|
|
DECLARE_HANDLER( returnEventScene64 );
|
|
|
|
DECLARE_HANDLER( returnEventScene128 );
|
|
|
|
DECLARE_HANDLER( returnEventScene255 );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( startUiEvent );
|
2018-11-22 00:04:26 +01:00
|
|
|
|
2021-12-02 22:58:36 +01:00
|
|
|
DECLARE_HANDLER( yieldEventString );
|
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( logoutHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( cfRequestPenalties );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( findContent );
|
|
|
|
DECLARE_HANDLER( find5Contents );
|
|
|
|
DECLARE_HANDLER( findContentAsRandom );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( cfDutyAccepted );
|
2018-11-28 21:59:28 +11:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( actionRequest );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( selectGroundActionRequest );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( gmCommandHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( gmCommandNameHandler );
|
2018-08-29 21:40:59 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( configHandler );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-11-12 09:32:20 +01:00
|
|
|
DECLARE_HANDLER( landRenameHandler );
|
2018-11-11 14:27:39 +01:00
|
|
|
|
2018-11-28 21:59:28 +11:00
|
|
|
DECLARE_HANDLER( housingUpdateGreetingHandler );
|
|
|
|
|
2018-11-12 08:32:30 +01:00
|
|
|
DECLARE_HANDLER( buildPresetHandler );
|
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
DECLARE_HANDLER( tellHandler );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( chatToChannelHandler );
|
|
|
|
|
2018-12-26 18:11:18 +11:00
|
|
|
DECLARE_HANDLER( reqPlaceHousingItem );
|
|
|
|
|
2018-12-27 15:52:48 +11:00
|
|
|
DECLARE_HANDLER( reqMoveHousingItem );
|
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( catalogSearch );
|
2019-01-01 11:51:48 +11:00
|
|
|
|
|
|
|
DECLARE_HANDLER( marketBoardRequestItemInfo );
|
2018-12-31 23:20:36 +11:00
|
|
|
|
2019-01-01 17:29:06 +11:00
|
|
|
DECLARE_HANDLER( marketBoardRequestItemListings );
|
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( getFcStatus );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( getFcProfile );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( getRequestItemListHandler );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( cancelFindContent );
|
|
|
|
DECLARE_HANDLER( acceptContent );
|
|
|
|
|
|
|
|
DECLARE_HANDLER( inviteHandler );
|
|
|
|
DECLARE_HANDLER( inviteReplyHandler );
|
2020-06-15 08:34:10 +09:00
|
|
|
|
2021-11-27 00:53:57 +01:00
|
|
|
DECLARE_HANDLER( pcPartyLeaveHandler );
|
|
|
|
DECLARE_HANDLER( pcPartyDisbandHandler );
|
|
|
|
DECLARE_HANDLER( pcPartyKickHandler );
|
|
|
|
DECLARE_HANDLER( pcPartyChangeLeaderHandler );
|
2021-08-16 17:18:29 +09:00
|
|
|
|
2021-12-01 21:30:12 -03:00
|
|
|
DECLARE_HANDLER( friendlistRemoveHandler );
|
|
|
|
DECLARE_HANDLER( setFriendlistGroupHandler );
|
2018-10-28 21:53:21 +01:00
|
|
|
};
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-10-28 21:53:21 +01:00
|
|
|
}
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
#endif
|