1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-27 14:57:44 +00:00
sapphire/src/world/Network/GameConnection.h

251 lines
6.7 KiB
C
Raw Normal View History

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
#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
namespace Sapphire::Network::Packets
2017-08-08 13:53:47 +02:00
{
2018-10-28 21:53:21 +01:00
class GamePacket;
class PacketContainer;
2018-10-28 21:53:21 +01:00
}
2017-08-08 13:53:47 +02: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
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 >;
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
World::SessionPtr m_pSession;
2017-08-08 13:53:47 +02:00
Common::Util::LockedQueue< Network::Packets::FFXIVARR_PACKET_RAW > m_inQueue;
Common::Util::LockedQueue< Packets::FFXIVPacketBasePtr > m_outQueue;
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
~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
void onAccept( const std::string& host, uint16_t port ) override;
2017-08-08 13:53:47 +02:00
void onDisconnect() override;
2017-08-08 13:53:47 +02:00
void onRecv( std::vector< uint8_t >& buffer ) override;
2017-08-08 13:53:47 +02: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
void queueInPacket( Sapphire::Network::Packets::FFXIVARR_PACKET_RAW inPacket );
2018-10-28 21:53:21 +01:00
void queueOutPacket( Packets::FFXIVPacketBasePtr outPacket );
void queueOutPacket( std::vector< Packets::FFXIVPacketBasePtr > vector );
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
void handlePacket( Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
2017-08-08 13:53:47 +02:00
void handleZonePacket( Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
2017-08-08 13:53:47 +02:00
void handleChatPacket( Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
2018-10-28 21:53:21 +01:00
void sendPackets( Packets::PacketContainer* pPacket );
2017-08-12 23:20:26 +09: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
static const char* zonePacketToString( uint32_t opcode );
2017-08-08 13:53:47 +02:00
DECLARE_HANDLER( loginHandler );
2017-08-08 13:53:47 +02:00
DECLARE_HANDLER( setLanguageHandler );
2017-11-22 00:29:42 +09:00
DECLARE_HANDLER( getCommonlistHandler );
DECLARE_HANDLER( getCommonlistDetailHandler );
DECLARE_HANDLER( pcSearchHandler );
DECLARE_HANDLER( joinChatChannelHandler );
DECLARE_HANDLER( linkshellListHandler );
2021-12-09 23:38:23 +01:00
DECLARE_HANDLER( linkshellKickHandler );
DECLARE_HANDLER( linkshellLeaveHandler );
DECLARE_HANDLER( linkshellChangeMasterHandler );
DECLARE_HANDLER( linkshellJoinOfficialHandler );
DECLARE_HANDLER( linkshellAddLeaderHandler );
DECLARE_HANDLER( linkshellRemoveLeaderHandler );
DECLARE_HANDLER( linkshellDeclineLeaderHandler );
DECLARE_HANDLER( linkshellJoinHandler );
DECLARE_HANDLER( syncHandler );
DECLARE_HANDLER( setProfileHandler );
DECLARE_HANDLER( getProfileHandler );
DECLARE_HANDLER( getSearchCommentHandler );
2018-10-28 21:53:21 +01:00
DECLARE_HANDLER( reqExamineFcInfo );
DECLARE_HANDLER( moveHandler );
2018-10-28 21:53:21 +01:00
DECLARE_HANDLER( chatHandler );
DECLARE_HANDLER( zoneJumpHandler );
DECLARE_HANDLER( commandHandler );
DECLARE_HANDLER( itemOperation );
DECLARE_HANDLER( newDiscoveryHandler );
2018-10-28 21:53:21 +01:00
DECLARE_HANDLER( eventHandlerTalk );
2018-10-28 21:53:21 +01:00
DECLARE_HANDLER( eventHandlerEmote );
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-10-28 21:53:21 +01:00
DECLARE_HANDLER( eventHandlerEnterTerritory );
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 );
2021-12-13 00:44:42 +01:00
DECLARE_HANDLER( yieldEventSceneHeader );
DECLARE_HANDLER( yieldEventScene2 );
DECLARE_HANDLER( yieldEventScene4 );
DECLARE_HANDLER( yieldEventScene8 );
DECLARE_HANDLER( yieldEventScene16 );
DECLARE_HANDLER( yieldEventScene32 );
DECLARE_HANDLER( yieldEventScene64 );
DECLARE_HANDLER( yieldEventScene128 );
DECLARE_HANDLER( yieldEventScene255 );
DECLARE_HANDLER( startUiEvent );
2018-11-22 00:04:26 +01:00
2022-02-08 12:46:18 +01:00
DECLARE_HANDLER( startEventSayHandler );
DECLARE_HANDLER( yieldEventString );
2021-12-12 23:26:12 +01:00
DECLARE_HANDLER( yieldEventSceneIntAndString );
2018-10-28 21:53:21 +01:00
DECLARE_HANDLER( logoutHandler );
DECLARE_HANDLER( cfRequestPenalties );
DECLARE_HANDLER( findContent );
DECLARE_HANDLER( find5Contents );
DECLARE_HANDLER( findContentAsRandom );
2018-10-28 21:53:21 +01:00
DECLARE_HANDLER( cfDutyAccepted );
2018-11-28 21:59:28 +11:00
DECLARE_HANDLER( actionRequest );
DECLARE_HANDLER( selectGroundActionRequest );
DECLARE_HANDLER( gmCommandHandler );
DECLARE_HANDLER( gmCommandNameHandler );
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 );
DECLARE_HANDLER( buildPresetHandler );
2018-10-28 21:53:21 +01:00
DECLARE_HANDLER( tellHandler );
2017-08-08 13:53:47 +02:00
DECLARE_HANDLER( chatToChannelHandler );
2018-12-26 18:11:18 +11:00
DECLARE_HANDLER( reqPlaceHousingItem );
DECLARE_HANDLER( reqMoveHousingItem );
DECLARE_HANDLER( catalogSearch );
2019-01-01 11:51:48 +11:00
2022-02-18 02:24:18 +01:00
DECLARE_HANDLER( gearSetEquip );
2019-01-01 11:51:48 +11:00
DECLARE_HANDLER( marketBoardRequestItemInfo );
2018-12-31 23:20:36 +11:00
DECLARE_HANDLER( marketBoardRequestItemListings );
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
DECLARE_HANDLER( pcPartyLeaveHandler );
DECLARE_HANDLER( pcPartyDisbandHandler );
DECLARE_HANDLER( pcPartyKickHandler );
DECLARE_HANDLER( pcPartyChangeLeaderHandler );
DECLARE_HANDLER( friendlistRemoveHandler );
DECLARE_HANDLER( setFriendlistGroupHandler );
2021-12-13 22:36:29 -03:00
DECLARE_HANDLER( getBlacklistHandler );
DECLARE_HANDLER( blacklistAddHandler );
DECLARE_HANDLER( blacklistRemoveHandler );
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