Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
3.3 kB · 109 lines
C
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109#pragma onceusing namespace std;
class Packet;class PacketListener;class DataInputStream;class DataOutputStream;
#define PACKET_ENABLE_STAT_TRACKING 0
class Packet;
typedef shared_ptr<Packet> (*packetCreateFn)();
class Packet{public: class PacketStatistics { private: int count; int totalSize;
static const int TOTAL_TICKS = 100;
// 4J Added __int64 countSamples[TOTAL_TICKS]; __int64 sizeSamples[TOTAL_TICKS]; __int64 timeSamples[TOTAL_TICKS]; int samplesPos;
public: const int id;
public: PacketStatistics(int id); void addPacket(int bytes); int getCount(); int getTotalSize(); double getAverageSize(); __int64 getRunningTotal(); __int64 getRunningCount(); void IncrementPos(); };
// 4J JEV, replaces the static blocks. static void staticCtor();
public: static unordered_map<int, packetCreateFn> idToCreateMap; // IntHashMap in 1.8.2 ... needed? // Made public in 1.0.1
static unordered_set<int> clientReceivedPackets; static unordered_set<int> serverReceivedPackets; static unordered_set<int> sendToAnyClientPackets;
// 4J Stu - Added the sendToAnyClient param so we can limit some packets to be only sent to one player on a system // 4J Stu - Added renderStats param for use in debugging static void map(int id, bool receiveOnClient, bool receiveOnServer, bool sendToAnyClient, bool renderStats, const type_info& clazz, packetCreateFn );
public: const __int64 createTime;
Packet();
static shared_ptr<Packet> getPacket(int id);
// 4J Added static bool canSendToAnyClient(shared_ptr<Packet> packet);
static void writeBytes(DataOutputStream *dataoutputstream, byteArray bytes); static byteArray readBytes(DataInputStream *datainputstream);
virtual int getId() = 0;
bool shouldDelay;
private: // 4J Added to track stats for packets that are going out via QNet static unordered_map<int, PacketStatistics *> outgoingStatistics; // IntHashMap in 1.8.2 ... needed? static vector<PacketStatistics *> renderableStats; static int renderPos;public: static void recordOutgoingPacket(shared_ptr<Packet> packet, int playerIndex); static void updatePacketStatsPIX();private : static unordered_map<int, PacketStatistics *> statistics; //static int nextPrint;
public: static shared_ptr<Packet> readPacket(DataInputStream *dis, bool isServer); static void writePacket(shared_ptr<Packet> packet, DataOutputStream *dos); static void writeUtf(const wstring& value, DataOutputStream *dos); static wstring readUtf(DataInputStream *dis, int maxLength); virtual void read(DataInputStream *dis) = 0; // throws IOException = 0; TODO 4J JEV, should this declare a throws? virtual void write(DataOutputStream *dos) = 0; // throws IOException = 0; TODO 4J JEV, should this declare a throws? virtual void handle(PacketListener *listener) = 0; virtual int getEstimatedSize() = 0; virtual bool canBeInvalidated(); virtual bool isInvalidatedBy(shared_ptr<Packet> packet); virtual bool isAync();
// 4J Stu - Brought these functions forward for enchanting/game rules static shared_ptr<ItemInstance> readItem(DataInputStream *dis); static void writeItem(shared_ptr<ItemInstance> item, DataOutputStream *dos); static CompoundTag *readNbt(DataInputStream *dis);
protected: static void writeNbt(CompoundTag *tag, DataOutputStream *dos);};