parent
							
								
									5f62994de4
								
							
						
					
					
						commit
						fa051c15d5
					
				
				 1 changed files with 0 additions and 58 deletions
			
			
		@ -1,58 +0,0 @@ | 
				
			|||||||
#pragma once | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Bk::Net { | 
					 | 
				
			||||||
	class Packet 
 | 
					 | 
				
			||||||
	{ | 
					 | 
				
			||||||
	public: | 
					 | 
				
			||||||
		Packet() = default; | 
					 | 
				
			||||||
		Packet(std::vector<char> data) | 
					 | 
				
			||||||
		: payload(data) {} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		int size() { return payload.size(); } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		template <typename T> | 
					 | 
				
			||||||
		void push(const T& data) | 
					 | 
				
			||||||
		{ | 
					 | 
				
			||||||
			static_assert(std::is_standard_layout<T>::value, "Data is too complex to be pushed into vector"); | 
					 | 
				
			||||||
			size_t i = payload.size(); | 
					 | 
				
			||||||
			payload.resize(i + sizeof(T)); | 
					 | 
				
			||||||
			std::memcpy(payload.data() + i, &data, sizeof(T)); | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		template <typename T> | 
					 | 
				
			||||||
		void push(const T* data, int size) | 
					 | 
				
			||||||
		{ | 
					 | 
				
			||||||
			for(int i = 0; i < size; i++) push<T>(data[i]);	
 | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		template <typename T> | 
					 | 
				
			||||||
		T pull() | 
					 | 
				
			||||||
		{ | 
					 | 
				
			||||||
			static_assert(std::is_standard_layout<T>::value, "Data is too complex to be pulled from vector"); | 
					 | 
				
			||||||
			T data; | 
					 | 
				
			||||||
			size_t i = payload.size() - sizeof(T); | 
					 | 
				
			||||||
			std::memcpy(&data, payload.data() + i, sizeof(T)); | 
					 | 
				
			||||||
			payload.resize(i); | 
					 | 
				
			||||||
			return data; | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		template <typename T> | 
					 | 
				
			||||||
		std::unique_ptr<T[]> pull(int size) | 
					 | 
				
			||||||
		{ | 
					 | 
				
			||||||
			std::unique_ptr<T[]> data(new T[size]); | 
					 | 
				
			||||||
			for(int i = size - 1; i >= 0; i--) data[i] = pull<T>(); | 
					 | 
				
			||||||
			return data; | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		bool append_data(std::vector<char> data) | 
					 | 
				
			||||||
		{ | 
					 | 
				
			||||||
			if (!data.size()) return false; | 
					 | 
				
			||||||
			size_t i = payload.size(); | 
					 | 
				
			||||||
			payload.resize(i + data.size()); | 
					 | 
				
			||||||
			std::memcpy(payload.data() + i, data.data(), sizeof(char) * data.size()); | 
					 | 
				
			||||||
			return true; | 
					 | 
				
			||||||
		} | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
		std::vector<char> payload; | 
					 | 
				
			||||||
	}; | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue