1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-24 13:47:46 +00:00
sapphire/src/servers/sapphire_zone/Network/GameConnection.h

173 lines
3.9 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>
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
#include "ForwardsZone.h"
2017-08-08 13:53:47 +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 {
class GamePacket;
2018-06-02 15:52:35 +02:00
}
enum ConnectionType :
uint8_t
2017-08-08 13:53:47 +02:00
{
Zone = 1,
Chat = 2,
Lobby = 3,
None
2017-08-08 13:53:47 +02:00
};
class GameConnection : public Connection
2017-08-08 13:53:47 +02:00
{
private:
typedef void ( GameConnection::* Handler )( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
Entity::Player& player );
2017-08-08 13:53:47 +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
AcceptorPtr m_pAcceptor;
2017-08-08 13:53:47 +02:00
// handler for game packets ( main type 0x03, connection type 1 )
HandlerMap m_zoneHandlerMap;
HandlerStrMap m_zoneHandlerStrMap;
// handler for game packets ( main type 0x03, connection type 2 )
HandlerMap m_chatHandlerMap;
HandlerStrMap m_chatHandlerStrMap;
2017-08-08 13:53:47 +02:00
SessionPtr m_pSession;
2017-08-08 13:53:47 +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:
ConnectionType m_conType;
2017-08-08 13:53:47 +02:00
GameConnection( HivePtr pHive, AcceptorPtr pAcceptor );
2017-08-08 13:53:47 +02:00
~GameConnection();
2017-08-08 13:53:47 +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
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 boost::system::error_code& error ) override;
2017-08-08 13:53:47 +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
void queueInPacket( Core::Network::Packets::FFXIVARR_PACKET_RAW inPacket );
2017-08-08 13:53:47 +02:00
void queueOutPacket( Packets::FFXIVPacketBasePtr outPacket );
2017-08-08 13:53:47 +02:00
void processInQueue();
void processOutQueue();
void handlePacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
2017-08-08 13:53:47 +02:00
void handleZonePacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
2017-08-08 13:53:47 +02:00
void handleChatPacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
2017-08-08 13:53:47 +02:00
void sendPackets( Packets::PacketContainer* pPacket );
2017-08-08 13:53:47 +02:00
void sendSinglePacket( Core::Network::Packets::FFXIVPacketBasePtr pPacket );
void injectPacket( const std::string& packetpath, Entity::Player& player );
2017-08-12 23:20:26 +09:00
DECLARE_HANDLER( initHandler );
2017-08-12 23:20:26 +09:00
DECLARE_HANDLER( finishLoadingHandler );
2017-08-08 13:53:47 +02:00
DECLARE_HANDLER( blackListHandler );
2017-08-08 13:53:47 +02:00
DECLARE_HANDLER( socialListHandler );
2017-08-08 13:53:47 +02:00
DECLARE_HANDLER( linkshellListHandler );
2017-11-22 00:29:42 +09:00
DECLARE_HANDLER( playTimeHandler );
2017-08-08 13:53:47 +02:00
DECLARE_HANDLER( pingHandler );
DECLARE_HANDLER( fcInfoReqHandler );
DECLARE_HANDLER( setSearchInfoHandler );
DECLARE_HANDLER( reqSearchInfoHandler );
DECLARE_HANDLER( reqExamineSearchCommentHandler );
DECLARE_HANDLER( reqExamineFcInfo );
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
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