diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-07-24 16:52:24 +0200 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-07-24 16:52:24 +0200 |
commit | 6a00886804c53883d919f008f6ec47a574d86607 (patch) | |
tree | 2dbe9fdb0a0d5f068770d49a3c960d36958f27d5 /src/network/Stream.hpp | |
parent | 2017-07-21 (diff) | |
download | AltCraft-6a00886804c53883d919f008f6ec47a574d86607.tar AltCraft-6a00886804c53883d919f008f6ec47a574d86607.tar.gz AltCraft-6a00886804c53883d919f008f6ec47a574d86607.tar.bz2 AltCraft-6a00886804c53883d919f008f6ec47a574d86607.tar.lz AltCraft-6a00886804c53883d919f008f6ec47a574d86607.tar.xz AltCraft-6a00886804c53883d919f008f6ec47a574d86607.tar.zst AltCraft-6a00886804c53883d919f008f6ec47a574d86607.zip |
Diffstat (limited to 'src/network/Stream.hpp')
-rw-r--r-- | src/network/Stream.hpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/network/Stream.hpp b/src/network/Stream.hpp new file mode 100644 index 0000000..a24dfbe --- /dev/null +++ b/src/network/Stream.hpp @@ -0,0 +1,107 @@ +#pragma once + +#include <algorithm> +#include <string> +#include <stdexcept> +#include <vector> +#include <cstring> + +#include <nlohmann/json.hpp> +#include <easylogging++.h> + +#include <network/Socket.hpp> +#include <Vector.hpp> +#include <Utility.hpp> + +class Stream { +public: + virtual ~Stream() {}; +}; + +class StreamInput : Stream { + virtual void ReadData(unsigned char *buffPtr, size_t buffLen) = 0; +public: + virtual ~StreamInput() = default; + bool ReadBool(); + signed char ReadByte(); + unsigned char ReadUByte(); + short ReadShort(); + unsigned short ReadUShort(); + int ReadInt(); + long long ReadLong(); + float ReadFloat(); + double ReadDouble(); + std::string ReadString(); + std::string ReadChat(); + int ReadVarInt(); + long long ReadVarLong(); + std::vector<unsigned char> ReadEntityMetadata(); + std::vector<unsigned char> ReadSlot(); + std::vector<unsigned char> ReadNbtTag(); + Vector ReadPosition(); + unsigned char ReadAngle(); + std::vector<unsigned char> ReadUuid(); + std::vector<unsigned char> ReadByteArray(size_t arrLength); +}; + +class StreamOutput : Stream { + virtual void WriteData(unsigned char *buffPtr, size_t buffLen) = 0; +public: + virtual ~StreamOutput() = default; + void WriteBool(bool value); + void WriteByte(signed char value); + void WriteUByte(unsigned char value); + void WriteShort(short value); + void WriteUShort(unsigned short value); + void WriteInt(int value); + void WriteLong(long long value); + void WriteFloat(float value); + void WriteDouble(double value); + void WriteString(std::string value); + void WriteChat(std::string value); + void WriteVarInt(int value); + void WriteVarLong(long long value); + void WriteEntityMetadata(std::vector<unsigned char> value); + void WriteSlot(std::vector<unsigned char> value); + void WriteNbtTag(std::vector<unsigned char> value); + void WritePosition(Vector value); + void WriteAngle(unsigned char value); + void WriteUuid(std::vector<unsigned char> value); + void WriteByteArray(std::vector<unsigned char> value); +}; + +class StreamBuffer : public StreamInput, public StreamOutput { + unsigned char *buffer; + unsigned char *bufferPtr; + size_t bufferLength; + + void ReadData(unsigned char *buffPtr, size_t buffLen) override; + void WriteData(unsigned char *buffPtr, size_t buffLen) override; + +public: + StreamBuffer(unsigned char *data, size_t dataLen); + StreamBuffer(size_t bufferLen); + ~StreamBuffer(); + + std::vector<unsigned char> GetBuffer(); +}; + +class StreamCounter : public StreamOutput { + void WriteData(unsigned char *buffPtr, size_t buffLen) override; + + size_t size; +public: + StreamCounter(size_t initialSize = 0); + ~StreamCounter(); + + size_t GetCountedSize(); +}; + +class StreamSocket : public StreamInput, public StreamOutput { + Socket *socket; + void ReadData(unsigned char *buffPtr, size_t buffLen) override; + void WriteData(unsigned char *buffPtr, size_t buffLen) override; +public: + StreamSocket(Socket *socketPtr); + ~StreamSocket() = default; +};
\ No newline at end of file |