#include "crNet.h"

int32_t crNet::EventCount() const
{
    return _events.Size();
}

crNetEvent crNet::EventAt( int32_t index ) const
{
    const EventRecord& rec = _events.At( index );
    return { rec.id, rec.type, rec.status, _payloads.Data() + rec.payloadOffset, rec.payloadSize };
}

void crNet::ClearAllEvents()
{
    _events.Clear();
    _payloads.Clear();
}

void crNet::PushEvent( int32_t id, ENetEventType type, int32_t status, const void* payload, int32_t payloadSize )
{
    EventRecord rec;
    rec.id            = id;
    rec.type          = type;
    rec.status        = status;
    rec.payloadOffset = _payloads.Size();
    rec.payloadSize   = payloadSize;

    _payloads.Resize( rec.payloadOffset + payloadSize + 1 );
    if( payloadSize > 0 )
        SDL_memcpy( _payloads.Data() + rec.payloadOffset, payload, static_cast<size_t>( payloadSize ) );
    _payloads.Data()[ rec.payloadOffset + payloadSize ] = 0;

    _events.Add( rec );
}
