Files
Client/Server/RylServerProject/RylServerLibrary/Network/ClientNetwork/MessageBlock.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

105 lines
2.1 KiB
C++

#include "stdafx.h"
#include "MessageBlock.h"
#include <xmemory>
#include "GMMemory.h"
CMessageBlock::CMessageBlock()
: internal_buffer_(0), rd_ptr_(0), wr_ptr_(0), buffer_size_(0)
{
}
CMessageBlock::CMessageBlock(size_t n)
: internal_buffer_(0), rd_ptr_(0), wr_ptr_(0), buffer_size_(0)
{
init(n);
}
CMessageBlock::~CMessageBlock()
{
destroy();
}
bool CMessageBlock::init(size_t n)
{
if(buffer_size_ < n)
{
destroy();
internal_buffer_ = new char[n];
}
rd_ptr_ = wr_ptr_ = internal_buffer_;
buffer_size_ = n;
return (0 != internal_buffer_);
}
void CMessageBlock::destroy()
{
if(NULL != internal_buffer_)
{
delete [] internal_buffer_;
}
buffer_size_ = 0;
rd_ptr_ = wr_ptr_ = internal_buffer_ = 0;
}
bool CMessageBlock::push(const void* ptr, size_t n)
{
if(NULL != wr_ptr_ && n <= capacity() - length())
{
memcpy(wr_ptr_, ptr, n);
wr_ptr_ += n;
return true;
}
return false;
}
void CMessageBlock::pop_read_data()
{
if(NULL != internal_buffer_)
{
size_t n = length();
memmove(internal_buffer_, rd_ptr_, n);
wr_ptr_ = internal_buffer_ + n;
rd_ptr_ = internal_buffer_;
}
}
CMessageBlock* CMessageBlock::clone(CMessageBlock& msg_block)
{
CMessageBlock* lpMessageBlock = new CMessageBlock(msg_block.length());
if(NULL != lpMessageBlock)
{
memcpy(lpMessageBlock->wr_ptr(), msg_block.rd_ptr(), msg_block.length());
lpMessageBlock->wr_ptr(msg_block.length());
return lpMessageBlock;
}
return NULL;
}
bool CMessageBlock::resize(size_t n)
{
char* temp_buffer = new char[n];
if(NULL != temp_buffer)
{
memcpy(temp_buffer, internal_buffer_,
(buffer_size_ < n) ? n : buffer_size_);
rd_ptr_ = temp_buffer + (rd_ptr_ - internal_buffer_);
wr_ptr_ = temp_buffer + (wr_ptr_ - internal_buffer_);
std::swap(internal_buffer_,temp_buffer);
delete [] temp_buffer;
return true;
}
return false;
}