Horizon Official Technical Documentation
PacketLengthTable.hpp
Go to the documentation of this file.
1/***************************************************
2 * _ _ _ *
3 * | | | | (_) *
4 * | |_| | ___ _ __ _ _______ _ __ *
5 * | _ |/ _ \| '__| |_ / _ \| '_ \ *
6 * | | | | (_) | | | |/ / (_) | | | | *
7 * \_| |_/\___/|_| |_/___\___/|_| |_| *
8 ***************************************************
9 * This file is part of Horizon (c).
10 * Copyright (c) 2023 Horizon Dev Team.
11 *
12 * Base Author - Sephus. (sagunxp@gmail.com)
13 *
14 * This library is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation, either version 3 of the License, or
17 * (at your option) any later version.
18 *
19 * This library is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this library. If not, see <http://www.gnu.org/licenses/>.
26 **************************************************/
27
28#ifndef HORIZON_CHAR_ZERO_PACKET_LENGTH_TABLE
29#define HORIZON_CHAR_ZERO_PACKET_LENGTH_TABLE
30
34
35namespace Horizon
36{
37namespace Char
38{
39 typedef std::shared_ptr<Base::NetworkPacketHandler<CharSession>> HPacketStructPtrType;
40 typedef std::shared_ptr<Base::NetworkPacketTransmitter<CharSession>> TPacketStructPtrType;
41 typedef std::pair<int16_t, HPacketStructPtrType> HPacketTablePairType;
42 typedef std::pair<int16_t, TPacketStructPtrType> TPacketTablePairType;
46class PacketLengthTable
47{
48public:
49 PacketLengthTable(std::shared_ptr<CharSession> s)
50 : _session(s)
51 {
52#define ADD_HPKT(i, j, k) _hpacket_length_table.insert(i, std::make_pair(j, std::make_shared<k>(s)))
53#define ADD_TPKT(i, j, k) _tpacket_length_table.insert(i, std::make_pair(j, std::make_shared<k>(s)))
56 ADD_HPKT(0x09a1, 2, CH_CHARLIST_REQ);
57 ADD_HPKT(0x07e7, 32, CH_CHECKBOT);
58 ADD_HPKT(0x0068, 46, CH_DELETE_CHAR);
59 ADD_HPKT(0x01fb, 56, CH_DELETE_CHAR2);
60 ADD_HPKT(0x0829, 12, CH_DELETE_CHAR3);
62 ADD_HPKT(0x098f, -1, CH_DELETE_CHAR3_EXT);
66 ADD_HPKT(0x0065, 17, CH_ENTER);
67 ADD_HPKT(0x0275, 37, CH_ENTER2);
68 ADD_HPKT(0x07e5, 4, CH_ENTER_CHECKBOT);
69 ADD_HPKT(0x0a39, 36, CH_MAKE_CHAR);
78 ADD_HPKT(0x08b8, 10, CH_SECOND_PASSWD_ACK);
80 ADD_HPKT(0x0066, 3, CH_SELECT_CHAR);
82 ADD_HPKT(0x0187, 6, CH_UNKNOWN_PING);
83 ADD_HPKT(0x08b0, 17, CH_WAITING_LOGIN);
85 ADD_TPKT(0x006b, -1, HC_ACCEPT_ENTER);
86 ADD_TPKT(0x082d, -1, HC_ACCEPT_ENTER2);
87 ADD_TPKT(0x006d, 157, HC_ACCEPT_MAKECHAR);
93 ADD_TPKT(0x020d, -1, HC_BLOCK_CHARACTER);
94 ADD_TPKT(0x0448, -1, HC_CHARACTER_LIST);
95 ADD_TPKT(0x09a0, 6, HC_CHARLIST_NOTIFY);
97 ADD_TPKT(0x07e8, -1, HC_CHECKBOT);
98 ADD_TPKT(0x07e9, 5, HC_CHECKBOT_RESULT);
99 ADD_TPKT(0x082a, 10, HC_DELETE_CHAR3);
100 ADD_TPKT(0x082c, 10, HC_DELETE_CHAR3_CANCEL);
106 ADD_TPKT(0x0ac5, 156, HC_NOTIFY_ZONESVR);
108 ADD_TPKT(0x099e, 12, HC_QUEUE_ORDER);
109 ADD_TPKT(0x0070, 3, HC_REFUSE_DELETECHAR);
110 ADD_TPKT(0x006c, 3, HC_REFUSE_ENTER);
111 ADD_TPKT(0x006e, 3, HC_REFUSE_MAKECHAR);
112 ADD_TPKT(0x02ca, 3, HC_REFUSE_SELECTCHAR);
114 ADD_TPKT(0x08b9, 12, HC_SECOND_PASSWD_LOGIN);
115 ADD_TPKT(0x09c2, -1, HC_SECRETSCAN_DATA);
116 ADD_TPKT(0x08e3, 157, HC_UPDATE_CHARINFO);
117 ADD_TPKT(0x08af, 10, HC_WAITING_LOGIN);
118#undef ADD_HPKT
119#undef ADD_TPKT
120 }
121
123
124 std::shared_ptr<CharSession> get_session() { return _session.lock(); }
125
126 HPacketTablePairType get_hpacket_info(uint16_t packet_id) { return _hpacket_length_table.at(packet_id); }
127 TPacketTablePairType get_tpacket_info(uint16_t packet_id) { return _tpacket_length_table.at(packet_id); }
128
129protected:
132 std::weak_ptr<CharSession> _session;
133
134};
135}
136}
137#endif /* HORIZON_CHAR_ZERO_PACKET_LENGTH_TABLE */
#define ADD_HPKT(i, j, k)
#define ADD_TPKT(i, j, k)
Main object for the aegis packet: CH_ACK_CHANGE_CHARACTERNAME.
Definition: HandledPackets.hpp:58
Main object for the aegis packet: CH_AVAILABLE_SECOND_PASSWD.
Definition: HandledPackets.hpp:90
Main object for the aegis packet: CH_CHARLIST_REQ.
Definition: HandledPackets.hpp:122
Main object for the aegis packet: CH_CHECKBOT.
Definition: HandledPackets.hpp:154
Main object for the aegis packet: CH_DELETE_CHAR2.
Definition: HandledPackets.hpp:232
Main object for the aegis packet: CH_DELETE_CHAR3_CANCEL.
Definition: HandledPackets.hpp:300
Main object for the aegis packet: CH_DELETE_CHAR3_EXT.
Definition: HandledPackets.hpp:333
Main object for the aegis packet: CH_DELETE_CHAR3_RESERVED.
Definition: HandledPackets.hpp:365
Main object for the aegis packet: CH_DELETE_CHAR3.
Definition: HandledPackets.hpp:266
Main object for the aegis packet: CH_DELETE_CHAR.
Definition: HandledPackets.hpp:192
Main object for the aegis packet: CH_DELETE_SECOND_PASSWD.
Definition: HandledPackets.hpp:398
Main object for the aegis packet: CH_EDIT_SECOND_PASSWD.
Definition: HandledPackets.hpp:430
Main object for the aegis packet: CH_ENTER2.
Definition: HandledPackets.hpp:508
Main object for the aegis packet: CH_ENTER_CHECKBOT.
Definition: HandledPackets.hpp:540
Main object for the aegis packet: CH_ENTER.
Definition: HandledPackets.hpp:470
Main object for the aegis packet: CH_MAKE_CHAR_NOT_STATS.
Definition: HandledPackets.hpp:629
Main object for the aegis packet: CH_MAKE_CHAR.
Definition: HandledPackets.hpp:587
Main object for the aegis packet: CH_MAKE_SECOND_PASSWD.
Definition: HandledPackets.hpp:661
Main object for the aegis packet: CH_NOT_AVAILABLE_SECOND_PASSWD.
Definition: HandledPackets.hpp:695
Main object for the aegis packet: CH_REQ_CHANGE_CHARACTERNAME.
Definition: HandledPackets.hpp:727
Main object for the aegis packet: CH_REQ_CHANGE_CHARACTER_SLOT.
Definition: HandledPackets.hpp:759
Main object for the aegis packet: CH_REQ_CHANGE_CHARNAME.
Definition: HandledPackets.hpp:797
Main object for the aegis packet: CH_REQ_CHARINFO_PER_PAGE.
Definition: HandledPackets.hpp:829
Main object for the aegis packet: CH_REQ_IS_VALID_CHARNAME.
Definition: HandledPackets.hpp:867
Main object for the aegis packet: CH_SECOND_PASSWD_ACK.
Definition: HandledPackets.hpp:899
Main object for the aegis packet: CH_SELECT_ACCESSIBLE_MAPNAME.
Definition: HandledPackets.hpp:933
Main object for the aegis packet: CH_SELECT_CHAR_GOINGTOBEUSED.
Definition: HandledPackets.hpp:1010
Main object for the aegis packet: CH_SELECT_CHAR.
Definition: HandledPackets.hpp:971
Main object for the aegis packet: CH_UNKNOWN_PING.
Definition: HandledPackets.hpp:1048
Main object for the aegis packet: CH_WAITING_LOGIN.
Definition: HandledPackets.hpp:1081
Main object for the aegis packet: HC_ACCEPT_DELETECHAR.
Definition: TransmittedPackets.hpp:82
Main object for the aegis packet: HC_ACCEPT_ENTER2.
Definition: TransmittedPackets.hpp:163
Main object for the aegis packet: HC_ACCEPT_ENTER.
Definition: TransmittedPackets.hpp:120
Main object for the aegis packet: HC_ACCEPT_MAKECHAR.
Definition: TransmittedPackets.hpp:211
Main object for the aegis packet: HC_ACK_CHANGE_CHARACTER_SLOT.
Definition: TransmittedPackets.hpp:244
Main object for the aegis packet: HC_ACK_CHANGE_CHARNAME.
Definition: TransmittedPackets.hpp:282
Main object for the aegis packet: HC_ACK_CHARINFO_PER_PAGE.
Definition: TransmittedPackets.hpp:317
Main object for the aegis packet: HC_ACK_IS_VALID_CHARNAME.
Definition: TransmittedPackets.hpp:358
Main object for the aegis packet: HC_AVAILABLE_SECOND_PASSWD.
Definition: TransmittedPackets.hpp:390
Main object for the aegis packet: HC_BLOCK_CHARACTER.
Definition: TransmittedPackets.hpp:428
Main object for the aegis packet: HC_CHARACTER_LIST.
Definition: TransmittedPackets.hpp:464
Main object for the aegis packet: HC_CHARLIST_NOTIFY.
Definition: TransmittedPackets.hpp:496
Main object for the aegis packet: HC_CHARNOTBEENSELECTED.
Definition: TransmittedPackets.hpp:534
Main object for the aegis packet: HC_CHECKBOT_RESULT.
Definition: TransmittedPackets.hpp:598
Main object for the aegis packet: HC_CHECKBOT.
Definition: TransmittedPackets.hpp:566
Main object for the aegis packet: HC_DELETE_CHAR3_CANCEL.
Definition: TransmittedPackets.hpp:668
Main object for the aegis packet: HC_DELETE_CHAR3_RESERVED.
Definition: TransmittedPackets.hpp:702
Main object for the aegis packet: HC_DELETE_CHAR3.
Definition: TransmittedPackets.hpp:630
Main object for the aegis packet: HC_DELETE_SECOND_PASSWD.
Definition: TransmittedPackets.hpp:737
Main object for the aegis packet: HC_EDIT_SECOND_PASSWD.
Definition: TransmittedPackets.hpp:775
Main object for the aegis packet: HC_MAKE_SECOND_PASSWD.
Definition: TransmittedPackets.hpp:815
Main object for the aegis packet: HC_NOTIFY_ACCESSIBLE_MAPNAME.
Definition: TransmittedPackets.hpp:849
Main object for the aegis packet: HC_NOTIFY_ZONESVR.
Definition: TransmittedPackets.hpp:896
Main object for the aegis packet: HC_NOT_AVAILABLE_SECOND_PASSWD.
Definition: TransmittedPackets.hpp:932
Main object for the aegis packet: HC_QUEUE_ORDER.
Definition: TransmittedPackets.hpp:964
Main object for the aegis packet: HC_REFUSE_DELETECHAR.
Definition: TransmittedPackets.hpp:1002
Main object for the aegis packet: HC_REFUSE_ENTER.
Definition: TransmittedPackets.hpp:1045
Main object for the aegis packet: HC_REFUSE_MAKECHAR.
Definition: TransmittedPackets.hpp:1091
Main object for the aegis packet: HC_REFUSE_SELECTCHAR.
Definition: TransmittedPackets.hpp:1130
Main object for the aegis packet: HC_REQUEST_CHARACTER_PASSWORD.
Definition: TransmittedPackets.hpp:1168
Main object for the aegis packet: HC_SECOND_PASSWD_LOGIN.
Definition: TransmittedPackets.hpp:1234
Main object for the aegis packet: HC_SECRETSCAN_DATA.
Definition: TransmittedPackets.hpp:1309
Main object for the aegis packet: HC_UPDATE_CHARINFO.
Definition: TransmittedPackets.hpp:1341
Main object for the aegis packet: HC_WAITING_LOGIN.
Definition: TransmittedPackets.hpp:1373
std::weak_ptr< CharSession > _session
Definition: PacketLengthTable.hpp:82
TPacketTablePairType get_tpacket_info(uint16_t packet_id)
Definition: PacketLengthTable.hpp:127
std::shared_ptr< CharSession > get_session()
Definition: PacketLengthTable.hpp:124
PacketLengthTable(std::shared_ptr< CharSession > s)
Definition: PacketLengthTable.hpp:49
LockedLookupTable< uint16_t, HPacketTablePairType > _hpacket_length_table
Definition: PacketLengthTable.hpp:80
LockedLookupTable< uint16_t, TPacketTablePairType > _tpacket_length_table
Definition: PacketLengthTable.hpp:81
HPacketTablePairType get_hpacket_info(uint16_t packet_id)
Definition: PacketLengthTable.hpp:126
~PacketLengthTable()
Definition: PacketLengthTable.hpp:122
Value at(Key const &key, Value const &default_value=Value()) const
Definition: LockedLookupTable.hpp:63
std::pair< int16_t, HPacketStructPtrType > HPacketTablePairType
Definition: PacketLengthTable.hpp:41
std::pair< int16_t, TPacketStructPtrType > TPacketTablePairType
Definition: PacketLengthTable.hpp:42
std::shared_ptr< Base::NetworkPacketTransmitter< CharSession > > TPacketStructPtrType
Definition: PacketLengthTable.hpp:40
std::shared_ptr< Base::NetworkPacketHandler< CharSession > > HPacketStructPtrType
Definition: PacketLengthTable.hpp:39
Definition: Element.hpp:7