first commit
This commit is contained in:
27
include/TessesFramework/Streams/BufferedStream.hpp
Normal file
27
include/TessesFramework/Streams/BufferedStream.hpp
Normal file
@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
#include "Stream.hpp"
|
||||
|
||||
namespace Tesses::Framework::Streams
|
||||
{
|
||||
class BufferedStream : public Stream
|
||||
{
|
||||
private:
|
||||
Stream* strm;
|
||||
bool owns;
|
||||
uint8_t* buffer;
|
||||
size_t bufferSize;
|
||||
size_t offset;
|
||||
size_t read;
|
||||
public:
|
||||
BufferedStream(Stream* strm, bool owns, size_t bufferSize=1024);
|
||||
BufferedStream(Stream& strm, size_t bufferSize=1024);
|
||||
bool EndOfStream();
|
||||
bool CanRead();
|
||||
bool CanWrite();
|
||||
size_t Read(uint8_t* buff, size_t sz);
|
||||
size_t Write(const uint8_t* buff, size_t sz);
|
||||
|
||||
~BufferedStream();
|
||||
};
|
||||
|
||||
}
|
||||
27
include/TessesFramework/Streams/FileStream.hpp
Normal file
27
include/TessesFramework/Streams/FileStream.hpp
Normal file
@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
#include "Stream.hpp"
|
||||
#include <cstdio>
|
||||
namespace Tesses::Framework::Streams
|
||||
{
|
||||
class FileStream : public Stream {
|
||||
bool canRead;
|
||||
bool canWrite;
|
||||
bool canSeek;
|
||||
bool owns;
|
||||
FILE* f;
|
||||
void SetMode(std::string mode);
|
||||
public:
|
||||
FileStream(std::filesystem::path p, std::string mode);
|
||||
FileStream(FILE* f, bool owns, std::string mode , bool canSeek=true);
|
||||
size_t Read(uint8_t* buff, size_t sz);
|
||||
size_t Write(const uint8_t* buff, size_t sz);
|
||||
bool CanRead();
|
||||
bool CanWrite();
|
||||
bool CanSeek();
|
||||
int64_t GetPosition();
|
||||
void Flush();
|
||||
void Seek(int64_t pos, SeekOrigin whence);
|
||||
~FileStream();
|
||||
|
||||
};
|
||||
}
|
||||
22
include/TessesFramework/Streams/MemoryStream.hpp
Normal file
22
include/TessesFramework/Streams/MemoryStream.hpp
Normal file
@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
#include "Stream.hpp"
|
||||
namespace Tesses::Framework::Streams
|
||||
{
|
||||
class MemoryStream : public Stream {
|
||||
std::vector<uint8_t> buffer;
|
||||
size_t offset;
|
||||
bool writable;
|
||||
public:
|
||||
MemoryStream(bool isWritable);
|
||||
std::vector<uint8_t>& GetBuffer();
|
||||
size_t Read(uint8_t* buff, size_t sz);
|
||||
size_t Write(const uint8_t* buff, size_t sz);
|
||||
bool CanRead();
|
||||
bool CanWrite();
|
||||
bool CanSeek();
|
||||
int64_t GetLength();
|
||||
int64_t GetPosition();
|
||||
void Seek(int64_t pos, SeekOrigin whence);
|
||||
|
||||
};
|
||||
}
|
||||
43
include/TessesFramework/Streams/NetworkStream.hpp
Normal file
43
include/TessesFramework/Streams/NetworkStream.hpp
Normal file
@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
#include "Stream.hpp"
|
||||
|
||||
namespace Tesses::Framework::Streams
|
||||
{
|
||||
class NetworkStream;
|
||||
|
||||
class TcpServer {
|
||||
int32_t sock;
|
||||
bool owns;
|
||||
bool valid;
|
||||
public:
|
||||
TcpServer(int32_t sock,bool owns);
|
||||
TcpServer(uint16_t port, int32_t backlog);
|
||||
TcpServer(std::string ip, uint16_t port, int32_t backlog);
|
||||
NetworkStream* GetStream(std::string& ip, uint16_t& port);
|
||||
~TcpServer();
|
||||
void Close();
|
||||
};
|
||||
class NetworkStream : public Stream {
|
||||
int32_t sock;
|
||||
bool owns;
|
||||
bool success;
|
||||
bool endOfStream;
|
||||
public:
|
||||
bool EndOfStream();
|
||||
bool CanRead();
|
||||
bool CanWrite();
|
||||
NetworkStream(bool ipV6,bool datagram);
|
||||
NetworkStream(std::string ipOrFqdn, uint16_t port, bool datagram,bool broadcast,bool supportIPv6);
|
||||
NetworkStream(int32_t sock, bool owns);
|
||||
void Listen(int32_t backlog);
|
||||
void Bind(std::string ip, uint16_t port);
|
||||
void SetBroadcast(bool bC);
|
||||
NetworkStream* Accept(std::string& ip, uint16_t& port);
|
||||
size_t Read(uint8_t* buff, size_t sz);
|
||||
size_t Write(const uint8_t* buff, size_t sz);
|
||||
size_t ReadFrom(uint8_t* buff, size_t sz, std::string& ip, uint16_t& port);
|
||||
size_t WriteTo(const uint8_t* buff, size_t sz, std::string ip, uint16_t port);
|
||||
static std::vector<std::pair<std::string,std::string>> GetIPs(bool ipV6=false);
|
||||
~NetworkStream();
|
||||
};
|
||||
}
|
||||
31
include/TessesFramework/Streams/Stream.hpp
Normal file
31
include/TessesFramework/Streams/Stream.hpp
Normal file
@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
#include "../Common.hpp"
|
||||
namespace Tesses::Framework::Streams
|
||||
{
|
||||
enum class SeekOrigin : uint8_t {
|
||||
Begin=0,
|
||||
Current=1,
|
||||
End=2
|
||||
};
|
||||
class Stream {
|
||||
public:
|
||||
int32_t ReadByte();
|
||||
void WriteByte(uint8_t b);
|
||||
|
||||
virtual bool EndOfStream();
|
||||
virtual size_t Read(uint8_t* buff, size_t sz);
|
||||
virtual size_t Write(const uint8_t* buff, size_t sz);
|
||||
size_t ReadBlock(uint8_t* buff, size_t sz);
|
||||
void WriteBlock(const uint8_t* buff, size_t sz);
|
||||
virtual bool CanRead();
|
||||
virtual bool CanWrite();
|
||||
virtual bool CanSeek();
|
||||
virtual int64_t GetPosition();
|
||||
virtual int64_t GetLength();
|
||||
virtual void Flush();
|
||||
virtual void Seek(int64_t pos, SeekOrigin whence);
|
||||
void CopyTo(Stream* strm, size_t buffSize=1024);
|
||||
void CopyTo(Stream& strm, size_t buffSize=1024);
|
||||
virtual ~Stream();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user